Example #1
0
 private void RegisterFirstTwoPlayers()
 {
     firstPlayerReference  = tournament.RegisterPlayerReference(firstPlayerName);
     secondPlayerReference = tournament.RegisterPlayerReference(secondPlayerName);
     bracketGroup          = bracketRound.Groups.First() as BracketGroup;
     match = bracketGroup.Matches.First();
 }
Example #2
0
        public void IssueIsReportedWhenStartDateTimeForMatchIsSetEarlierThanAnyMatchInPreviousRound()
        {
            List <string> playerNames = new List <string>()
            {
                "Maru", "Stork", "Taeja", "Rain", "Bomber", "FanTaSy", "Stephano", "Thorzain"
            };

            bracketRound.SetPlayersPerGroupCount(4);
            BracketRound secondBracketRound = tournament.AddBracketRound() as BracketRound;

            foreach (string playerName in playerNames)
            {
                tournament.RegisterPlayerReference(playerName);
            }

            BracketGroup bracketGroup            = bracketRound.Groups.First() as BracketGroup;
            BracketNode  finalNodeFromFirstRound = bracketGroup.BracketNodeSystem.FinalNode;

            BracketGroup bracketGroupFromSecondRound = secondBracketRound.Groups.First() as BracketGroup;
            BracketNode  finalNodeFromSecondRound    = bracketGroupFromSecondRound.BracketNodeSystem.FinalNode;

            Match    finalFromFirstRound              = finalNodeFromFirstRound.Match;
            Match    finalFromSecondRound             = finalNodeFromSecondRound.Match;
            DateTime oneHourBeforeFinalFromFirstRound = finalFromFirstRound.StartDateTime.AddHours(-1);

            bool validationResult = MatchStartDateTimeValidator.Validate(finalFromSecondRound, oneHourBeforeFinalFromFirstRound);

            validationResult.Should().BeTrue();
            tournamentIssueReporter.Issues.Should().HaveCount(1);
        }
        public void NoIssueIsReportedWhenStartDateTimeOnMatchesWithinATierIsUnordered()
        {
            List <string> playerNames = new List <string>()
            {
                "Maru", "Stork", "Taeja", "Rain", "Bomber", "FanTaSy", "Stephano", "Thorzain"
            };

            bracketRound.SetPlayersPerGroupCount(playerNames.Count);

            foreach (string playerName in playerNames)
            {
                tournament.RegisterPlayerReference(playerName);
            }

            BracketGroup       bracketGroup     = bracketRound.Groups.First() as BracketGroup;
            List <BracketNode> quarterfinalTier = bracketGroup.BracketNodeSystem.GetBracketNodesInTier(2);

            DateTime twoHoursEarlier   = quarterfinalTier[0].Match.StartDateTime.AddHours(-2);
            DateTime threeHoursEarlier = quarterfinalTier[1].Match.StartDateTime.AddHours(-3);
            DateTime oneHourEarlier    = quarterfinalTier[2].Match.StartDateTime.AddHours(-1);
            DateTime twoHoursLater     = quarterfinalTier[3].Match.StartDateTime.AddHours(2);

            quarterfinalTier[0].Match.SetStartDateTime(twoHoursEarlier);
            quarterfinalTier[1].Match.SetStartDateTime(threeHoursEarlier);
            quarterfinalTier[2].Match.SetStartDateTime(oneHourEarlier);
            quarterfinalTier[3].Match.SetStartDateTime(twoHoursLater);

            quarterfinalTier[0].Match.StartDateTime.Should().Be(twoHoursEarlier);
            quarterfinalTier[1].Match.StartDateTime.Should().Be(threeHoursEarlier);
            quarterfinalTier[2].Match.StartDateTime.Should().Be(oneHourEarlier);
            quarterfinalTier[3].Match.StartDateTime.Should().Be(twoHoursLater);

            tournamentIssueReporter.Issues.Should().BeEmpty();
        }
