From 2ea6feec0d652865be4e6249ebdb82d22d6cbafd Mon Sep 17 00:00:00 2001 From: Alexis DRAI Date: Sun, 25 Sep 2022 16:25:32 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20Add=20UTs=20for=20Game,=20:bug:=20d?= =?UTF-8?q?ebug=20nextIndex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/Model/Games/Game.cs | 21 ++-- Sources/Tests/Model_UTs/GameTest.cs | 169 ++++++++++++++++++++++++++-- 2 files changed, 168 insertions(+), 22 deletions(-) diff --git a/Sources/Model/Games/Game.cs b/Sources/Model/Games/Game.cs index d77284e..96dfbbf 100644 --- a/Sources/Model/Games/Game.cs +++ b/Sources/Model/Games/Game.cs @@ -97,7 +97,6 @@ namespace Model.Games ThrowAll() ); turns.Add(turn); - nextIndex++; } /// @@ -111,7 +110,6 @@ namespace Model.Games { throw new MemberAccessException("you are exploring an empty collection\nthis should not have happened"); } - return playerManager.GetAll().ElementAt(nextIndex); } @@ -136,7 +134,6 @@ namespace Model.Games { throw new ArgumentException("param could not be found in this collection\n did you forget to add it?", nameof(current)); } - if (playerManager.GetAll().Last() == current) { // if we've reached the last player, we need the index to loop back around @@ -190,16 +187,20 @@ namespace Model.Games public override string ToString() { StringBuilder sb = new(); - sb.AppendFormat("Game: {0}===========\n" + - "{1} are playing. {2} is next.\n" + - "Log:\n", - Name, - playerManager.GetAll().ToString(), - GetWhoPlaysNow()); + sb.Append($"Game: {Name}"); + + sb.Append("\nPlayers:"); + foreach (Player player in GetPlayersFromGame()) + { + sb.Append($" {player.ToString()}"); + } + + sb.Append($"\nNext: {GetWhoPlaysNow()}"); + sb.Append("\nLog:\n"); foreach (Turn turn in this.turns) { - sb.Append("\t" + turn.ToString()); + sb.Append($"\t{turn.ToString()}\n"); } return sb.ToString(); diff --git a/Sources/Tests/Model_UTs/GameTest.cs b/Sources/Tests/Model_UTs/GameTest.cs index f38054a..2e51799 100644 --- a/Sources/Tests/Model_UTs/GameTest.cs +++ b/Sources/Tests/Model_UTs/GameTest.cs @@ -140,7 +140,38 @@ namespace Tests.Model_UTs } [Fact] - public void TestGetWhoPlaysNow() + public void TestPerformTurnDoesAddOneTurn() + { + // Arrange + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + game.AddPlayerToGame(PLAYER_1); + game.AddPlayerToGame(PLAYER_2); + + int n = 5; + + IEnumerable players = game.GetPlayersFromGame(); + Debug.WriteLine(players); + + Player currentPlayer; + for (int i = 0; i < n; i++) + { + currentPlayer = game.GetWhoPlaysNow(); + game.PerformTurn(currentPlayer); + game.PrepareNextPlayer(currentPlayer); + } + + Debug.WriteLine(game); + + // Act + int actual = game.GetHistory().Count(); + int expected = n; + + // Assert + Assert.Equal(expected, actual); + } + + [Fact] + public void TestGetWhoPlaysNowWhenValidThenCorrect() { // Arrange Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); @@ -163,28 +194,142 @@ namespace Tests.Model_UTs } [Fact] - public void TestPerformTurnDoesAddOneTurn() + public void TestGetWhoPlaysNowWhenInvalidThenException() + { + // Arrange + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + + // Act + void action() => game.GetWhoPlaysNow(); // on an empty collection of players + + // Assert + Assert.Throws(action); + } + + [Fact] + public void TestPrepareNextPlayerWhenEmptyThenException() + { + // Arrange + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + + // Act + void action() => game.PrepareNextPlayer(PLAYER_1); // on an empty collection of players + + // Assert + Assert.Throws(action); + } + + [Fact] + public void TestPrepareNextPlayerWhenNullThenException() + { + // Arrange + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + game.AddPlayerToGame(PLAYER_1); + + // Act + void action() => game.PrepareNextPlayer(null); + + // Assert + Assert.Throws(action); + } + + [Fact] + public void TestPrepareNextPlayerWhenNonExistentThenException() + { + // Arrange + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + game.AddPlayerToGame(PLAYER_2); + + // Act + void action() => game.PrepareNextPlayer(PLAYER_3); + + // Assert + Assert.Throws(action); + } + + [Fact] + public void TestPrepareNextPlayerWhenValidThenCorrectWithSeveralPlayers() { // Arrange Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); game.AddPlayerToGame(PLAYER_1); game.AddPlayerToGame(PLAYER_2); - int n = 5; + // Act + Player expected = PLAYER_2; - IEnumerable players = game.GetPlayersFromGame(); - Debug.WriteLine(players); + Assert.Equal(PLAYER_1, game.GetWhoPlaysNow()); + game.PrepareNextPlayer(PLAYER_1); - for (int i = 0; i < n; i++) + Player actual = game.GetWhoPlaysNow(); + + // Assert + Assert.Equal(expected, actual); + } + + [Fact] + public void TestPrepareNextPlayerWhenValidThenCorrectWithOnePlayer() + { + // Arrange + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + game.AddPlayerToGame(PLAYER_1); + + // Act + Player expected = PLAYER_1; + + Assert.Equal(PLAYER_1, game.GetWhoPlaysNow()); + game.PrepareNextPlayer(PLAYER_1); + + Player actual = game.GetWhoPlaysNow(); + + // Assert + Assert.Equal(expected, actual); + } + + [Fact] + public void TestToString() + { + // Arrange + DateTime dateTime = DateTime.UtcNow; + + List turns = new() { - Player currentPlayer = game.GetWhoPlaysNow(); - game.PerformTurn(currentPlayer); - game.PrepareNextPlayer(currentPlayer); - } + Turn.CreateWithSpecifiedTime(dateTime, PLAYER_1, new() + { + {NUM, new NumberDieFace(4)}, + {IMG, new ImageDieFace(40)}, + {CLR, new ColorDieFace("A00FA0")}, + }), + Turn.CreateWithSpecifiedTime(dateTime, PLAYER_2, new() + { + {NUM, new NumberDieFace(3)}, + {IMG, new ImageDieFace(20)}, + {CLR, new ColorDieFace("A00BB8")}, + }), + }; + + Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE, turns: turns); + game.AddPlayerToGame(PLAYER_1); + game.AddPlayerToGame(PLAYER_2); // Act - int actual = game.GetHistory().Count(); - int expected = n; + string[] dateTimeString = dateTime.ToString("s", System.Globalization.CultureInfo.InvariantCulture).Split("T"); + + string date = dateTimeString[0]; + string time = dateTimeString[1]; + + string expected = + "Game: my game" + + "\nPlayers: Alice Bob" + + "\nNext: Alice" + + "\nLog:" + + "\n\t" + date + " " + time + " -- Alice rolled: 4 Assets/images/40 #A00FA0" + + "\n\t" + date + " " + time + " -- Bob rolled: 3 Assets/images/20 #A00BB8" + + "\n"; + string actual = game.ToString(); + + Debug.WriteLine("expected:\n" + expected); + Debug.WriteLine("actual:\n" + actual); // Assert Assert.Equal(expected, actual);