diff --git a/Sources/App/Program.cs b/Sources/App/Program.cs index badbca6..d80f387 100644 --- a/Sources/App/Program.cs +++ b/Sources/App/Program.cs @@ -5,6 +5,7 @@ using Model.Games; using Model.Players; using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; namespace App @@ -61,7 +62,7 @@ namespace App Console.WriteLine("make at least one dice group first, then try again"); break; } - IEnumerable> newGameDice = PrepareDice(gameRunner); + IEnumerable newGameDice = PrepareDice(gameRunner); string newGameName; Console.WriteLine("give this new game a name\n>"); @@ -83,11 +84,11 @@ namespace App Console.WriteLine("give this new dice group a name"); newGroupName = Console.ReadLine(); - List> newGroupDice = new(); + List newGroupDice = new(); string menuChoiceNewDice = ""; while (!(menuChoiceNewDice.Equals("ok") && newGroupDice.Any())) { - AbstractDie die = null; + Die die = null; Console.WriteLine("create a die you want to add (at least one), or enter 'ok' if you're finished"); Console.WriteLine("what type of die ?\n" + "n... number\n" + @@ -114,7 +115,7 @@ namespace App newGroupDice.Add(die); } } - gameRunner.GlobalDieManager.Add(new KeyValuePair>>(newGroupName, newGroupDice)); + gameRunner.GlobalDieManager.Add(new KeyValuePair>(newGroupName, newGroupDice)); break; default: @@ -173,7 +174,7 @@ namespace App private static NumberDie MakeNumberDie() { NumberDie die; - List faces = new(); + List faces = new(); string menuChoiceNewFaces = ""; while (menuChoiceNewFaces != "ok") @@ -194,14 +195,14 @@ namespace App private static ColorDie MakeColorDie() { ColorDie die; - List faces = new(); + List faces = new(); string menuChoiceNewFaces = ""; while (!menuChoiceNewFaces.Equals("ok")) { - Console.WriteLine("create a face with an color hex code, or enter 'ok' if you're finished"); + Console.WriteLine("create a face with an color name, or enter 'ok' if you're finished"); menuChoiceNewFaces = Console.ReadLine(); - if (menuChoiceNewFaces != "ok") faces.Add(new(menuChoiceNewFaces)); + if (menuChoiceNewFaces != "ok") faces.Add(new(Color.FromName(menuChoiceNewFaces))); } die = new ColorDie(faces.ToArray()); @@ -211,27 +212,27 @@ namespace App private static ImageDie MakeImageDie() { ImageDie die; - List faces = new(); + List faces = new(); string menuChoiceNewFaces = ""; while (!menuChoiceNewFaces.Equals("ok")) { - Console.WriteLine("create a face with an image url, or enter 'ok' if you're finished"); + Console.WriteLine("create a face with an image uri, or enter 'ok' if you're finished"); menuChoiceNewFaces = Console.ReadLine(); - if (menuChoiceNewFaces != "ok") faces.Add(new(menuChoiceNewFaces)); + if (menuChoiceNewFaces != "ok") faces.Add(new(new Uri(menuChoiceNewFaces))); } die = new ImageDie(faces.ToArray()); return die; } - private static IEnumerable> PrepareDice(GameRunner gameRunner) + private static IEnumerable PrepareDice(GameRunner gameRunner) { - List> result = new(); + List result = new(); Console.WriteLine("add dice to the game"); Console.WriteLine("all known dice or groups of dice:"); - foreach ((string name, IEnumerable> dice) in gameRunner.GlobalDieManager.GetAll()) + foreach ((string name, IEnumerable dice) in gameRunner.GlobalDieManager.GetAll()) { Console.WriteLine($"{name} -- {dice}"); } @@ -243,8 +244,8 @@ namespace App // no checks, this is temporary if (!menuChoiceDice.Equals("ok")) { - IEnumerable> chosenDice = gameRunner.GlobalDieManager.GetOneByName(menuChoiceDice).Value; - foreach (AbstractDie die in chosenDice) + IEnumerable chosenDice = gameRunner.GlobalDieManager.GetOneByName(menuChoiceDice).Value; + foreach (Die die in chosenDice) { result.Add(die); } diff --git a/Sources/Data/Stub.cs b/Sources/Data/Stub.cs index e61ee46..3d4e934 100644 --- a/Sources/Data/Stub.cs +++ b/Sources/Data/Stub.cs @@ -4,6 +4,7 @@ using Model.Dice.Faces; using Model.Games; using Model.Players; using System.Collections.Generic; +using System.Drawing; namespace Data { @@ -20,18 +21,39 @@ namespace Data gr.GlobalPlayerManager.Add(player3); - List> monopolyDice = new(); - List> dndDice = new(); + List monopolyDice = new(); + List dndDice = new(); string monopolyName = "Monopoly", dndName = "DnD"; - NumberDieFace[] d6Faces = new NumberDieFace[] { new(1), new(2), new(3), new(4), new(5), new(6) }; + NumberFace[] d6Faces = new NumberFace[] { new(1), new(2), new(3), new(4), new(5), new(6) }; monopolyDice.Add(new NumberDie(d6Faces)); monopolyDice.Add(new NumberDie(d6Faces)); - monopolyDice.Add(new ColorDie(new("#ff0000"), new("#00ff00"), new("#0000ff"), new("#ffff00"), new("#000000"), new("#ffffff"))); - NumberDieFace[] d20Faces = new NumberDieFace[] { + ColorFace[] colorFaces = new ColorFace[] + { + new(Color.FromName("blue")), + new(Color.FromName("red")), + new(Color.FromName("yellow")), + new(Color.FromName("green")), + new(Color.FromName("black")), + new(Color.FromName("white")) + }; + + monopolyDice.Add(new ColorDie(colorFaces)); + + ImageFace[] imageFaces = new ImageFace[] + { + new(new Uri("https://unsplash.com/photos/TLD6iCOlyb0")), + new(new Uri("https://unsplash.com/photos/rTZW4f02zY8")), + new(new Uri("https://unsplash.com/photos/Hyu76loQLdk")), + new(new Uri("https://unsplash.com/photos/A_Ncbi-RH6s")), + }; + + monopolyDice.Add(new ImageDie(imageFaces)); + + NumberFace[] d20Faces = new NumberFace[] { new(1), new(2), new(3), new(4), new(5), new(6), new(7), new(8), new(9), new(10), new(11), new(12), new(13), new(14), new(15), @@ -40,8 +62,8 @@ namespace Data dndDice.Add(new NumberDie(d20Faces)); - gr.GlobalDieManager.Add(new KeyValuePair>>(dndName, dndDice.AsEnumerable())); - gr.GlobalDieManager.Add(new KeyValuePair>>(monopolyName, monopolyDice.AsEnumerable())); + gr.GlobalDieManager.Add(new KeyValuePair>(dndName, dndDice.AsEnumerable())); + gr.GlobalDieManager.Add(new KeyValuePair>(monopolyName, monopolyDice.AsEnumerable())); string game1 = "Forgotten Realms", game2 = "4e", game3 = "The Coopers"; diff --git a/Sources/Model/Dice/AbstractDie.cs b/Sources/Model/Dice/AbstractDie.cs deleted file mode 100644 index 2340067..0000000 --- a/Sources/Model/Dice/AbstractDie.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Model.Dice.Faces; - -namespace Model.Dice -{ - public abstract class AbstractDie : RandomnessHaver where T : AbstractDieFace - { - public IEnumerable ListFaces => listFaces; - - private readonly List listFaces = new(); - - protected AbstractDie(params T[] faces) - { - listFaces.AddRange(faces); - } - - public T GetRandomFace() - { - int faceIndex = rnd.Next(0, ListFaces.Count()); - return ListFaces.ElementAt(faceIndex); - } - } -} diff --git a/Sources/Model/Dice/ColorDie.cs b/Sources/Model/Dice/ColorDie.cs index 454e4d6..290c5dc 100644 --- a/Sources/Model/Dice/ColorDie.cs +++ b/Sources/Model/Dice/ColorDie.cs @@ -1,17 +1,11 @@ using Model.Dice.Faces; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Drawing; namespace Model.Dice { - public class ColorDie : AbstractDie + public class ColorDie : HomogeneousDie { - public ColorDie(params ColorDieFace[] faces) : base(faces) + public ColorDie(params ColorFace[] faces) : base(faces) { } } diff --git a/Sources/Model/Dice/Die.cs b/Sources/Model/Dice/Die.cs new file mode 100644 index 0000000..6a1534c --- /dev/null +++ b/Sources/Model/Dice/Die.cs @@ -0,0 +1,27 @@ +using Model.Dice.Faces; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Model.Dice +{ + public abstract class Die + { + public IEnumerable ListFaces => listFaces; + + protected static readonly Random rnd = new(); + + private readonly List listFaces = new(); + + protected Die(params Face[] faces) + { + listFaces.AddRange(faces); + } + + public Face GetRandomFace() + { + int faceIndex = rnd.Next(0, ListFaces.Count()); + return ListFaces.ElementAt(faceIndex); + } + } +} diff --git a/Sources/Model/Dice/DieManager.cs b/Sources/Model/Dice/DieManager.cs index 71654cf..cfc77cb 100644 --- a/Sources/Model/Dice/DieManager.cs +++ b/Sources/Model/Dice/DieManager.cs @@ -5,40 +5,40 @@ using System.Linq; namespace Model.Dice { - public class DieManager : IManager>>> + public class DieManager : IManager>> { - private readonly Dictionary>> diceGroups = new(); + private readonly Dictionary> diceGroups = new(); - public KeyValuePair>> Add(KeyValuePair>> toAdd) + public KeyValuePair> Add(KeyValuePair> toAdd) { // on trim la clé d'abord diceGroups.Add(toAdd.Key.Trim(), toAdd.Value); return toAdd; } - public IEnumerable>>> GetAll() + public IEnumerable>> GetAll() { return diceGroups.AsEnumerable(); } - public KeyValuePair>> GetOneByID(Guid ID) + public KeyValuePair> GetOneByID(Guid ID) { throw new NotImplementedException(); } - public KeyValuePair>> GetOneByName(string name) + public KeyValuePair> GetOneByName(string name) { // les groupes de dés nommés : // ils sont case-sensistive, mais "mon jeu" == "mon jeu " == " mon jeu" - return new KeyValuePair>>(name, diceGroups[name]); + return new KeyValuePair>(name, diceGroups[name]); } - public void Remove(KeyValuePair>> toRemove) + public void Remove(KeyValuePair> toRemove) { diceGroups.Remove(toRemove.Key); } - public KeyValuePair>> Update(KeyValuePair>> before, KeyValuePair>> after) + public KeyValuePair> Update(KeyValuePair> before, KeyValuePair> after) { // pas autorisé de changer les dés, juste le nom if (!before.Value.Equals(after.Value)) diff --git a/Sources/Model/Dice/Faces/AbstractDieFace.cs b/Sources/Model/Dice/Faces/AbstractDieFace.cs deleted file mode 100644 index ae09083..0000000 --- a/Sources/Model/Dice/Faces/AbstractDieFace.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice.Faces -{ - public abstract class AbstractDieFace - { - /// - /// every die face has a value, and they can all be represented by an int, - /// even if they're not litterally a decimal number - ///
- /// USE GetPracticalValue for a Value specific to face type - ///
- public int Value { get; protected set; } - - public abstract object GetPracticalValue(); - - public override string ToString() - { - return GetPracticalValue().ToString(); - } - } -} diff --git a/Sources/Model/Dice/Faces/ColorDieFace.cs b/Sources/Model/Dice/Faces/ColorDieFace.cs deleted file mode 100644 index 77b5d3c..0000000 --- a/Sources/Model/Dice/Faces/ColorDieFace.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice.Faces -{ - public class ColorDieFace : AbstractDieFace - { - private static readonly int MAX_HEX = 16777215; - /// - /// accepts hex strings like "ffbb84" and "#af567d" ([RRGGBB]) - /// - /// hex string - public ColorDieFace(string hexValueString) - { - // https://stackoverflow.com/questions/1139957/convert-integer-to-hexadecimal-and-back-again - // we remove any initial '#' before parsing - if (hexValueString.StartsWith('#')) - { - hexValueString = hexValueString[1..]; - } - - int result = int.Parse(hexValueString, System.Globalization.NumberStyles.HexNumber); - - if (result < 0) Value = 0; - else if (result > MAX_HEX) Value = MAX_HEX; - else Value = result; - } - - /// - /// accepts a decimal value that represents a color hex (0 is black, 65280 is green...) - /// - /// - public ColorDieFace(int decimalValue) - : this(decimalValue.ToString()) - { } - public override object GetPracticalValue() - { - // https://stackoverflow.com/questions/1139957/convert-integer-to-hexadecimal-and-back-again - return Value.ToString("X6").Insert(0, "#"); - } - } -} diff --git a/Sources/Model/Dice/Faces/ColorFace.cs b/Sources/Model/Dice/Faces/ColorFace.cs new file mode 100644 index 0000000..3ae7760 --- /dev/null +++ b/Sources/Model/Dice/Faces/ColorFace.cs @@ -0,0 +1,11 @@ +using System.Drawing; + +namespace Model.Dice.Faces +{ + public class ColorFace : Face + { + public ColorFace(Color value) : base(value) + { + } + } +} diff --git a/Sources/Model/Dice/Faces/Face.cs b/Sources/Model/Dice/Faces/Face.cs new file mode 100644 index 0000000..472b25f --- /dev/null +++ b/Sources/Model/Dice/Faces/Face.cs @@ -0,0 +1,28 @@ +namespace Model.Dice.Faces +{ + public abstract class Face + { + public string StringValue { get; protected set; } + + public override string ToString() + { + return StringValue; + } + } + public abstract class Face : Face + { + public T Value { get; protected set; } + + protected Face(T value) + { + Value = value; + StringValue = value.ToString(); + } + + protected Face(T value, string stringValue) + { + Value = value; + StringValue = stringValue; + } + } +} diff --git a/Sources/Model/Dice/Faces/ImageDieFace.cs b/Sources/Model/Dice/Faces/ImageDieFace.cs deleted file mode 100644 index 84d472b..0000000 --- a/Sources/Model/Dice/Faces/ImageDieFace.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice.Faces -{ - public class ImageDieFace : AbstractDieFace - { - public ImageDieFace(string uri) - { - Value = int.Parse(Path.GetFileNameWithoutExtension(uri)); - } - - public ImageDieFace(int code) - { - Value = code; - } - - public override object GetPracticalValue() - { - return string.Format($"Assets/images/{Value}.png"); - } - } -} diff --git a/Sources/Model/Dice/Faces/ImageFace.cs b/Sources/Model/Dice/Faces/ImageFace.cs new file mode 100644 index 0000000..0b27a40 --- /dev/null +++ b/Sources/Model/Dice/Faces/ImageFace.cs @@ -0,0 +1,11 @@ +using System; + +namespace Model.Dice.Faces +{ + public class ImageFace : Face + { + public ImageFace(Uri value) : base(value) + { + } + } +} diff --git a/Sources/Model/Dice/Faces/NumberDieFace.cs b/Sources/Model/Dice/Faces/NumberDieFace.cs deleted file mode 100644 index 5aa7adf..0000000 --- a/Sources/Model/Dice/Faces/NumberDieFace.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice.Faces -{ - public class NumberDieFace : AbstractDieFace - { - public NumberDieFace(int value) - { - Value = value; - } - - public override object GetPracticalValue() - { - return Value; - } - } -} diff --git a/Sources/Model/Dice/Faces/NumberFace.cs b/Sources/Model/Dice/Faces/NumberFace.cs new file mode 100644 index 0000000..9d7374b --- /dev/null +++ b/Sources/Model/Dice/Faces/NumberFace.cs @@ -0,0 +1,9 @@ +namespace Model.Dice.Faces +{ + public class NumberFace : Face + { + public NumberFace(int value) : base(value) + { + } + } +} diff --git a/Sources/Model/Dice/HomogeneousDie.cs b/Sources/Model/Dice/HomogeneousDie.cs new file mode 100644 index 0000000..22ab110 --- /dev/null +++ b/Sources/Model/Dice/HomogeneousDie.cs @@ -0,0 +1,11 @@ +using Model.Dice.Faces; + +namespace Model.Dice +{ + public abstract class HomogeneousDie : Die + { + protected HomogeneousDie(params Face[] faces) : base(faces) + { + } + } +} diff --git a/Sources/Model/Dice/ImageDie.cs b/Sources/Model/Dice/ImageDie.cs index 7a8879b..43a1754 100644 --- a/Sources/Model/Dice/ImageDie.cs +++ b/Sources/Model/Dice/ImageDie.cs @@ -1,15 +1,11 @@ using Model.Dice.Faces; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Model.Dice { - public class ImageDie : AbstractDie + public class ImageDie : HomogeneousDie { - public ImageDie(params ImageDieFace[] faces) : base(faces) + public ImageDie(params ImageFace[] faces) : base(faces) { } } diff --git a/Sources/Model/Dice/NumberDie.cs b/Sources/Model/Dice/NumberDie.cs index 013c5fa..4f7b385 100644 --- a/Sources/Model/Dice/NumberDie.cs +++ b/Sources/Model/Dice/NumberDie.cs @@ -7,9 +7,9 @@ using System.Threading.Tasks; namespace Model.Dice { - public class NumberDie : AbstractDie + public class NumberDie : HomogeneousDie { - public NumberDie(params NumberDieFace[] faces) : base(faces) + public NumberDie(params NumberFace[] faces) : base(faces) { } } diff --git a/Sources/Model/Dice/RandomnessHaver.cs b/Sources/Model/Dice/RandomnessHaver.cs deleted file mode 100644 index 45aaf5c..0000000 --- a/Sources/Model/Dice/RandomnessHaver.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice -{ - public class RandomnessHaver - { - protected RandomnessHaver() - { - } - protected static readonly Random rnd = new(); - } -} diff --git a/Sources/Model/Games/Game.cs b/Sources/Model/Games/Game.cs index 9ed1d40..1dc3281 100644 --- a/Sources/Model/Games/Game.cs +++ b/Sources/Model/Games/Game.cs @@ -57,8 +57,8 @@ namespace Model.Games /// /// the group of dice used for this game /// - public IEnumerable> Dice => dice; - private readonly IEnumerable> dice; + public IEnumerable Dice => dice; + private readonly IEnumerable dice; /// /// constructs a Game with its own history of Turns. @@ -68,7 +68,7 @@ namespace Model.Games /// the turns that have been done so far /// the game's player manager, doing CRUD on players and switching whose turn it is /// the group of dice used for this game - public Game(string name, IManager playerManager, IEnumerable> dice, IEnumerable turns) + public Game(string name, IManager playerManager, IEnumerable dice, IEnumerable turns) { Name = name; PlayerManager = playerManager; @@ -83,7 +83,7 @@ namespace Model.Games /// the name of the game 😎 /// the game's player manager, doing CRUD on players and switching whose turn it is /// the group of dice used for this game - public Game(string name, IManager playerManager, IEnumerable> dice) + public Game(string name, IManager playerManager, IEnumerable dice) : this(name, playerManager, dice, null) { } @@ -161,10 +161,10 @@ namespace Model.Games /// throws all the Dice in FavGroup and returns a list of their Faces /// /// list of AbstractDieFaces after a throw - private Dictionary, AbstractDieFace> ThrowAll() + private Dictionary ThrowAll() { - Dictionary, AbstractDieFace> faces = new(); - foreach (AbstractDie die in dice) + Dictionary faces = new(); + foreach (Die die in dice) { faces.Add(die, die.GetRandomFace()); } diff --git a/Sources/Model/Games/GameRunner.cs b/Sources/Model/Games/GameRunner.cs index d58085e..1d294be 100644 --- a/Sources/Model/Games/GameRunner.cs +++ b/Sources/Model/Games/GameRunner.cs @@ -12,17 +12,17 @@ namespace Model.Games public class GameRunner : IManager { public IManager GlobalPlayerManager { get; private set; } - public IManager>>> GlobalDieManager { get; private set; } + public IManager>> GlobalDieManager { get; private set; } private readonly List games; - public GameRunner(IManager globalPlayerManager, IManager>>> globalDieManager, List games) + public GameRunner(IManager globalPlayerManager, IManager>> globalDieManager, List games) { GlobalPlayerManager = globalPlayerManager; GlobalDieManager = globalDieManager; this.games = games ?? new(); } - public GameRunner(IManager globalPlayerManager, IManager>>> globalDieManager) + public GameRunner(IManager globalPlayerManager, IManager>> globalDieManager) : this(globalPlayerManager, globalDieManager, null){ } @@ -65,7 +65,7 @@ namespace Model.Games /// /// creates a new game /// - public Game StartNewGame(string name, IManager playerManager, IEnumerable> dice) + public Game StartNewGame(string name, IManager playerManager, IEnumerable dice) { Game game = new(name, playerManager, dice); return Add(game); diff --git a/Sources/Model/Games/Turn.cs b/Sources/Model/Games/Turn.cs index ea202d4..fe9ccfe 100644 --- a/Sources/Model/Games/Turn.cs +++ b/Sources/Model/Games/Turn.cs @@ -33,8 +33,8 @@ namespace Model.Games /// /// the collection of Face that were rolled /// - public IEnumerable, AbstractDieFace>> DiceNFaces => diceNFaces.AsEnumerable(); - private readonly Dictionary, AbstractDieFace> diceNFaces; + public IEnumerable> DiceNFaces => diceNFaces.AsEnumerable(); + private readonly Dictionary diceNFaces; /// /// this private constructor is to be used only by factories @@ -42,7 +42,7 @@ namespace Model.Games /// date and time of the turn /// player who played the turn /// faces that were rolled - private Turn(DateTime when, Player player, Dictionary, AbstractDieFace> diceNFaces) + private Turn(DateTime when, Player player, Dictionary diceNFaces) { When = when; Player = player; @@ -59,7 +59,7 @@ namespace Model.Games /// player who played the turn /// faces that were rolled /// a new Turn object - public static Turn CreateWithSpecifiedTime(DateTime when, Player player, Dictionary, AbstractDieFace> diceNFaces) + public static Turn CreateWithSpecifiedTime(DateTime when, Player player, Dictionary diceNFaces) { if (player is null) { @@ -87,7 +87,7 @@ namespace Model.Games /// player who played the turn /// faces that were rolled /// a new Turn object - public static Turn CreateWithDefaultTime(Player player, Dictionary, AbstractDieFace> diceNFaces) + public static Turn CreateWithDefaultTime(Player player, Dictionary diceNFaces) { return CreateWithSpecifiedTime(DateTime.UtcNow, player, diceNFaces); } @@ -108,7 +108,7 @@ namespace Model.Games date, time, Player.ToString()); - foreach (AbstractDieFace face in this.diceNFaces.Values) + foreach (Face face in this.diceNFaces.Values) { sb.Append(" " + face.ToString()); } diff --git a/Sources/Tests/Model_UTs/GameTest.cs b/Sources/Tests/Model_UTs/GameTest.cs index 6eddc05..d7db841 100644 --- a/Sources/Tests/Model_UTs/GameTest.cs +++ b/Sources/Tests/Model_UTs/GameTest.cs @@ -11,55 +11,32 @@ using System.Threading.Tasks; using Xunit; using static System.Collections.Specialized.BitVector32; using System.Diagnostics; +using Data; namespace Tests.Model_UTs { public class GameTest { - + private readonly GameRunner stubGameRunner = new Stub().LoadApp(); private static readonly string GAME_NAME = "my game"; private static readonly Player PLAYER_1 = new("Alice"), PLAYER_2 = new("Bob"), PLAYER_3 = new("Clyde"); - - private readonly static NumberDieFace FACE_NUM = new(1); - private readonly static ImageDieFace FACE_IMG = new(10); - private readonly static ColorDieFace FACE_CLR = new(1000); - - private readonly static NumberDieFace[] FACES_1 = new NumberDieFace[] - { - FACE_NUM, - new(2), - new(3), - new(4) - }; - - private readonly static ImageDieFace[] FACES_2 = new ImageDieFace[] + private readonly IEnumerable DICE_1, DICE_2; + public GameTest() { - FACE_IMG, - new(20), - new(30), - new(40) - }; - - private readonly static ColorDieFace[] FACES_3 = new ColorDieFace[] - { - FACE_CLR, - new(2000), - new(3000), - new(4000) - }; + DICE_1 = stubGameRunner.GlobalDieManager.GetAll().First().Value; + DICE_2 = stubGameRunner.GlobalDieManager.GetAll().Last().Value; + } - private static readonly AbstractDie NUM = new NumberDie(FACES_1), IMG = new ImageDie(FACES_2), CLR = new ColorDie(FACES_3); - private static readonly IEnumerable> DICE = - new List>() { NUM, IMG, CLR } - .AsEnumerable(); [Fact] public void TestNamePropertyGet() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); // Act string actual = game.Name; @@ -72,9 +49,11 @@ namespace Tests.Model_UTs public void TestNamePropertySetWhenValidThenCorrect() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); - string expected = "shitty marmot"; + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); + string expected = "shitty marmot"; // Act game.Name = expected; @@ -94,7 +73,9 @@ namespace Tests.Model_UTs Game game; // Act - void action() => game = new(name: name, playerManager: new PlayerManager(), dice: DICE); + void action() => game = new(name: name, + playerManager: new PlayerManager(), + dice: DICE_1); // Assert Assert.Throws(action); @@ -104,12 +85,7 @@ namespace Tests.Model_UTs public void TestGetHistory() { // Arrange - Dictionary, AbstractDieFace> diceNFaces = new() - { - { CLR, FACE_CLR }, - { IMG, FACE_IMG }, - { NUM, FACE_NUM } - }; + Dictionary diceNFaces = (Dictionary)stubGameRunner.GetAll().First().GetHistory().First().DiceNFaces; Turn turn1 = Turn.CreateWithDefaultTime(PLAYER_1, diceNFaces); Turn turn2 = Turn.CreateWithDefaultTime(PLAYER_2, diceNFaces); // yeah they rolled the same @@ -117,7 +93,11 @@ namespace Tests.Model_UTs IEnumerable expected = new List() { turn1, turn2 }; // Act - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE, expected); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1, + expected); + IEnumerable actual = game.GetHistory(); // Assert @@ -128,12 +108,14 @@ namespace Tests.Model_UTs public void TestDicePropertyGet() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_2); // Act - IEnumerable> actual = game.Dice; - IEnumerable> expected = DICE; + IEnumerable actual = game.Dice; + IEnumerable expected = DICE_2; // Assert Assert.Equal(expected, actual); @@ -143,7 +125,10 @@ namespace Tests.Model_UTs public void TestPerformTurnDoesAddOneTurn() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); + game.PlayerManager.Add(PLAYER_1); game.PlayerManager.Add(PLAYER_2); @@ -171,7 +156,10 @@ namespace Tests.Model_UTs public void TestGetWhoPlaysNowWhenValidThenCorrect() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); + game.PlayerManager.Add(PLAYER_1); game.PlayerManager.Add(PLAYER_2); @@ -194,7 +182,9 @@ namespace Tests.Model_UTs public void TestGetWhoPlaysNowWhenInvalidThenException() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); // Act void action() => game.GetWhoPlaysNow(); // on an empty collection of players @@ -207,8 +197,9 @@ namespace Tests.Model_UTs public void TestPrepareNextPlayerWhenEmptyThenException() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); - + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); // Act void action() => game.PrepareNextPlayer(PLAYER_1); // on an empty collection of players @@ -220,7 +211,10 @@ namespace Tests.Model_UTs public void TestPrepareNextPlayerWhenNullThenException() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_2); + game.PlayerManager.Add(PLAYER_1); // Act @@ -234,7 +228,10 @@ namespace Tests.Model_UTs public void TestPrepareNextPlayerWhenNonExistentThenException() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); + game.PlayerManager.Add(PLAYER_2); // Act @@ -248,7 +245,10 @@ namespace Tests.Model_UTs public void TestPrepareNextPlayerWhenValidThenCorrectWithSeveralPlayers() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_2); + game.PlayerManager.Add(PLAYER_1); game.PlayerManager.Add(PLAYER_2); @@ -268,7 +268,10 @@ namespace Tests.Model_UTs public void TestPrepareNextPlayerWhenValidThenCorrectWithOnePlayer() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); + game.PlayerManager.Add(PLAYER_1); // Act @@ -287,7 +290,9 @@ namespace Tests.Model_UTs public void TestAddPlayerToGame() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_2); // Act Player expected = PLAYER_1; @@ -301,7 +306,9 @@ namespace Tests.Model_UTs public void TestGetPlayersFromGame() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); // Act Assert.Empty(game.PlayerManager.GetAll()); @@ -315,7 +322,10 @@ namespace Tests.Model_UTs public void TestUpdatePlayerInGame() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_2); + game.PlayerManager.Add(PLAYER_1); // Act @@ -330,7 +340,10 @@ namespace Tests.Model_UTs public void TestRemovePlayerFromGame() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); + game.PlayerManager.Add(PLAYER_1); game.PlayerManager.Add(PLAYER_2); game.PlayerManager.Remove(PLAYER_1); @@ -342,54 +355,5 @@ namespace Tests.Model_UTs // Assert Assert.Equal(expected, actual); } - - [Fact] - public void TestToString() - { - // Arrange - DateTime dateTime = DateTime.UtcNow; - - List turns = new() - { - 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.PlayerManager.Add(PLAYER_1); - game.PlayerManager.Add(PLAYER_2); - - // Act - 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.png #A00FA0" + - "\n\t" + date + " " + time + " -- Bob rolled: 3 Assets/images/20.png #A00BB8" + - "\n"; - string actual = game.ToString(); - - Debug.WriteLine("expected:\n" + expected); - Debug.WriteLine("actual:\n" + actual); - - // Assert - Assert.Equal(expected, actual); - } } } diff --git a/Sources/Tests/Model_UTs/TurnTest.cs b/Sources/Tests/Model_UTs/TurnTest.cs index b9e8310..cdbb9ba 100644 --- a/Sources/Tests/Model_UTs/TurnTest.cs +++ b/Sources/Tests/Model_UTs/TurnTest.cs @@ -1,322 +1,245 @@ -using Model.Dice; -using Model.Dice.Faces; -using Model.Games; -using Model.Players; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using Xunit; - -namespace Tests.Model_UTs -{ - public class TurnTest - - { - private readonly Dictionary, AbstractDieFace> DICE_N_FACES_1; - private readonly Dictionary, AbstractDieFace> DICE_N_FACES_2; - - private static readonly AbstractDieFace FACE_ONE = new NumberDieFace(1); - private static readonly AbstractDieFace FACE_TWO = new NumberDieFace(12); - private static readonly AbstractDieFace FACE_THREE = new ImageDieFace(54); - private static readonly AbstractDieFace FACE_FOUR = new ColorDieFace(16548); - - private readonly static NumberDieFace[] FACES1 = new NumberDieFace[] - { - FACE_ONE as NumberDieFace, - new NumberDieFace(2), - new NumberDieFace(3), - new NumberDieFace(4) - }; - - private readonly static NumberDieFace[] FACES2 = new NumberDieFace[] { - new NumberDieFace(9), - new NumberDieFace(10), - new NumberDieFace(11), - FACE_TWO as NumberDieFace, - new NumberDieFace(13), - new NumberDieFace(14) - }; - - private readonly static ImageDieFace[] FACES3 = new ImageDieFace[] { - new ImageDieFace(13), - new ImageDieFace(27), - new ImageDieFace(38), - FACE_THREE as ImageDieFace - }; - - private readonly static ColorDieFace[] FACES4 = new ColorDieFace[] { - new(11651), - new(24651), - FACE_FOUR as ColorDieFace, - new(412) - }; - - private readonly AbstractDie NUM1 = new NumberDie(FACES1); - private readonly AbstractDie NUM2 = new NumberDie(FACES2); - private readonly AbstractDie IMG1 = new ImageDie(FACES3); - private readonly AbstractDie CLR1 = new ColorDie(FACES4); - - public TurnTest() - { - DICE_N_FACES_1 = new() - { - { NUM1, FACE_ONE }, - { NUM2, FACE_TWO }, - { IMG1, FACE_THREE }, - { CLR1, FACE_FOUR } - }; - DICE_N_FACES_2 = new() - { - { NUM1, FACE_TWO }, - { IMG1, FACE_THREE }, - { CLR1, FACE_FOUR } - }; - } - - - - [Fact] - public void TestCreateWithSpecifiedTimeNotUTCThenValid() - { - // Arrange - DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Local); - Player player = new("Alice"); - Assert.NotEqual(DateTimeKind.Utc, dateTime.Kind); - - // Act - Turn turn = Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); - - // Assert - Assert.Equal(DateTimeKind.Utc, turn.When.Kind); - Assert.Equal(dateTime.ToUniversalTime(), turn.When); - } - - - - [Fact] - public void TestCreateWithSpecifiedTimeUTCThenValid() - { - // Arrange - DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); - Player player = new("Bobby"); - Assert.Equal(DateTimeKind.Utc, dateTime.Kind); - - // Act - Turn turn = Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); - - // Assert - Assert.Equal(DateTimeKind.Utc, turn.When.Kind); - Assert.Equal(dateTime.ToUniversalTime(), turn.When); - } - - - [Fact] - public void TestCreateWithSpecifiedTimeNullPlayerThenException() - { - // Arrange - DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); - - // Act - void action() => Turn.CreateWithSpecifiedTime(dateTime, null, DICE_N_FACES_1); - - // Assert - Assert.Throws(action); - } - - [Fact] - public void TestCreateWithSpecifiedTimeNullFacesThenException() - { - // Arrange - DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); - Player player = new("Chucky"); - - // Act - void action() => Turn.CreateWithSpecifiedTime(dateTime, player, null); - - // Assert - Assert.Throws(action); - } - - - [Fact] - public void TestCreateWithSpecifiedTimeEmptyFacesThenException() - { - // Arrange - DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); - Player player = new("Chucky"); - DICE_N_FACES_1.Clear(); - - // Act - void action() => Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); - - // Assert - Assert.Throws(action); - } - - - - [Fact] - public void TestCreateWithDefaultTimeThenValid() - { - // Arrange - Player player = new("Chloe"); - - // Act - Turn turn = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); - - // Assert - Assert.Equal(DateTimeKind.Utc, turn.When.Kind); - Assert.Equal(DateTime.Now.ToUniversalTime().Date, turn.When.Date); - // N.B.: might fail between 11:59:59PM and 00:00:00AM - } - - - - [Fact] - public void TestToStringValidIfAllNormal() - { - // Arrange - DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); - string name = "Bobby"; - Player player = new(name); - string expected = $"2018-06-15 16:30:00 -- {name} rolled: " - + FACE_ONE.ToString() + " " - + FACE_TWO.ToString() + " " - + FACE_THREE.ToString() + " " - + FACE_FOUR.ToString(); - - Turn turn = Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); - - // Act - string actual = turn.ToString(); - Debug.WriteLine(actual); - - // Assert - Assert.Equal(expected, actual); - } - - [Fact] - public void TestDiceNFacesProperty() - { - // Arrange - Player player = new("Erika"); - - // Act - Turn turn = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); - IEnumerable, AbstractDieFace>> expected = DICE_N_FACES_1.AsEnumerable(); - - // Assert - Assert.Equal(expected, turn.DiceNFaces); +using Data; +using Model.Dice; +using Model.Dice.Faces; +using Model.Games; +using Model.Players; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using Xunit; + +namespace Tests.Model_UTs +{ + public class TurnTest + + { + private readonly GameRunner stubGameRunner = new Stub().LoadApp(); + + Dictionary DICE_N_FACES_1, DICE_N_FACES_2; + + public TurnTest() + { + DICE_N_FACES_1 = (Dictionary)stubGameRunner.GetAll().First().GetHistory().First().DiceNFaces; + DICE_N_FACES_2 = (Dictionary)stubGameRunner.GetAll().Last().GetHistory().Last().DiceNFaces; + } + + [Fact] + public void TestCreateWithSpecifiedTimeNotUTCThenValid() + { + // Arrange + DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Local); + Player player = new("Alice"); + Assert.NotEqual(DateTimeKind.Utc, dateTime.Kind); + + // Act + Turn turn = Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); + + // Assert + Assert.Equal(DateTimeKind.Utc, turn.When.Kind); + Assert.Equal(dateTime.ToUniversalTime(), turn.When); + } + + + + [Fact] + public void TestCreateWithSpecifiedTimeUTCThenValid() + { + // Arrange + DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); + Player player = new("Bobby"); + Assert.Equal(DateTimeKind.Utc, dateTime.Kind); + + // Act + Turn turn = Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); + + // Assert + Assert.Equal(DateTimeKind.Utc, turn.When.Kind); + Assert.Equal(dateTime.ToUniversalTime(), turn.When); + } + + + [Fact] + public void TestCreateWithSpecifiedTimeNullPlayerThenException() + { + // Arrange + DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); + + // Act + void action() => Turn.CreateWithSpecifiedTime(dateTime, null, DICE_N_FACES_1); + + // Assert + Assert.Throws(action); + } + + [Fact] + public void TestCreateWithSpecifiedTimeNullFacesThenException() + { + // Arrange + DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); + Player player = new("Chucky"); + + // Act + void action() => Turn.CreateWithSpecifiedTime(dateTime, player, null); + + // Assert + Assert.Throws(action); + } + + + [Fact] + public void TestCreateWithSpecifiedTimeEmptyFacesThenException() + { + // Arrange + DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); + Player player = new("Chucky"); + DICE_N_FACES_1.Clear(); + + // Act + void action() => Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); + + // Assert + Assert.Throws(action); + } + + + + [Fact] + public void TestCreateWithDefaultTimeThenValid() + { + // Arrange + Player player = new("Chloe"); + + // Act + Turn turn = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); + + // Assert + Assert.Equal(DateTimeKind.Utc, turn.When.Kind); + Assert.Equal(DateTime.Now.ToUniversalTime().Date, turn.When.Date); + // N.B.: might fail between 11:59:59PM and 00:00:00AM } - [Fact] - public void TestEqualsFalseIfNotTurn() - { - // Arrange - Point point; - Turn turn; - Player player = new("Freddie"); - - // Act - point = new(1, 2); - turn = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); - - // Assert - Assert.False(point.Equals(turn)); - Assert.False(point.GetHashCode().Equals(turn.GetHashCode())); - Assert.False(turn.Equals(point)); - Assert.False(turn.GetHashCode().Equals(point.GetHashCode())); - } - - [Fact] - public void TestGoesThruToSecondMethodIfObjIsTypeTurn() - { - // Arrange - Object t1; - Turn t2; - Player player1 = new Player("Marvin"); - Player player2 = new Player("Noah"); - - // Act - t1 = Turn.CreateWithDefaultTime(player1, DICE_N_FACES_1); - t2 = Turn.CreateWithDefaultTime(player2, DICE_N_FACES_2); - - // Assert - Assert.False(t1.Equals(t2)); - Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); - Assert.False(t2.Equals(t1)); - Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); - } - - - [Fact] - public void TestEqualsFalseIfNotSamePlayer() - { - // Arrange - Player player1= new("Panama"); - Player player2= new("Clyde"); - - // Act - Turn t1 = Turn.CreateWithDefaultTime(player1, DICE_N_FACES_2); - Turn t2 = Turn.CreateWithDefaultTime(player2, DICE_N_FACES_2); - - // Assert - Assert.False(t1.Equals(t2)); - Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); - Assert.False(t2.Equals(t1)); - Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); + [Fact] + public void TestDiceNFacesProperty() + { + // Arrange + Player player = new("Erika"); + + // Act + Turn turn = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); + IEnumerable> expected = DICE_N_FACES_1.AsEnumerable(); + + // Assert + Assert.Equal(expected, turn.DiceNFaces); } - [Fact] - public void TestEqualsFalseIfNotSameTime() - { - // Arrange - Player player = new("Oscar"); - - // Act - Turn t1 = Turn.CreateWithSpecifiedTime(new DateTime(1994, 07, 10), player, DICE_N_FACES_1); - Turn t2 = Turn.CreateWithSpecifiedTime(new DateTime(1991, 08, 20), player, DICE_N_FACES_1); - - // Assert - Assert.False(t1.Equals(t2)); - Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); - Assert.False(t2.Equals(t1)); - Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); + [Fact] + public void TestEqualsFalseIfNotTurn() + { + // Arrange + Point point; + Turn turn; + Player player = new("Freddie"); + + // Act + point = new(1, 2); + turn = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); + + // Assert + Assert.False(point.Equals(turn)); + Assert.False(point.GetHashCode().Equals(turn.GetHashCode())); + Assert.False(turn.Equals(point)); + Assert.False(turn.GetHashCode().Equals(point.GetHashCode())); } - [Fact] - public void TestEqualsFalseIfNotSameDiceNFaces() - { - // Arrange - Player player = new("Django"); - - // Act - Turn t1 = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); - Turn t2 = Turn.CreateWithDefaultTime(player, DICE_N_FACES_2); - - // Assert - Assert.False(t1.Equals(t2)); - Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); - Assert.False(t2.Equals(t1)); - Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); - } - - [Fact] - public void TestEqualsTrueIfExactlySameProperties() - { - // Arrange - Player player = new("Elyse"); - - // Act - Turn t1 = Turn.CreateWithSpecifiedTime(new DateTime(1990, 04, 29), player, DICE_N_FACES_1); - Turn t2 = Turn.CreateWithSpecifiedTime(new DateTime(1990, 04, 29), player, DICE_N_FACES_1); - - // Assert - Assert.True(t1.Equals(t2)); - Assert.True(t1.GetHashCode().Equals(t2.GetHashCode())); - Assert.True(t2.Equals(t1)); - Assert.True(t2.GetHashCode().Equals(t1.GetHashCode())); - } - } -} + [Fact] + public void TestGoesThruToSecondMethodIfObjIsTypeTurn() + { + // Arrange + Object t1; + Turn t2; + Player player1 = new Player("Marvin"); + Player player2 = new Player("Noah"); + + // Act + t1 = Turn.CreateWithDefaultTime(player1, DICE_N_FACES_1); + t2 = Turn.CreateWithDefaultTime(player2, DICE_N_FACES_2); + + // Assert + Assert.False(t1.Equals(t2)); + Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); + Assert.False(t2.Equals(t1)); + Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); + } + + + [Fact] + public void TestEqualsFalseIfNotSamePlayer() + { + // Arrange + Player player1 = new("Panama"); + Player player2 = new("Clyde"); + + // Act + Turn t1 = Turn.CreateWithDefaultTime(player1, DICE_N_FACES_2); + Turn t2 = Turn.CreateWithDefaultTime(player2, DICE_N_FACES_2); + + // Assert + Assert.False(t1.Equals(t2)); + Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); + Assert.False(t2.Equals(t1)); + Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); + } + + [Fact] + public void TestEqualsFalseIfNotSameTime() + { + // Arrange + Player player = new("Oscar"); + + // Act + Turn t1 = Turn.CreateWithSpecifiedTime(new DateTime(1994, 07, 10), player, DICE_N_FACES_1); + Turn t2 = Turn.CreateWithSpecifiedTime(new DateTime(1991, 08, 20), player, DICE_N_FACES_1); + + // Assert + Assert.False(t1.Equals(t2)); + Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); + Assert.False(t2.Equals(t1)); + Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); + } + + [Fact] + public void TestEqualsFalseIfNotSameDiceNFaces() + { + // Arrange + Player player = new("Django"); + + // Act + Turn t1 = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); + Turn t2 = Turn.CreateWithDefaultTime(player, DICE_N_FACES_2); + + // Assert + Assert.False(t1.Equals(t2)); + Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); + Assert.False(t2.Equals(t1)); + Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); + } + + [Fact] + public void TestEqualsTrueIfExactlySameProperties() + { + // Arrange + Player player = new("Elyse"); + + // Act + Turn t1 = Turn.CreateWithSpecifiedTime(new DateTime(1990, 04, 29), player, DICE_N_FACES_1); + Turn t2 = Turn.CreateWithSpecifiedTime(new DateTime(1990, 04, 29), player, DICE_N_FACES_1); + + // Assert + Assert.True(t1.Equals(t2)); + Assert.True(t1.GetHashCode().Equals(t2.GetHashCode())); + Assert.True(t2.Equals(t1)); + Assert.True(t2.GetHashCode().Equals(t1.GetHashCode())); + } + } +}