/// <summary> /// Creates a new world using the details given in the InitiationMessage object. /// </summary> /// <param name="message">Initiation message is the first message received by the client. </param> /// <returns>New world based on the InitiationMessage. </returns> private static World FromInitiationMessage(InitiationMessage message) { var brickWalls = message.Bricks.ToArray().Select(point => new BrickWall(point)); var stoneWalls = message.Stones.ToArray().Select(point => new StoneWall(point)); var waters = message.Water.ToArray().Select(point => new Water(point)); return(new World(message.PlayerNumber) { BrickWalls = new HashSet <BrickWall>(brickWalls), StoneWalls = new HashSet <StoneWall>(stoneWalls), Waters = new HashSet <Water>(waters) }); }
public void GetInitiationMessageTests() { var initiationMessageString = "I:P0:14,1;9,5;13,16;4,8;15,11;19,6;3,6;1,17;5,12;9,16:12,7;4,11;18,15;2,6;13,17;4,1;8,5;19,16;3,7;14,11:18,5;2,9;16,13;0,17;8,15;3,14;1,8;12,9;16,3;0,7#"; var initiationMessage = MessageFactory.GetMessage(initiationMessageString); var initiationMessageExpected = new InitiationMessage(0, new[] { new Point(14, 1), new Point(9, 5), new Point(13, 16), new Point(4, 8), new Point(15, 11), new Point(19, 6), new Point(3, 6), new Point(1, 17), new Point(5, 12), new Point(9, 16) }, new[] { new Point(12, 7), new Point(4, 11), new Point(18, 15), new Point(2, 6), new Point(13, 17), new Point(4, 1), new Point(8, 5), new Point(19, 16), new Point(3, 7), new Point(14, 11) }, new[] { new Point(18, 5), new Point(2, 9), new Point(16, 13), new Point(0, 17), new Point(8, 15), new Point(3, 14), new Point(1, 8), new Point(12, 9), new Point(16, 3), new Point(0, 7) }); Assert.NotNull(initiationMessage); Assert.IsInstanceOf <InitiationMessage>(initiationMessage); Assert.AreEqual(initiationMessageExpected, initiationMessage); var initiationMessageCast = initiationMessage as InitiationMessage; Assume.That(initiationMessageCast, Is.Not.Null); Assert.AreEqual(initiationMessageCast?.PlayerNumber, 0); CollectionAssert.AreEquivalent( new[] { new Point(14, 1), new Point(9, 5), new Point(13, 16), new Point(4, 8), new Point(15, 11), new Point(19, 6), new Point(3, 6), new Point(1, 17), new Point(5, 12), new Point(9, 16) }, initiationMessageCast?.Bricks); CollectionAssert.AreEquivalent( new[] { new Point(12, 7), new Point(4, 11), new Point(18, 15), new Point(2, 6), new Point(13, 17), new Point(4, 1), new Point(8, 5), new Point(19, 16), new Point(3, 7), new Point(14, 11) }, initiationMessageCast?.Stones); CollectionAssert.AreEquivalent( new[] { new Point(18, 5), new Point(2, 9), new Point(16, 13), new Point(0, 17), new Point(8, 15), new Point(3, 14), new Point(1, 8), new Point(12, 9), new Point(16, 3), new Point(0, 7) }, initiationMessageCast?.Water); var initiationMessageUnexpected = new InitiationMessage(0, new[] { new Point(14, 1), new Point(9, 5), new Point(13, 16), new Point(4, 8), new Point(15, 11), new Point(19, 6), new Point(3, 6), new Point(1, 17), new Point(5, 12), new Point(9, 16) }, new[] { new Point(12, 7), new Point(4, 11), new Point(18, 15), new Point(2, 6), new Point(13, 17), new Point(4, 1), new Point(8, 5), new Point(19, 16), new Point(3, 7), new Point(14, 11) }, new[] { new Point(18, 5), new Point(4 /* here */, 9), new Point(16, 13), new Point(0, 17), new Point(8, 15), new Point(3, 14), new Point(1, 8), new Point(12, 9), new Point(16, 3), new Point(0, 7) }); Assert.AreNotEqual(initiationMessageUnexpected, initiationMessageCast); Assert.IsTrue(initiationMessageCast != initiationMessageUnexpected); Assert.True(initiationMessageExpected.GetHashCode() == initiationMessageCast?.GetHashCode()); Assert.False(initiationMessageExpected.GetHashCode() == initiationMessageUnexpected.GetHashCode()); }