private static bool CallMakeGuess(SecretNumber sn, int guess)
 {
     using (new NullOut())
     {
         return(sn.MakeGuess(guess));
     }
 }
        public void CheckInitialize()
        {
            var sn = new SecretNumber();
            int number;

            do
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
                Assert.IsTrue(number >= 1 && number <= 100, "_number är inte ett tal i det slutna intervallet mellan 1 och 100.");
            } while (number >= 94);

            for (int i = 94; i <= 100; i++)
            {
                CallMakeGuess(sn, i);
            }
            sn.Initialize();

            Assert.IsTrue(sn.Count == 0, "Count initieras inte till 0.");
            Assert.IsTrue(sn.CanMakeGuess, "CanMakeGuess initieras inte till true.");

            var guessedNumbers = (int[])GetFieldValue(sn, "_guessedNumbers");

            foreach (var guess in guessedNumbers)
            {
                Assert.IsTrue(guess == 0, "_guessedNumbers verkar inte tömmas på gammal information.");
            }
        }
示例#3
0
        public ActionResult Index()
        {
            if (Session.IsNewSession)
            {
                _secretNumber = new SecretNumber();
                Session.Add("SecretNumber", _secretNumber);
            }
            else
            {
                if (Session.Count > 0)
                {
                    _secretNumber = (SecretNumber)Session["SecretNumber"];
                    // Kollar om hemliga talet behöver "startas om"
                    if (!_secretNumber.CanMakeGuess)
                    {
                        _secretNumber.Initialize();
                    }
                }
                else
                {
                    return(OutOfTime());
                }
            }
            var viewModel = new ViewModel
            {
                SecretNumber = _secretNumber
            };

            return(View("Index", viewModel));
        }
示例#4
0
        public void CheckMakeGuessRight()
        {
            var sn = new SecretNumber();

            Assert.IsTrue(sn.MakeGuess((int)GetFieldValue(sn, "_number")) == Outcome.Right, "MakeGuess returnerar inte Outcome.Right då det gissade talet är samma som det hemliga talet.");
            Assert.IsTrue(sn.Outcome == Outcome.Right, "Egenskapen Outcome är inte Outcome.Right efter en gissning på rätt tal gjorts.");
        }
示例#5
0
        public void CheckConstructor()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");

            Assert.IsTrue(number >= 1 && number <= 100, "_number är inte ett tal i intervallet mellan 1 och 100.");
        }
示例#6
0
        public void CheckInitialize()
        {
            var sn = new SecretNumber();
            int number;

            do
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
                Assert.IsTrue(number >= 1 && number <= 100, "_number är inte ett tal i det slutna intervallet mellan 1 och 100.");
            } while (number >= 94);

            for (int i = 94; i <= 100; i++)
            {
                sn.MakeGuess(i);
            }
            sn.Initialize();

            Assert.IsTrue(sn.Count == 0, "Count initieras inte till 0.");
            Assert.IsNull(sn.Guess, "Guess initieras inte till null.");
            Assert.IsTrue(sn.Outcome == Outcome.Indefinite, "Outcome initieras inte till Outcome.Indefinite.");

            foreach (var gn in sn.GuessedNumbers)
            {
                Assert.IsTrue(gn.Number == null && gn.Outcome == Outcome.Indefinite, "GuessedNumbers verkar inte tömmas på gammal information.");
            }
        }
示例#7
0
        public void CheckGuessedNumberProperty()
        {
            var sn = new SecretNumber();
            var guessedNumbersField = (IList <GuessedNumber>)GetFieldValue(sn, "_guessedNumbers");

            Assert.AreNotSame(guessedNumbersField, sn.GuessedNumbers, "Privacy leak!!! En kopia av referensen till det privata List-objektet returneras av egenskapen GuessedNumbers.");
        }
示例#8
0
        public void CheckGuessedNumberProperty()
        {
            var sn = new SecretNumber();
            var guessedNumbersField = (GuessedNumber[])GetFieldValue(sn, "_guessedNumbers");

            Assert.AreNotSame(guessedNumbersField, sn.GuessedNumbers, "Privacy leak!!! En kopia av den privata arrayen returneras inte av egenskapen GuessedNumbers.");
        }
