public void DEBResetMatches_FiresMatchesModifiedEvent_WithAllAffectedMatches()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 17; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            for (int n = 1; n <= b.NumberOfMatches; ++n)
            {
                b.SetMatchWinner(n, PlayerSlot.Defender);
            }

            int matchesAffected = -1;

            b.MatchesModified += delegate(object sender, BracketEventArgs e)
            {
                matchesAffected = e.UpdatedMatches
                                  .Select(mm => mm.MatchNumber).Distinct().ToList().Count;
            };
            b.ResetMatches();
            Assert.AreEqual(b.NumberOfMatches, matchesAffected);
        }
        public void DEBResetMatchScore_FiresEvents_ForAllDeletedGames()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList, 3);

            b.AddGame(1, 1, 0, PlayerSlot.Defender);             // Targeted
            b.AddGame(1, 0, 1, PlayerSlot.Challenger);           // Targeted
            b.AddGame(1, 1, 0, PlayerSlot.Defender);             // Targeted Delete
            b.AddGame(2, 1, 0, PlayerSlot.Defender);
            b.AddGame(2, 1, 0, PlayerSlot.Defender);
            b.AddGame(3, 1, 0, PlayerSlot.Defender);             // Should Delete
            b.AddGame(4, 1, 0, PlayerSlot.Defender);             // Should Delete

            int expectedAffected = 5;
            int deletedGames     = 0;

            b.GamesDeleted += delegate(object sender, BracketEventArgs e)
            {
                deletedGames += e.DeletedGameIDs.Count;
            };
            b.MatchesModified += delegate(object sender, BracketEventArgs e)
            {
                deletedGames += e.DeletedGameIDs.Count;
            };

            b.ResetMatchScore(1);
            Assert.AreEqual(expectedAffected, deletedGames);
        }
        public void DEBResetMatchScore_ThrowsMatchesModifiedEvent_WithAllAffectedMatches()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 5; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            for (int n = 1; n <= b.NumberOfMatches; ++n)
            {
                b.SetMatchWinner(n, PlayerSlot.Challenger);
            }

            int expectedAffected = 6;
            int affectedMatches  = 0;

            b.MatchesModified += delegate(object sender, BracketEventArgs e)
            {
                affectedMatches = e.UpdatedMatches.Count;
            };

            b.ResetMatchScore(1);
            Assert.AreEqual(expectedAffected, affectedMatches);
        }
        public void DEBCtor_CallsSEBCtor()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 2; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            Assert.AreEqual(2, b.Players.Count);
        }
        public void DEBCtor_Constructs()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 2; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            Assert.IsInstanceOfType(b, typeof(DoubleElimBracket));
        }
        public void DEBRemoveLastGame_ThrowsInvalidIndex_WithBadMatchNumberInput()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            b.RemoveLastGame(-1);
            Assert.AreEqual(1, 2);
        }
        public void DEBSMGFWLR_ThrowsScoreException_WithNegativeInput()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 16; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            b.SetMaxGamesForWholeLowerRound(1, -1);
            Assert.AreEqual(1, 2);
        }
        public void DEB_CreateBracket_CreatesLowerBracket()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 8; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            //b.CreateBracket(2);
            Assert.AreEqual(4, b.NumberOfLowerRounds);
        }
        public void DEBResetScore_ThrowsNotFound_WithBadMatchNumberInput()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            b.ResetMatchScore(b.NumberOfMatches + 1);
            Assert.AreEqual(1, 2);
        }
        public void DEBCreateBracket_AssignsMatchNumberToGrandFinal()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            //b.CreateBracket();

            Assert.AreEqual(b.NumberOfMatches, b.GrandFinal.MatchNumber);
        }
        public void DEB_CreateBracket_MakesGrandFinalMatch()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            //b.CreateBracket();

            Assert.IsInstanceOfType(b.GrandFinal, typeof(IMatch));
        }
        public void DEB_CreateBracket_DoesNotAdvanceLosersFromPlayinRound()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 15; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            //b.CreateBracket(2);

            Assert.AreEqual(-1, b.GetMatch(1).NextLoserMatchNumber);
        }
        public void DEBGetLowerRound_ReturnsCorrectly()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 8; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            //b.CreateBracket();

            Assert.AreEqual(2, b.GetLowerRound(1).Count);
        }
        public void DEB_RPFFM_RemovesPlayerFromLowerBracket()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            b.AddGame(1, 1, 0, PlayerSlot.Defender);
            b.RemoveLastGame(1);
            Assert.IsNull(b.GetLowerRound(1)[0].Players[(int)PlayerSlot.Defender]);
        }
        public void DEBSMGFWLR_DoesNotUpdateUpperBracketRound()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 16; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            int round = 2;

            b.SetMaxGamesForWholeLowerRound(round, 5);
            Assert.AreEqual(1, b.GetRound(round)[0].MaxGames);
        }
        public void DEBCreateBracket_AssignsMatchNumbersToLowerBracket()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            //b.CreateBracket();

            Assert.AreEqual(b.GetRound(b.NumberOfRounds)[0].MatchNumber + 1,
                            b.GetLowerRound(1)[0].MatchNumber);
        }
        public void DEBCreateBracket_GeneratesFor20Players()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 20; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 3);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            var           v        = b.GetRound(2);
            List <IMatch> roundOne = b.GetRound(1);

            Assert.AreEqual(4, roundOne.Count);
        }
        public void DEBGetLowerRound_ThrowsIndexException_WithNegativeInput()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 8; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            //b.CreateBracket();

            b.GetLowerRound(-1);
            Assert.AreEqual(1, 2);
        }
        public void DEB_AddGame_MovesLoserToLowerBracket()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            //b.CreateBracket();

            b.AddGame(2, 0, 10, PlayerSlot.Challenger);
            Assert.AreEqual(b.GetMatch(2).Players[(int)PlayerSlot.Defender],
                            b.GetLowerRound(1)[0].Players[(int)PlayerSlot.Challenger]);
        }
        public void DEBSMGFWR_UpdatesCorrectUpperBracketRound()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 16; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            int games = 5;
            int round = 2;

            b.SetMaxGamesForWholeRound(round, games);
            Assert.AreEqual(games, b.GetRound(round)[1].MaxGames);
        }
        public void DEBResetMatch_Resets()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList, 3);

            b.AddGame(1, 1, 0, PlayerSlot.Defender);
            b.AddGame(1, 0, 1, PlayerSlot.Challenger);

            b.ResetMatchScore(1);
            Assert.AreEqual(0, b.GetMatch(1).Score[(int)PlayerSlot.Defender]);
        }
        public void DEBResetMatch_UpdatesALLRankings_WhenMatchWinIsReversed()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            for (int n = 1; n <= b.NumberOfMatches; ++n)
            {
                b.AddGame(n, 1, 0, PlayerSlot.Defender);
            }

            b.ResetMatchScore(1);
            Assert.AreEqual(0, b.Rankings.Count);
        }
        public void DEBSMGFWLR_ThrowsInactiveMatch_WhenMatchIsFinished()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 8; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i + 1);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            for (int n = 1; n < b.NumberOfMatches; ++n)
            {
                b.AddGame(n, 1, 0, PlayerSlot.Defender);
            }

            b.SetMaxGamesForWholeLowerRound(1, 3);
            Assert.AreEqual(1, 2);
        }
        public void DEBRemoveLastGame_RemovesFromGrandFinal()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            for (int n = 1; n <= b.NumberOfMatches; ++n)
            {
                b.AddGame(n, 1, 0, PlayerSlot.Defender);
            }

            b.RemoveLastGame(b.GrandFinal.MatchNumber);
            Assert.AreEqual(0, b.GrandFinal.Score[(int)PlayerSlot.Defender]);
        }
        public void DEBRemoveLastGame_CorrectlyRemovesPriorLoserFromRankingsList()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            for (int n = 1; n <= 4; ++n)
            {
                b.AddGame(n, 1, 0, PlayerSlot.Defender);
            }

            b.RemoveLastGame(4);
            Assert.AreEqual(0, b.Rankings.Count);
        }
        public void DEBUpdateGame_DoesNotCascadeMatches_IfWinnerDoesNotChange()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 8; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            for (int n = 1; n <= b.NumberOfMatches; ++n)
            {
                b.AddGame(n, 20, 5, PlayerSlot.Defender);
            }

            b.UpdateGame(1, 1, 10, 0, PlayerSlot.Defender);
            Assert.IsTrue(b.GrandFinal.IsFinished);
        }
        public void DEBUpdateGame_RecalculatesRankings()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            for (int n = 1; n < b.NumberOfMatches; ++n)
            {
                b.AddGame(n, 20, 5, PlayerSlot.Defender);
            }

            b.UpdateGame(1, 1, 0, 10, PlayerSlot.Challenger);
            Assert.AreEqual(0, b.Rankings.Count);
        }
        public void DEBUpdateGame_CascadesToLowerBracket()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 8; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            for (int n = 1; n < b.NumberOfMatches; ++n)
            {
                b.AddGame(n, 20, 5, PlayerSlot.Defender);
            }

            b.UpdateGame(1, 1, 0, 10, PlayerSlot.Challenger);
            Assert.IsFalse(b.GetMatch(b.GetMatch(1).NextLoserMatchNumber).IsFinished);
        }
        public void DEBAddGame_AddsGamesToGrandFinal_GamesList()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            //b.CreateBracket();

            for (int n = 1; n <= b.NumberOfMatches; ++n)
            {
                b.AddGame(n, 1, 0, PlayerSlot.Defender);
            }
            Assert.AreEqual(1, b.GrandFinal.Games.Count);
        }
        public void DEBAddGame_UpperBracketWins_DoNotAffectRankingsList()
        {
            List <IPlayer> pList = new List <IPlayer>();

            for (int i = 0; i < 4; ++i)
            {
                Mock <IPlayer> moq = new Mock <IPlayer>();
                moq.Setup(p => p.Id).Returns(i);
                pList.Add(moq.Object);
            }
            IBracket b = new DoubleElimBracket(pList);

            //b.CreateBracket();

            for (int n = 1; n <= 3; ++n)
            {
                b.AddGame(n, 1, 0, PlayerSlot.Defender);
            }
            Assert.AreEqual(0, b.Rankings.Count);
        }