//
 // GET: /Guess/
 public ActionResult Index()
 {
     if (Session.IsNewSession)
     {
         _secretNumber = new SecretNumber();
         Session.Add("SecretNumber", _secretNumber);
     }
     else
     {
         if (Session.Count > 0)
         {
             _secretNumber = (SecretNumber)Session["SecretNumber"];
             // Check if secret nr should be rebooted
             if (!_secretNumber.CanMakeGuess)
             {
                 _secretNumber.Initialize();
             }
         }
         else
         {
             return View("Error", string.Empty, "Sessionen är felaktig");
         }
     }
     var viewModel = new ViewModel
     {
         SecretNumber = _secretNumber
     };
     return View("Index", viewModel);
 }
        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å talet " + _secretNumber.LastGuessedNumber.Number;
                                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("Error", string.Empty, e.Message);
            }
        }
 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.");
 }
        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();
            number = (int)GetFieldValue(sn, "_number");
            sn.MakeGuess(number);
            Assert.IsFalse(sn.CanMakeGuess, "Egenskapen CanMakeGuess är inte false trots att en gissning på rätt tal gjorts.");
        }
        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.");
        }
 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.");
 }
 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.");
 }
 public void CheckMakeGuessRight()
 {
     var sn = new SecretNumber();
     var guess = (int)GetFieldValue(sn, "_number");
     Assert.IsTrue(sn.MakeGuess(guess) == Outcome.Right, "MakeGuess returnerar inte Outcome.Right då det gissade talet är samma som det hemliga talet.");
     Assert.IsTrue(sn.LastGuessedNumber.Outcome == Outcome.Right, "Egenskapen LastGuessedNumber egenskap Outcome är inte Outcome.Right efter en gissning på rätt tal gjorts.");
 }
 public void CheckMakeGuessOldGuess()
 {
     var sn = new SecretNumber();
     var guess = Math.Max((int)GetFieldValue(sn, "_number") ^ 3, 1);
     sn.MakeGuess(guess);
     guess = Math.Max((int)GetFieldValue(sn, "_number") ^ 3, 1);
     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.LastGuessedNumber.Outcome == Outcome.OldGuess, "Egenskapen LastGuessedNumber egenskap Outcome är inte Outcome.OldGuess då det gissade talet är samma som en tidigare gissning.");
 }
 public void CheckMakeGuessNoMoreGuesses()
 {
     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.LastGuessedNumber.Outcome == Outcome.NoMoreGuesses, "Egenskapen LastGuessedNumbers egenskap Outcome är inte Outcome.NoMoreGuesses då fler gissningar än sju görs.");
 }
 public void CheckMakeGuessLow()
 {
     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 < 2);
     var result = sn.MakeGuess(1);
     Assert.IsTrue(result == Outcome.Low, "MakeGuess returnerar inte Outcome.Low då det gissade talet är mindre än det hemliga talet.");
     Assert.IsTrue(sn.LastGuessedNumber.Outcome == Outcome.Low, "Egenskapen LastGuessedNumber egenskap Outcome är inte Outcome.Low efter en gissning på ett för litet tal gjorts.");
 }
 public void CheckMakeGuessArgumentOfRangeExcceptionIfGuessLowerThan1()
 {
     var sn = new SecretNumber();
     try
     {
         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 CheckLastGuessedNumberProperty()
 {
     var sn = new SecretNumber();
     var number = (int)GetFieldValue(sn, "_number");
     while (number >= 94)
     {
         sn.Initialize();
         number = (int)GetFieldValue(sn, "_number");
     }
     Assert.IsNull(sn.LastGuessedNumber.Number, "Egenskapen LastGuessedNumbers egenskap Guess är inte null trots att ingen gissning gjorts.");
     sn.MakeGuess(number - 1);
     Assert.IsTrue(sn.LastGuessedNumber.Number == number - 1, "Egenskapen LastGuessedNumbers egenskap 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.LastGuessedNumber.Number == number + 1, "Egenskapen LastGuessedNumbers egenskap 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.LastGuessedNumber.Number == number, "Egenskapen LastGuessedNumbers egenskap Guess har inte värdet av den senaste gissningen då en gissning på rätt tal gjorts.");
 }
 //
 // GET: /MakeGuess/
 public ActionResult Index()
 {
     Session["SecretNumber"] = new SecretNumber();
     return View("Index");
 }
        // Inits the secret nr again and sends back to index-method and page
        public ActionResult Reload()
        {
            if (Session.Count > 0)
            {
                _secretNumber = (SecretNumber)Session["SecretNumber"];
                _secretNumber.Initialize();

                return RedirectToAction("Index");
            }
            else
            {
                return View("Error", String.Empty, "Sessionen är felaktig");
            }
        }