示例#9
0
 protected void generateNewButton_Click(object sender, EventArgs e)
 {
     //Skapar nytt tal och tömmer tidigare gissningar, knappar disabled o enabled
     Session["myGuess"] = new SecretNumber();
     LiteralPrevious.Text = "";
     inputTextBox.Enabled = true;
     myGuessButton.Enabled = true;
 }
示例#10
0
        public void Execute_CallsInsert_FromRepository()
        {
            var expected = new SecretNumber <int>(new List <ISecretDigit <int> >());

            _instance.Execute(expected);

            _repository.Verify(instance => instance.Insert(expected));
        }
示例#11
0
        public void CheckMakeGuessOldGuess()
        {
            var sn    = new SecretNumber();
            var guess = Math.Max((int)GetFieldValue(sn, "_number") ^ 3, 1);

            sn.MakeGuess(guess);
            Assert.IsTrue(sn.MakeGuess(guess) == Outcome.OldGuess, "MakeGuess returnerar inte Outcome.OldGuess då det gissade talet är samma som en tidigare gissning.");
            Assert.IsTrue(sn.Outcome == Outcome.OldGuess, "Egenskapen Outcome är inte Outcome.OldGuess då det gissade talet är samma som en tidigare gissning.");
        }
示例#12
0
        private SecretNumber GetListToSession()
        {
            var guessList = Session["savedList"] as SecretNumber;

            if (guessList == null)
            {
                guessList            = new SecretNumber();
                Session["savedList"] = guessList;
            }
            return(guessList);
        }
        public void CheckMakeGuessOldGuess()
        {
            var sn    = new SecretNumber();
            var guess = Math.Max((int)GetFieldValue(sn, "_number") ^ 3, 1);

            CallMakeGuess(sn, guess);
            var count = sn.Count;

            Assert.IsFalse(CallMakeGuess(sn, guess), "MakeGuess returnerar inte false då det gissade talet är samma som en tidigare gissning.");
            Assert.IsTrue(count == sn.Count, "En gissning på ett tal samma som en tidigare gissnings tal räknas felaktigt som en ny gissning.");
        }
示例#14
0
        // Hämtar/Skapar en "användare":
        private SecretNumber GetUser()
        {
            SecretNumber x = Session["User"] as SecretNumber;

            if (x == null)
            {
                x = new SecretNumber();
                Session["User"] = x;
            }
            return(x);
        }
示例#15
0
 public static SecretNumberViewModel ToViewModel(this SecretNumber x, int guess = 0)
 {
     return(new SecretNumberViewModel
     {
         GuessedNumbers = x.GuessedNumbers,
         Number = x.Number,
         Count = x.Count,
         LastGuessedNumber = x.LastGuessedNumber,
         CanMakeGuess = x.CanMakeGuess,
         Guess = guess
     });
 }
        public void CheckConstructor()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");

            Assert.IsTrue(number >= 1 && number <= 100, "_number är inte ett tal i det slutna intervallet mellan 1 och 100.");

            var guessedNumbers = (int[])GetFieldValue(sn, "_guessedNumbers");

            Assert.IsNotNull(guessedNumbers, "_guessedNumbers har inte initierats.");
            Assert.IsTrue(guessedNumbers.Length == 7, "_guessedNumbers har inte sju element.");
        }
示例#17
0
        // Initiearar det hemliga talet igen och skickar tillbaka det till index-metoden
        public ActionResult Reload()
        {
            if (Session.Count > 0)
            {
                _secretNumber = (SecretNumber)Session["SecretNumber"];
                _secretNumber.Initialize();

                return(RedirectToAction("Index"));
            }
            else
            {
                return(View("OutOfTime"));
            }
        }
