public void Test_Lambda_RemoveOnDisconnect_CustomCreator()
        {
            var testHandler = new TestHandler();

            byte[] serializedData    = new byte[] { 1, 2, 3 };
            byte[] serializedMessage = new byte[] { 1, 2, 3, 4 };
            string unserializedData  = "some data";
            var    mockSerializer    = new Mock <ISerializer>();

            mockSerializer.Setup(m => m.Deserialize <NetworkMessage>(serializedMessage)).Returns(new NetworkMessage {
                Data = serializedData, Name = "System.String"
            });
            mockSerializer.Setup(m => m.Deserialize <string>(serializedData)).Returns(unserializedData);

            var mockConnection = new Mock <IConnection>();

            var objectConnection = new DefaultObjectConnection(mockConnection.Object)
            {
                Serializer = mockSerializer.Object
            };
            bool OnCommandHasBeenCalled    = false;
            Action <IObjectConnection> del = (c) => OnCommandHasBeenCalled = true;
            string creator = "CreatorObject :)";

            objectConnection.OnDisconnect(del, creator: creator);
            objectConnection.RemoveOnDisconnect(creator);

            //Act
            mockConnection.Raise(m => m.OnDisconnected += null);

            Assert.IsFalse(OnCommandHasBeenCalled);
        }
        public void Test_Lambda_OnCommand()
        {
            var testHandler = new TestHandler();

            byte[] serializedData    = new byte[] { 1, 2, 3 };
            byte[] serializedMessage = new byte[] { 1, 2, 3, 4 };
            string unserializedData  = "some data";
            var    mockSerializer    = new Mock <ISerializer>();

            mockSerializer.Setup(m => m.Deserialize <NetworkMessage>(serializedMessage)).Returns(new NetworkMessage {
                Data = serializedData, Name = "System.String"
            });
            mockSerializer.Setup(m => m.Deserialize <string>(serializedData)).Returns(unserializedData);

            var mockConnection = new Mock <IConnection>();

            var objectConnection = new DefaultObjectConnection(mockConnection.Object)
            {
                Serializer = mockSerializer.Object
            };
            bool OnCommandHasBeenCalled = false;

            objectConnection.OnCommand <string>((c, s) => OnCommandHasBeenCalled = true);

            //Act
            mockConnection.Raise(m => m.OnDataReceived += null, serializedMessage);

            Assert.IsTrue(OnCommandHasBeenCalled);
        }
        public void Test_EventHandlerClass_RemoveCommand()
        {
            var testHandler = new TestHandler();

            byte[] serializedData    = new byte[] { 1, 2, 3 };
            byte[] serializedMessage = new byte[] { 1, 2, 3, 4 };
            string unserializedData  = "some data";
            var    mockSerializer    = new Mock <ISerializer>();

            mockSerializer.Setup(m => m.Deserialize <NetworkMessage>(serializedMessage)).Returns(new NetworkMessage {
                Data = serializedData, Name = "System.String"
            });
            mockSerializer.Setup(m => m.Deserialize <string>(serializedData)).Returns(unserializedData);

            var mockConnection = new Mock <IConnection>();

            var objectConnection = new DefaultObjectConnection(mockConnection.Object)
            {
                Serializer = mockSerializer.Object
            };

            objectConnection.AddEventHandler(testHandler);
            objectConnection.RemoveEventHandlers(testHandler);

            //Act
            mockConnection.Raise(m => m.OnDataReceived += null, serializedMessage);

            Assert.IsFalse(testHandler.HasOnCommandBeenCalled);
        }
        public void Test_SendObject()
        {
            string data = "some object data";

            byte[] serializedData = new byte[] { 1, 2, 3 };
            byte[] serializedType = new byte[] { 2, 3, 4 };

            var mockSerializer = new Mock <ISerializer>();

            mockSerializer.Setup(m => m.Serialize(data)).Returns(serializedData);
            mockSerializer.Setup(m => m.Serialize("System.String")).Returns(serializedType);

            var mockConnection = new Mock <IConnection>();

            var objectConnection = new DefaultObjectConnection(mockConnection.Object)
            {
                Serializer = mockSerializer.Object
            };

            //Act
            objectConnection.SendObject(data);

            mockSerializer.Verify(m => m.Serialize((object)data), Times.Once);
            mockSerializer.Verify(m => m.Serialize(It.IsAny <NetworkMessage>()), Times.Once);
            mockConnection.Verify(m => m.SendData(It.IsAny <byte[]>()), Times.Once);
        }
        public void Test_Stop()
        {
            var mockSerializer = new Mock <ISerializer>();
            var mockConnection = new Mock <IConnection>();

            var objectConnection = new DefaultObjectConnection(mockConnection.Object)
            {
                Serializer = mockSerializer.Object
            };

            //Act
            objectConnection.Stop();
            mockConnection.Raise(m => m.OnDisconnected += null);

            mockConnection.Verify(m => m.Stop(), Times.Once);
        }
        public void Test_Start_HasAlreadyBeenStarted()
        {
            var mockSerializer = new Mock <ISerializer>();
            var mockConnection = new Mock <IConnection>();

            var objectConnection = new DefaultObjectConnection(mockConnection.Object)
            {
                Serializer = mockSerializer.Object
            };

            //Act
            objectConnection.Start();
            objectConnection.Start();
            mockConnection.Raise(m => m.OnConnected += null);

            mockConnection.Verify(m => m.Start(), Times.Once);
        }