Example #4
0
        public void CreatesMatchTierListWhenBracketMatchesAreAdded()
        {
            List <string> playerNames = new List <string>()
            {
                "Maru", "Stork", "Taeja", "Rain", "Bomber", "FanTaSy", "Stephano"
            };

            bracketRound.SetPlayersPerGroupCount(playerNames.Count);

            foreach (string playerName in playerNames)
            {
                tournament.RegisterPlayerReference(playerName);
            }

            bracketGroup = bracketRound.Groups.First() as BracketGroup;
            bracketGroup.BracketNodeSystem.TierCount.Should().Be(3);

            List <BracketNode> finalTier        = bracketGroup.BracketNodeSystem.GetBracketNodesInTier(0);
            List <BracketNode> semifinalTier    = bracketGroup.BracketNodeSystem.GetBracketNodesInTier(1);
            List <BracketNode> quarterfinalTier = bracketGroup.BracketNodeSystem.GetBracketNodesInTier(2);

            finalTier.Count.Should().Be(1);
            finalTier[0].Match.Should().Be(bracketGroup.Matches[5]);

            semifinalTier.Count.Should().Be(2);
            semifinalTier[0].Match.Should().Be(bracketGroup.Matches[4]);
            semifinalTier[1].Match.Should().Be(bracketGroup.Matches[3]);

            quarterfinalTier.Count.Should().Be(3);
            quarterfinalTier[0].Match.Should().Be(bracketGroup.Matches[2]);
            quarterfinalTier[1].Match.Should().Be(bracketGroup.Matches[1]);
            quarterfinalTier[2].Match.Should().Be(bracketGroup.Matches[0]);
        }
        public void IssueIsReportedWhenStartDateTimeForMatchIsEarlierThanAnyParentMatch()
        {
            List <string> playerNames = new List <string>()
            {
                "Maru", "Stork", "Taeja", "Rain", "Bomber", "FanTaSy", "Stephano", "Thorzain"
            };

            bracketRound.SetPlayersPerGroupCount(playerNames.Count);

            foreach (string playerName in playerNames)
            {
                tournament.RegisterPlayerReference(playerName);
            }

            BracketGroup bracketGroup = bracketRound.Groups.First() as BracketGroup;
            BracketNode  finalNode    = bracketGroup.BracketNodeSystem.FinalNode;

            Match final           = finalNode.Match;
            Match firstSemifinal  = finalNode.Children[0].Match;
            Match secondSemifinal = finalNode.Children[1].Match;

            DateTime oneHourBeforeFirstSemifinal  = firstSemifinal.StartDateTime.AddHours(-1);
            DateTime oneHourBeforeSecondSemifinal = secondSemifinal.StartDateTime.AddHours(-1);

            final.SetStartDateTime(oneHourBeforeFirstSemifinal);
            final.StartDateTime.Should().Be(oneHourBeforeFirstSemifinal);

            final.SetStartDateTime(oneHourBeforeSecondSemifinal);
            final.StartDateTime.Should().Be(oneHourBeforeSecondSemifinal);

            tournamentIssueReporter.Issues.Should().HaveCount(2);
        }
Example #6
0
 public MatchTests()
 {
     tournament   = Tournament.Create("GSL 2019");
     bracketRound = tournament.AddBracketRound() as BracketRound;
     tournament.RegisterPlayerReference(firstPlayerName);
     tournament.RegisterPlayerReference(secondPlayerName);
     bracketGroup = bracketRound.Groups.First() as BracketGroup;
     match        = bracketGroup.Matches.First();
 }
Example #7
0
 public MatchBetTests()
 {
     user       = User.Create("Stålberto");
     tournament = Tournament.Create("GSL 2019");
     better     = tournament.AddBetter(user);
     round      = tournament.AddBracketRound() as BracketRound;
     tournament.RegisterPlayerReference("Maru");
     tournament.RegisterPlayerReference("Stork");
     group      = round.Groups.First() as BracketGroup;
     firstMatch = group.Matches.First();
 }
Example #8
0
        public void MatchStartDateTimeCannotBeChangedToSometimeInThePast()
        {
            BracketGroup bracketGroup     = bracketRound.Groups.First() as BracketGroup;
            Match        match            = bracketGroup.Matches.First();
            DateTime     oneHourInThePast = SystemTime.Now.AddSeconds(-1);

            bool validationResult = MatchStartDateTimeValidator.Validate(match, oneHourInThePast);

            validationResult.Should().BeFalse();
            tournamentIssueReporter.Issues.Should().HaveCount(1);
        }
Example #9
0
        public void CanCreateGroup()
        {
            BracketGroup bracketGroup = BracketGroup.Create(bracketRound);

            bracketGroup.Should().NotBeNull();
            bracketGroup.Id.Should().NotBeEmpty();
            bracketGroup.Matches.Should().BeEmpty();
            bracketGroup.RoundId.Should().Be(bracketRound.Id);
            bracketGroup.Round.Should().Be(bracketRound);
            bracketGroup.BracketNodeSystem.Should().BeNull();
        }
