public void GivenConnectedPrinterControllerService_AndPrevCommandWaitingAck_AndCommandStackCleared_AndString_AndEncoding_WhenWrite_ThenCommandSent()
        {
            // Arrange
            var printer = new PrinterConfigurationModel();
            var mockPrinterPacketParser   = new Mock <IPrinterPacketParser>();
            var testableSerialPortAdapter = new TestableSerialPortAdapter();
            var sut = new MarlinPrinterControllerService(
                testableSerialPortAdapter,
                mockPrinterPacketParser.Object);
            var expectedDataString = "Hello World!";

            sut.Connect(printer);
            sut.Write(
                expectedDataString,
                Encoding.ASCII);
            sut.ClearCommandStack();

            // Act
            var result = sut.Write(
                "This will get sent as the command stack has been cleared!",
                Encoding.ASCII);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(2, testableSerialPortAdapter.WrittenBinaryData.Count);
        }
        public void GivenConnectedPrinterControllerService_AndPrevCommandWaitingAck_AndByteArray_AndOffset_AndCount_WhenWrite_ThenNullReturned()
        {
            // Arrange
            var mockPrinterPacketParser   = new Mock <IPrinterPacketParser>();
            var testableSerialPortAdapter = new TestableSerialPortAdapter();
            var sut = new MarlinPrinterControllerService(
                testableSerialPortAdapter,
                mockPrinterPacketParser.Object);
            var expectedDataString = "This won't get sent!";
            var expectedDataBytes  = Encoding.ASCII.GetBytes(expectedDataString);
            var expectedOffset     = 1;
            var expectedCount      = 2;

            sut.Write(
                Encoding.ASCII.GetBytes("Hello World!"),
                expectedOffset,
                expectedCount);

            // Act
            var result = sut.Write(
                expectedDataBytes,
                expectedOffset,
                expectedCount);

            // Assert
            Assert.Null(result);
        }
        public void GivenConnectedPrinterControllerService_AndString_AndEncoding_WhenWrite_ThenByteArrayWrittenToPrinter_AndPrinterCommandReturned()
        {
            // Arrange
            var printer = new PrinterConfigurationModel();
            var mockPrinterPacketParser   = new Mock <IPrinterPacketParser>();
            var testableSerialPortAdapter = new TestableSerialPortAdapter();
            var sut = new MarlinPrinterControllerService(
                testableSerialPortAdapter,
                mockPrinterPacketParser.Object);
            var expectedDataString = "Hello World!";
            var expectedDataBytes  = Encoding.ASCII.GetBytes(expectedDataString);
            var expectedOffset     = 0;
            var expectedCount      = expectedDataString.Length;

            sut.Connect(printer);

            // Act
            var result = sut.Write(
                expectedDataString,
                Encoding.ASCII);

            // Assert
            Assert.Equal(expectedDataBytes, result.Data);
            Assert.Equal(expectedOffset, result.Offset);
            Assert.Equal(expectedCount, result.Count);
            Assert.False(result.Acknowledged);
            Assert.Single(testableSerialPortAdapter.WrittenBinaryData);
            Assert.Equal(expectedDataBytes, testableSerialPortAdapter.WrittenBinaryData[0].Data);
            Assert.Equal(expectedOffset, testableSerialPortAdapter.WrittenBinaryData[0].Offset);
            Assert.Equal(expectedCount, testableSerialPortAdapter.WrittenBinaryData[0].Count);
        }
        public void GivenConnectedPrinterControllerService_AndCommandAcked_AndString_AndEncoding_WhenWrite_ThenCommandSent()
        {
            // Arrange
            var printer = new PrinterConfigurationModel();
            var mockPrinterPacketParser   = new Mock <IPrinterPacketParser>();
            var testableSerialPortAdapter = new TestableSerialPortAdapter();
            var sut = new MarlinPrinterControllerService(
                testableSerialPortAdapter,
                mockPrinterPacketParser.Object);
            var expectedDataString = "Hello World!";
            var expectedDataBytes  = Encoding.ASCII.GetBytes(expectedDataString);
            var expectedCount      = expectedDataString.Length;

            sut.Connect(printer);
            sut.Write(
                expectedDataString,
                Encoding.ASCII);

            mockPrinterPacketParser.Setup(x => x.ReceiveData(
                                              It.Is <string>(x => x == "ok\n")))
            .Callback(() =>
            {
                mockPrinterPacketParser.Raise(
                    x => x.PacketComplete += null,
                    new PrinterPacketParserPacketCompleteEventArgs()
                {
                    Packet = new PrinterPacket()
                    {
                        IsAck = true
                    }
                });
            });

            sut.SerialPortAdapterRef.DataReceivedCallback(
                sut.SerialPortAdapterRef,
                "ok\n");

            // Act
            var result = sut.Write(
                "This will get sent as the previous command was acknowledged!",
                Encoding.ASCII);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(2, testableSerialPortAdapter.WrittenBinaryData.Count);
        }
        public void GivenConnectedPrinterControllerService_WhenReceivedData_ThenEventRaisedWithReceivedData()
        {
            // Arrange
            var printer = new PrinterConfigurationModel();
            var testableSerialPortAdapter = new TestableSerialPortAdapter();
            var mockPrinterPacketParser   = new Mock <IPrinterPacketParser>();
            var sut = new MarlinPrinterControllerService(
                testableSerialPortAdapter,
                mockPrinterPacketParser.Object);
            var receivedData = string.Empty;
            var expecetdData = "Hello World!";

            sut.Connect(printer);

            mockPrinterPacketParser.Setup(x => x.ReceiveData(
                                              It.IsAny <string>())).Callback((string data) =>
            {
                var eventArgs = new PrinterPacketParserPacketCompleteEventArgs()
                {
                    Packet = new PrinterPacket()
                    {
                        RawData = data
                    }
                };
                mockPrinterPacketParser.Raise(
                    x => x.PacketComplete += null,
                    eventArgs);
            });

            // Act
            sut.ReceivedData += new EventHandler <PrinterControllerReceivedDataEventArgs>(delegate(object s, PrinterControllerReceivedDataEventArgs ev)
            {
                receivedData = ev.Packet.RawData;
            });
            testableSerialPortAdapter.FakeReceiveData(
                testableSerialPortAdapter.SerialPortAdapterRef,
                expecetdData);

            // Assert
            Assert.Equal(expecetdData, receivedData);
        }
        public void GivenConnectedPrinterControllerService_AndPrevCommandWaitingAck_AndString_AndEncoding_WhenWrite_ThenNullReturned()
        {
            // Arrange
            var printer = new PrinterConfigurationModel();
            var mockPrinterPacketParser   = new Mock <IPrinterPacketParser>();
            var testableSerialPortAdapter = new TestableSerialPortAdapter();
            var sut = new MarlinPrinterControllerService(
                testableSerialPortAdapter,
                mockPrinterPacketParser.Object);
            var expectedDataString = "Hello World!";

            sut.Connect(printer);
            sut.Write(
                expectedDataString,
                Encoding.ASCII);

            // Act
            var result = sut.Write(
                "This won't get sent!",
                Encoding.ASCII);

            // Assert
            Assert.Null(result);
        }