示例#18
0
        public ActionResult Index([Bind(Include = "Guess")] ViewModel viewModel)
        {
            try
            {
                if (Session.Count > 0)
                {
                    _secretNumber          = (SecretNumber)Session["SecretNumber"];
                    viewModel.SecretNumber = _secretNumber;
                    if (ModelState.IsValid)
                    {
                        var outcome = _secretNumber.MakeGuess(viewModel.Guess);

                        switch (outcome)
                        {
                        case Outcome.Indefinite:
                            break;

                        case Outcome.High:
                            viewModel.Status = _secretNumber.LastGuessedNumber.Number + " är för högt.";
                            break;

                        case Outcome.Low:
                            viewModel.Status = _secretNumber.LastGuessedNumber.Number + " är för lågt";
                            break;

                        case Outcome.OldGuess:
                            viewModel.Status = "Du har redan gissat på detta talet ";
                            break;

                        case Outcome.Right:
                            viewModel.Status = "Grattis, du klarade det på " + _secretNumber.Count + " försök!";
                            break;
                        }
                        if (!_secretNumber.CanMakeGuess)
                        {
                            viewModel.Status += " Det hemliga talet var " + _secretNumber.Number;
                        }
                    }
                    return(View("Index", viewModel));
                }
                else
                {
                    throw new ApplicationException("Sessionen är felaktig");
                }
            }
            catch (Exception e)
            {
                return(View("OutOfTime"));
            }
        }
示例#19
0
        public void CheckNumberProperty()
        {
            var sn = new SecretNumber();

            Assert.IsNull(sn.Number, "Egenskapen Number returnerar inte null trots att det finns gissningar kvar.");
            var number = (int)GetFieldValue(sn, "_number");

            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }
            for (int i = 94; i <= 100; i++)
            {
                sn.MakeGuess(i);
            }
            Assert.IsTrue(sn.Number == number, "Egenskapen Number har inte samma värde som fältet _number trots att det inte finns några gissningar kvar.");
        }
示例#20
0
        public void CheckGuessProperty()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");

            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }
            Assert.IsNull(sn.Guess, "Egenskapen Guess är inte null trots att ingen gissning gjorts.");
            sn.MakeGuess(number - 1);
            Assert.IsTrue(sn.Guess == number - 1, "Egenskapen Guess har inte värdet av den senaste gissningen då en gissning på ett för lågt tal gjorts.");
            sn.MakeGuess(number + 1);
            Assert.IsTrue(sn.Guess == number + 1, "Egenskapen Guess har inte värdet av den senaste gissningen då en gissning på ett för högt tal gjorts.");
            sn.MakeGuess(number);
            Assert.IsTrue(sn.Guess == number, "Egenskapen Guess har inte värdet av den senaste gissningen då en gissning på rätt tal gjorts.");
        }
    protected void GuessButton_Click(object sender, EventArgs e)
    {
        int guess = int.Parse(GuessBox.Text);
        SecretNumber number = new SecretNumber();

        if (newNumber == null)
            newNumber = number;

        if (Page.IsValid)
        {
            if (newNumber.MakeGuess(guess))
            {
                result.InnerText = "Du gissade rätt! Det hemliga talet var " + newNumber.Number + "!" ;
                GuessButton.Visible = false;
                RetryButton.Visible = true;
            }
            else
            {
                result.InnerText = "Du gissade fel, försök igen! Du har " + newNumber.GuessesLeft + " gissningar kvar!";

                if (guess > newNumber.ValueCheck)
                {
                    result.InnerText = result.InnerText + " Din senaste gissning var för hög!";
                }
                else if (guess < newNumber.ValueCheck)
                {
                    result.InnerText = result.InnerText + " Din senaste gissning var för låg!";
                }

                if (!(newNumber.CanMakeGuess))
                {
                    result.InnerText = "Du har tyvärr s**t på gissningar! Det hemliga talet var " + newNumber.Number + "!";
                    GuessButton.Visible = false;
                    RetryButton.Visible = true;
                }
            }

            guesses.InnerText = "Dina gissningar: ";
            foreach (int i in newNumber.GuessedNumbers)
            {
                guesses.InnerText = guesses.InnerText + i + ", ";
            }
        }
    }