Example #10
0
        public PlayerInBracketGroupTests()
        {
            tournament = Tournament.Create("GSL 2019");
            round      = tournament.AddBracketRound();
            round.SetAdvancingPerGroupCount(1);
            round.SetPlayersPerGroupCount(4);

            foreach (string playerName in playerNames)
            {
                tournament.RegisterPlayerReference(playerName);
            }

            group = round.Groups.First() as BracketGroup;
            match = group.Matches.First();
            match.SetBestOf(5);

            player = match.Player1;
        }
Example #11
0
        public void CanConstructBracketLayoutWithEvenPlayers()
        {
            List <string> playerNames = new List <string>()
            {
                "Maru", "Stork", "Taeja", "Rain", "Bomber", "FanTaSy", "Stephano", "Thorzain"
            };

            bracketRound.SetPlayersPerGroupCount(playerNames.Count);

            foreach (string playerName in playerNames)
            {
                tournament.RegisterPlayerReference(playerName);
            }

            BracketGroup bracketGroup = bracketRound.Groups.First() as BracketGroup;

            bracketGroup.Matches.Should().HaveCount(playerNames.Count - 1);

            foreach (Match match in bracketGroup.Matches)
            {
                match.Should().NotBeNull();
            }

            bracketGroup.Matches[0].Player1.GetName().Should().Be(playerNames[0]);
            bracketGroup.Matches[0].Player2.GetName().Should().Be(playerNames[1]);

            bracketGroup.Matches[1].Player1.GetName().Should().Be(playerNames[2]);
            bracketGroup.Matches[1].Player2.GetName().Should().Be(playerNames[3]);

            bracketGroup.Matches[2].Player1.GetName().Should().Be(playerNames[4]);
            bracketGroup.Matches[2].Player2.GetName().Should().Be(playerNames[5]);

            bracketGroup.Matches[3].Player1.GetName().Should().Be(playerNames[6]);
            bracketGroup.Matches[3].Player2.GetName().Should().Be(playerNames[7]);

            bracketGroup.Matches[4].Player1.PlayerReferenceId.Should().BeEmpty();
            bracketGroup.Matches[4].Player2.PlayerReferenceId.Should().BeEmpty();

            bracketGroup.Matches[5].Player1.PlayerReferenceId.Should().BeEmpty();
            bracketGroup.Matches[5].Player2.PlayerReferenceId.Should().BeEmpty();

            bracketGroup.Matches[6].Player1.PlayerReferenceId.Should().BeEmpty();
            bracketGroup.Matches[6].Player2.PlayerReferenceId.Should().BeEmpty();
        }
Example #12
0
        public void CannotSwitchPlacesOnPlayerReferenceWhenAnyPlayerIsNull()
        {
            bracketRound.SetPlayersPerGroupCount(4);
            PlayerReference maruPlayerReference  = tournament.RegisterPlayerReference("Maru");
            PlayerReference storkPlayerReference = tournament.RegisterPlayerReference("Stork");
            PlayerReference taejaPlayerReference = tournament.RegisterPlayerReference("Taeja");

            BracketGroup group = bracketRound.Groups.First() as BracketGroup;

            Match firstMatch  = group.Matches[0];
            Match secondMatch = group.Matches[1];

            bool result = PlayerSwitcher.SwitchMatchesOn(firstMatch.Player1, secondMatch.Player2);

            result.Should().BeFalse();
            firstMatch.Player1.PlayerReferenceId.Should().Be(maruPlayerReference.Id);
            firstMatch.Player2.PlayerReferenceId.Should().Be(storkPlayerReference.Id);
            secondMatch.Player1.PlayerReferenceId.Should().Be(taejaPlayerReference.Id);
            secondMatch.Player2.PlayerReferenceId.Should().BeEmpty();
        }
