public void SuccessfullyCloses()
            {
                _serialPort.IsOpen.Returns(false);
                var manager = new SmsManager(_serialPort);

                manager.ClosePort(_serialPort);

                Assert.IsFalse(manager.PortIsOpen);
            }
            public void ThrowsExceptionOnInvalidPortState()
            {
                _serialPort.When(call => call.Close()).Do(callback => { throw new IOException(); });
                var manager = new SmsManager(_serialPort);

                Assert.That(() => manager.ClosePort(_serialPort),
                            Throws.Exception.TypeOf <IOException>()
                            .With.Message.EqualTo("I/O error occurred."));
            }
            // Commented because AxoCover does not respect Ignore and Explicit attributes.
            //[Test, Explicit("Integration test. Only valid if a modem/phone is connected.")]
            public void TestPhysicalPort()
            {
                var serialPort = new SystemSerialPort();
                var manager    = new SmsManager(serialPort);

                manager.OpenPort("COM9", 9600, 8, 300, 300);
                var result = manager.ExecCommand(serialPort, "AT", 300, "No phone connected");

                manager.ClosePort(serialPort);

                // Since ATE1 is the default the AT command is echoed back.
                Assert.AreEqual("AT\r\r\nOK\r\n", result);
            }
            public void SuccessfullyExecutes()
            {
                // https://stackoverflow.com/questions/7582087/how-to-mock-serialdatareceivedeventargs
                var constructor = typeof(SerialDataReceivedEventArgs).GetConstructor(
                    BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(SerialData) }, null);
                var eventArgs = (SerialDataReceivedEventArgs)constructor.Invoke(new object[] { SerialData.Chars });

                //_serialPort.When(sp => sp.ReadExisting().Returns("\r\nOK\r\n")).Do(sp => _serialPort.DataReceived += Raise.Event<SerialDataReceivedEventHandler>(eventArgs));
                _serialPort.When(sp => sp.Write(Arg.Any <string>())).Do(sp => _serialPort.DataReceived += Raise.Event <SerialDataReceivedEventHandler>(eventArgs));

                //_serialPort.When(call => call.Write(Arg.Any<string>())); //.Do(callback => { throw new IOException(); });
                _serialPort.ReadExisting().Returns("\r\nOK\r\n");
                var manager = new SmsManager(_serialPort);

                manager.OpenPort("COM2", 9600, 8, 300, 300);
                //_serialPort.DataReceived += Raise.Event<SerialDataReceivedEventHandler>(eventArgs);
                var result = manager.ExecCommand(_serialPort, "AT", 300, "No phone connected");

                manager.ClosePort(_serialPort);

                Assert.AreEqual(result, "\r\nOK\r\n");
            }