示例#22
0
        public void CheckMakeGuesskNoMoreGuesses()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");

            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }
            for (int i = 94; i <= 100; i++)
            {
                sn.MakeGuess(i);
            }
            var result = sn.MakeGuess(number);

            Assert.IsTrue(result == Outcome.NoMoreGuesses, "MakeGuess returnerar inte Outcome.NoMoreGuesses då fler gissningar än sju görs.");
            Assert.IsTrue(sn.Outcome == Outcome.NoMoreGuesses, "Egenskapen Outcome är inte Outcome.NoMoreGuesses då fler gissningar än sju görs.");
        }
示例#23
0
        public void CheckMakeGuessArgumentOfRangeExcceptionIfGuessGreaterThan100()
        {
            var sn = new SecretNumber();

            try
            {
                sn.MakeGuess(101);
                throw new ApplicationException();
            }
            catch (ArgumentOutOfRangeException)
            {
                // Eat!
                return;
            }
            catch
            {
                Assert.Fail("ArgumentOutOfRangeException kastas inte vid gissning på ett tal större än 100.");
            }
        }
示例#24
0
        public void CheckInitialize()
        {
            var sn = new SecretNumber();
            int number;

            do
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
                Assert.IsTrue(number >= 1 && number <= 100, "_number är inte ett tal i intervallet mellan 1 och 100.");
            } while (number >= 94);

            for (int i = 94; i <= 100; i++)
            {
                CallMakeGuess(sn, i);
            }
            sn.Initialize();

            Assert.IsTrue((int)GetFieldValue(sn, "_count") == 0, "_count initieras inte till 0.");
        }
        public void CheckMakeGuessHigh()
        {
            var sn = new SecretNumber();
            int number, prevNumber, loopCount = 5;

            do
            {
                prevNumber = (int)GetFieldValue(sn, "_number");
                Thread.Sleep(100);
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
                Assert.IsTrue(number >= 1 && number <= 100, "Initialize(): _number är inte ett tal i det slutna intervallet mellan 1 och 100.");
                if (--loopCount == 0)
                {
                    Assert.IsTrue(prevNumber != number, "Initialize(): _number verkar inte slumpas.");
                    return;
                }
            } while (number > 99);
            Assert.IsFalse(CallMakeGuess(sn, 100), "MakeGuess returnerar inte false då det gissade talet är högre än det hemliga talet.");
        }
        public void CheckGuessesLeftProperty()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");

            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }

            Assert.IsTrue(sn.GuessesLeft == 7, "GuessesLeft är inte 7 trots att ingen gissning gjorts.");

            int count = 0;

            for (int i = 94; i <= 100; i++)
            {
                CallMakeGuess(sn, i);
                Assert.IsTrue(sn.Count == ++count, String.Format("GuessesLeft: GuessesLeft är inte {0} trots att {1} gissning(ar) gjorts.", 7 - count, count));
            }
        }
示例#27
0
        public void CheckCountProperty()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");

            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }
            Assert.IsTrue(sn.Count == 0, "Egenskapen Count är inte 0 trots att ingen gissning gjorts.");
            int count = 0;

            for (int i = 94; i <= 100; i++)
            {
                sn.MakeGuess(i);
                Assert.IsTrue(sn.Count == ++count, String.Format("Egenskapen Count är inte {0} trots att {0} gissning(ar) gjorts.", count));
            }
            sn.MakeGuess(number);
            Assert.IsTrue(sn.Count == 7, "Egenskapen Count slutar inte att räknas upp efter att sju gissningar gjorts och ytterligare gissningar görs.");
        }