Example #13
0
        public void CanConstructBracketNodeSystemWithUnevenPlayers()
        {
            List <string> playerNames = new List <string>()
            {
                "Maru", "Stork", "Taeja", "Rain", "Bomber", "FanTaSy", "Stephano"
            };

            bracketRound.SetPlayersPerGroupCount(playerNames.Count);

            foreach (string playerName in playerNames)
            {
                tournament.RegisterPlayerReference(playerName);
            }

            bracketGroup = bracketRound.Groups.First() as BracketGroup;

            BracketNode finalNode = bracketGroup.BracketNodeSystem.FinalNode;

            ValidateBracketNodeConnections(finalNode, null, bracketGroup.Matches[4], bracketGroup.Matches[3]);

            BracketNode semifinalNode1 = finalNode.Children[0];
            BracketNode semifinalNode2 = finalNode.Children[1];

            ValidateBracketNodeConnections(semifinalNode1, bracketGroup.Matches[5], bracketGroup.Matches[2], bracketGroup.Matches[1]);
            ValidateBracketNodeConnections(semifinalNode2, bracketGroup.Matches[5], bracketGroup.Matches[0], null);

            BracketNode quarterfinalNode1 = semifinalNode1.Children[0];
            BracketNode quarterfinalNode2 = semifinalNode1.Children[1];

            BracketNode quarterfinalNode3 = semifinalNode2.Children[0];
            BracketNode quarterfinalNode4 = semifinalNode2.Children[1];

            ValidateBracketNodeConnections(quarterfinalNode1, bracketGroup.Matches[4], null, null);
            ValidateBracketNodeConnections(quarterfinalNode2, bracketGroup.Matches[4], null, null);

            ValidateBracketNodeConnections(quarterfinalNode3, bracketGroup.Matches[3], null, null);
            quarterfinalNode4.Should().BeNull();
        }
Example #14
0
 protected override GroupBase AddGroup()
 {
     return(BracketGroup.Create(this));
 }
Example #15
0
        private IEnumerable <ITagSpan <TextMarkerTag> > MatchBackward(BracketGroup group, SnapshotPoint startPoint)
        {
            ITextSnapshotLine line = startPoint.GetContainingLine();
            int lineLength         = startPoint.Position - line.Start.Position;
            int lineNumber         = line.LineNumber;
            int nest = 0;

            Stack <IMappingTagSpan <LexTag> > tags = new Stack <IMappingTagSpan <LexTag> >();

            while (true)
            {
                var span = new SnapshotSpan(line.Start, lineLength);

                if (lineLength > 0)
                {
                    foreach (var tagSpan in _aggregator.GetTags(span))
                    {
                        tags.Push(tagSpan);
                    }
                }

                while (tags.Count > 0)
                {
                    var tagSpan = tags.Pop();
                    var tagType = tagSpan.Tag.type;

                    if (_bracketTokens.ContainsKey(tagType))
                    {
                        Tuple <BracketSide, BracketGroup> bracket = _bracketTokens[tagType];

                        if (bracket.Item2 == group)
                        {
                            switch (bracket.Item1)
                            {
                            case BracketSide.Start:
                                if (nest == 0)
                                {
                                    yield return(Mark(tagSpan, span));

                                    yield break;
                                }

                                nest--;
                                break;

                            case BracketSide.Intermediate:
                                if (nest == 0)
                                {
                                    yield return(Mark(tagSpan, span));
                                }

                                break;

                            case BracketSide.End:
                                nest++;
                                break;
                            }
                        }
                    }
                }

                if (lineNumber == 0)
                {
                    yield break;
                }

                lineNumber--;
                line       = line.Snapshot.GetLineFromLineNumber(lineNumber);
                lineLength = line.Length;
                tags.Clear();
            }
        }
Example #16
0
        private IEnumerable <ITagSpan <TextMarkerTag> > MatchForward(BracketSide side, BracketGroup group, SnapshotPoint startPoint)
        {
            ITextSnapshotLine line = startPoint.GetContainingLine();
            int lineOffset         = startPoint.Position - line.Start.Position;
            int nest = (side == BracketSide.Start) ? -1 : 0;

            for (int lineNumber = line.LineNumber; lineNumber < _buffer.CurrentSnapshot.LineCount; lineNumber++)
            {
                line = line.Snapshot.GetLineFromLineNumber(lineNumber);
                var span = new SnapshotSpan(line.Start + lineOffset, line.Length - lineOffset);

                foreach (var tagSpan in _aggregator.GetTags(span))
                {
                    var tagType = tagSpan.Tag.type;

                    if (_bracketTokens.ContainsKey(tagType))
                    {
                        Tuple <BracketSide, BracketGroup> bracket = _bracketTokens[tagType];

                        if (bracket.Item2 == group)
                        {
                            switch (bracket.Item1)
                            {
                            case BracketSide.Start:
                                if (nest < 0)
                                {
                                    yield return(Mark(tagSpan, span));
                                }

                                nest++;
                                break;

                            case BracketSide.Intermediate:
                                if (nest == 0)
                                {
                                    yield return(Mark(tagSpan, span));
                                }

                                break;

                            case BracketSide.End:
                                if (nest == 0)
                                {
                                    yield return(Mark(tagSpan, span));

                                    yield break;
                                }

                                nest--;
                                break;
                            }
                        }
                    }
                }

                lineOffset = 0;
            }
        }