Exemplo n.º 1
0
        public void GameManagerReceivesCorrectMessagesWhenPlacingFirstTown(UInt32[] townLocations)
        {
            Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null;
            try
            {
                var board           = new GameBoardManager(BoardSizes.Standard);
                var mockGameManager = Substitute.For <IGameSession>();
                mockGameManager.GetFirstSetupPassOrder().Returns(new UInt32[] { 0u, 1u, 2u, 3u });
                mockGameManager.Board.Returns(board);

                var mockGameManagerFactory = Substitute.For <IGameSessionManager>();
                mockGameManagerFactory.Create().Returns(mockGameManager);

                var mockLogger        = Substitute.For <ILogger>();
                var mockLoggerFactory = Substitute.For <ILoggerFactory>();
                mockLoggerFactory.Create(Arg.Any <String>()).Returns(mockLogger);

                gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4)
                                     .AddGameManagerFactory(mockGameManagerFactory)
                                     .AddLoggerFactory(mockLoggerFactory)
                                     .WaitUntilGameSessionManagerHasStarted();

                var testPlayer1 = new TestClient(TestPlayer1UserName, gameSessionManager);
                var testPlayer2 = new TestClient(TestPlayer2UserName, gameSessionManager);
                var testPlayer3 = new TestClient(TestPlayer3UserName, gameSessionManager);
                var testPlayer4 = new TestClient(TestPlayer4UserName, gameSessionManager);

                var testScript = new TestScript(testPlayer1, testPlayer2, testPlayer3, testPlayer4);
                testScript.RunUntil(TestScript.RunPoints.RunUntilEnd);
                testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), testPlayer1);
                testScript.SendTownPlacementFromClient(testPlayer1, townLocations[0]);

                testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), testPlayer2);
                mockGameManager.Received().PlaceTown(townLocations[0]);
                testScript.SendTownPlacementFromClient(testPlayer2, townLocations[1]);

                testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), testPlayer3);
                mockGameManager.Received().PlaceTown(townLocations[1]);
                testScript.SendTownPlacementFromClient(testPlayer3, townLocations[2]);

                testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), testPlayer4);
                mockGameManager.Received().PlaceTown(townLocations[2]);
                testScript.SendTownPlacementFromClient(testPlayer4, townLocations[3]);

                testScript.WaitUntilClientsReceiveMessageOfType(typeof(GameOverMessage), testPlayer1, testPlayer2, testPlayer3, testPlayer4);
                mockGameManager.Received().PlaceTown(townLocations[3]);
                mockLogger.DidNotReceive().Exception(Arg.Any <String>());
            }
            finally
            {
                gameSessionManager?.WaitUntilGameSessionManagerHasStopped();
            }
        }
Exemplo n.º 2
0
        public void ClientsReceivePlaceTownMessageInCorrectOrder(UInt32[] firstSetupPassOrder)
        {
            Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null;
            try
            {
                var board           = new GameBoardManager(BoardSizes.Standard);
                var mockGameManager = Substitute.For <IGameSession>();
                mockGameManager.GetFirstSetupPassOrder().Returns(firstSetupPassOrder);
                mockGameManager.Board.Returns(board);

                var mockGameManagerFactory = Substitute.For <IGameSessionManager>();
                mockGameManagerFactory.Create().Returns(mockGameManager);

                gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4)
                                     .AddGameManagerFactory(mockGameManagerFactory)
                                     .WaitUntilGameSessionManagerHasStarted();

                var testPlayers = new[]
                {
                    new TestClient(TestPlayer1UserName, gameSessionManager),
                    new TestClient(TestPlayer2UserName, gameSessionManager),
                    new TestClient(TestPlayer3UserName, gameSessionManager),
                    new TestClient(TestPlayer4UserName, gameSessionManager)
                };

                var testPlayer1 = testPlayers[0];
                var testPlayer2 = testPlayers[1];
                var testPlayer3 = testPlayers[2];
                var testPlayer4 = testPlayers[3];

                var firstTestPlayer  = testPlayers[firstSetupPassOrder[0]];
                var secondTestPlayer = testPlayers[firstSetupPassOrder[1]];
                var thirdTestPlayer  = testPlayers[firstSetupPassOrder[2]];
                var fourthTestPlayer = testPlayers[firstSetupPassOrder[3]];

                var testScript = new TestScript(testPlayer1, testPlayer2, testPlayer3, testPlayer4);
                testScript.RunUntil(TestScript.RunPoints.RunUntilEnd);
                testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), firstTestPlayer);
                testScript.SendTownPlacementFromClient(firstTestPlayer, 0u);
                testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), secondTestPlayer);
                testScript.SendTownPlacementFromClient(secondTestPlayer, 10u);
                testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), thirdTestPlayer);
                testScript.SendTownPlacementFromClient(thirdTestPlayer, 20u);
                testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), fourthTestPlayer);
            }
            finally
            {
                gameSessionManager.WaitUntilGameSessionManagerHasStopped();
            }
        }