示例#28
0
        public void CheckCanMakeGuessProperty()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");

            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }
            for (int i = 94; i <= 100; i++)
            {
                Assert.IsTrue(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte true trots att alla gissningar inte gjorts.");
                sn.MakeGuess(i);
            }
            Assert.IsFalse(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte false trots att sju gissningar gjorts.");

            sn.Initialize();
            sn.MakeGuess((int)GetFieldValue(sn, "_number"));
            Assert.IsFalse(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte false trots att en gissning på rätt tal gjorts.");
        }
        public void CheckMakeGuessArgumentOfRangeExcceptionIfGuessLowerThan1()
        {
            var sn = new SecretNumber();

            try
            {
                using (new NullOut())
                {
                    sn.MakeGuess(0);
                    throw new ApplicationException();
                }
            }
            catch (ArgumentOutOfRangeException)
            {
                // Eat!
                return;
            }
            catch
            {
                Assert.Fail("ArgumentOutOfRangeException kastas inte vid gissning på ett tal mindre än 1.");
            }
        }
        public void CheckCountProperty()
        {
            var sn     = new SecretNumber();
            var number = (int)GetFieldValue(sn, "_number");

            while (number >= 94)
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
            }

            Assert.IsTrue(sn.Count == 0, "Egenskapen Count är inte 0 trots att ingen gissning gjorts.");

            int count = 0;

            for (int i = 94; i <= 100; i++)
            {
                CallMakeGuess(sn, i);
                Assert.IsTrue(sn.Count == ++count, String.Format("Egenskapen Count är inte {0} trots att {0} gissning(ar) gjorts.", count));
            }

            try
            {
                CallMakeGuess(sn, number);
                Assert.IsTrue(sn.Count == 7, "Egenskapen Count slutar inte att räknas upp efter att sju gissningar gjorts och ytterligare gissningar görs.");
            }
            catch (ApplicationException)
            {
                // Eat!
                return;
            }
            catch
            {
                // Eat!
            }

            Assert.Fail("ApplicationsException kastas inte då fler gissningar än sju görs.");
        }
示例#31
0
        public void CheckMakeGuessHigh()
        {
            var sn = new SecretNumber();
            int number, prevNumber, loopCount = 5;

            do
            {
                prevNumber = (int)GetFieldValue(sn, "_number");
                Thread.Sleep(100);
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
                Assert.IsTrue(number >= 1 && number <= 100, "Initialize(): _number är inte ett tal i det slutna intervallet mellan 1 och 100.");
                if (--loopCount == 0)
                {
                    Assert.IsTrue(prevNumber != number, "Initialize(): _number verkar inte slumpas");
                    return;
                }
            } while (number > 99);
            var result = sn.MakeGuess(100);

            Assert.IsTrue(result == Outcome.High, "MakeGuess returnerar inte Outcome.High då det gissade talet är högre än det hemliga talet.");
            Assert.IsTrue(sn.Outcome == Outcome.High, "Egenskapen Outcome är inte Outcome.High efter en gissning på ett för stort tal gjorts.");
        }
示例#32
0
        public void CheckInitialize()
        {
            var sn = new SecretNumber();
            int number;

            do
            {
                sn.Initialize();
                number = (int)GetFieldValue(sn, "_number");
                Assert.IsTrue(number >= 1 && number <= 100, "_number är inte ett tal i det slutna intervallet mellan 1 och 100.");
            } while (number >= 94);

            for (int i = 94; i <= 100; i++)
            {
                sn.MakeGuess(i);
            }
            sn.Initialize();

            Assert.IsTrue(sn.GuessedNumbers.Count == 0, "Listan med gamla gissningar töms inte.");
            Assert.IsTrue(sn.Count == 0, "Count är inte till 0.");
            Assert.IsNull(sn.LastGuessedNumber.Number, "LastGuessedNumber.Number är inte satt till null.");
            Assert.IsTrue(sn.LastGuessedNumber.Outcome == Outcome.Indefinite, "LastGuessedNumber.Outcome är inte satt till Outcome.Indefinite.");
        }
 protected void RetryButton_Click(object sender, EventArgs e)
 {
     newNumber = null;
     result.InnerText = "";
     guesses.InnerText = "";
 }
示例#34
0
 protected void Page_Load(object sender, EventArgs e)
 {
     //Kontroll av postback
     if (!IsPostBack)
     {
         //Skapar object och lägger den i sessionen theGuess
         Session["myGuess"] = new SecretNumber();
         //Sparar sessionen i variabel för att kunna anropa objektet
         var theGuess = Session["myGuess"] as SecretNumber;
     }
 }