Skip to content

Commit

Permalink
Merge pull request NModbus4#66 from Maxwe11/improve-code-coverage
Browse files Browse the repository at this point in the history
Improve code coverage
  • Loading branch information
Maxwe11 committed Sep 13, 2015
2 parents 9e101e0 + 476a253 commit 5429ac0
Show file tree
Hide file tree
Showing 13 changed files with 381 additions and 137 deletions.
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
language: csharp
mono:
- alpha
solution: NModbus4.sln
script:
- xbuild /p:Configuration=Debug NModbus4.sln
31 changes: 31 additions & 0 deletions NModbus4.UnitTests/Data/BoolModbusDataCollectionFixture.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using System.Collections.ObjectModel;
using Modbus.Data;
using Xunit;

namespace Modbus.UnitTests.Data
{
public class BoolModbusDataCollectionFixture : ModbusDataCollectionFixture<bool>
{
protected override bool[] GetArray()
{
return new[] { false, false, true, false, false };
}

protected override bool GetNonExistentElement()
{
return true;
}

[Fact]
public void Remove_FromReadOnly()
{
bool[] source = { false, false, false, true, false, false };
var col = new ModbusDataCollection<bool>(new ReadOnlyCollection<bool>(source));
int expectedCount = source.Length;

Assert.True(col.Remove(source[3]));

Assert.Equal(expectedCount, col.Count);
}
}
}
108 changes: 72 additions & 36 deletions NModbus4.UnitTests/Data/ModbusDataCollectionFixture.cs
Original file line number Diff line number Diff line change
@@ -1,83 +1,119 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Modbus.Data;
using Xunit;

namespace Modbus.UnitTests.Data
{
public class ModbusDataCollectionFixture
public abstract class ModbusDataCollectionFixture<TData>
{
[Fact]
public void FromReadOnlyList()
protected abstract TData[] GetArray();

protected abstract TData GetNonExistentElement();

protected List<TData> GetList()
{
ModbusDataCollection<bool> col = new ModbusDataCollection<bool>(new bool[] { true, false });
Assert.Equal(3, col.Count);
return new List<TData>(GetArray());
}

[Fact]
public void ModbusDataCollection_FromParams()
public void DefaultContstructor()
{
ModbusDataCollection<bool> col = new ModbusDataCollection<bool>(true, false);
Assert.Equal(3, col.Count);
var col = new ModbusDataCollection<TData>();
Assert.NotEmpty(col);
Assert.Equal(1, col.Count);

col.Add(default(TData));
Assert.Equal(2, col.Count);
}

[Fact]
public void Empty()
public void ContstructorWithParams()
{
ModbusDataCollection<bool> col = new ModbusDataCollection<bool>();
Assert.Equal(1, col.Count);
TData[] source = GetArray();
var col = new ModbusDataCollection<TData>(source);
Assert.Equal(source.Length + 1, col.Count);
Assert.NotEmpty(col);

col.Add(default(TData));
Assert.Equal(source.Length + 2, col.Count);
}

[Fact]
public void AddDefaultBool()
public void ContstructorWithIList()
{
ModbusDataCollection<bool> col = new ModbusDataCollection<bool>(true, true);
Assert.Equal(3, col.Count);
Assert.Equal(new bool[] { false, true, true }, col.ToArray());
List<TData> source = GetList();
int expectedCount = source.Count;

var col = new ModbusDataCollection<TData>(source);

Assert.Equal(expectedCount + 1, source.Count);
Assert.Equal(expectedCount + 1, col.Count);

source.Insert(0, default(TData));
Assert.Equal(source, col);
}

[Fact]
public void AddDefaultUshort()
public void ContstructorWithIList_FromReadOnlyList()
{
ModbusDataCollection<ushort> col = new ModbusDataCollection<ushort>(1, 1);
Assert.Equal(3, col.Count);
Assert.Equal(new ushort[] { 0, 1, 1 }, col.ToArray());
List<TData> source = GetList();
var readOnly = new ReadOnlyCollection<TData>(source);
int expectedCount = source.Count;

var col = new ModbusDataCollection<TData>(readOnly);

Assert.Equal(expectedCount, source.Count);
Assert.Equal(expectedCount + 1, col.Count);

source.Insert(0, default(TData));
Assert.Equal(source, col);
}

[Fact]
public void SetZeroElementUsingItem()
{
ModbusDataCollection<bool> col = new ModbusDataCollection<bool>(true, false);
Assert.Throws<ArgumentOutOfRangeException>(() => col[0] = true);
var source = GetArray();
var col = new ModbusDataCollection<TData>(source);
Assert.Throws<ArgumentOutOfRangeException>(() => col[0] = source[3]);
}

[Fact]
public void InsertZeroElement()
public void ZeroElementUsingItem_Negative()
{
ModbusDataCollection<bool> col = new ModbusDataCollection<bool>(true, false);
Assert.Throws<ArgumentOutOfRangeException>(() => col.Insert(0, true));
var source = GetArray();
var col = new ModbusDataCollection<TData>(source);

Assert.Throws<ArgumentOutOfRangeException>(() => col[0] = source[3]);
Assert.Throws<ArgumentOutOfRangeException>(() => col.Insert(0, source[3]));
Assert.Throws<ArgumentOutOfRangeException>(() => col.RemoveAt(0));

// Remove forst zero/false
Assert.Throws<ArgumentOutOfRangeException>(() => col.Remove(default(TData)));
}

[Fact]
public void Clear()
{
ModbusDataCollection<bool> col = new ModbusDataCollection<bool>(true, false);
var col = new ModbusDataCollection<TData>(GetArray());
col.Clear();

Assert.Equal(1, col.Count);
}

[Fact]
public void RemoveAtZeroElement()
public void Remove()
{
ModbusDataCollection<bool> col = new ModbusDataCollection<bool>(true, false);
Assert.Throws<ArgumentOutOfRangeException>(() => col.RemoveAt(0));
}
List<TData> source = GetList();
var col = new ModbusDataCollection<TData>(source);
int expectedCount = source.Count - 1;

[Fact]
public void RemoveZeroElement()
{
ModbusDataCollection<bool> col = new ModbusDataCollection<bool>();
Assert.Throws<ArgumentOutOfRangeException>(() => col.Remove(default(bool)));
Assert.True(col.Remove(source[3]));

Assert.Equal(expectedCount, col.Count);
Assert.Equal(expectedCount, source.Count);
Assert.Equal(source, col);
}
}
}
}
32 changes: 32 additions & 0 deletions NModbus4.UnitTests/Data/UshortModbusDataCollectionFixture.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System.Collections.ObjectModel;
using Modbus.Data;
using Xunit;

namespace Modbus.UnitTests.Data
{
public class UshortModbusDataCollectionFixture : ModbusDataCollectionFixture<ushort>
{
protected override ushort[] GetArray()
{
return new ushort[] { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
}

protected override ushort GetNonExistentElement()
{
return 42;
}

[Fact]
public void Remove_FromReadOnly()
{
ushort[] source = this.GetArray();
var col = new ModbusDataCollection<ushort>(new ReadOnlyCollection<ushort>(source));
int expectedCount = source.Length;

Assert.False(col.Remove(this.GetNonExistentElement()));
Assert.True(col.Remove(source[3]));

Assert.Equal(expectedCount, col.Count);
}
}
}
20 changes: 10 additions & 10 deletions NModbus4.UnitTests/Device/ModbusSlaveFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@

namespace Modbus.UnitTests.Device
{
public class ModbusSlaveFixture : ModbusMessageFixture
public class ModbusSlaveFixture
{
private DataStore _testDataStore;
private readonly DataStore _testDataStore;

public ModbusSlaveFixture()
{
Expand All @@ -26,7 +26,7 @@ public void ReadDiscretesCoils()
ReadCoilsInputsResponse response =
ModbusSlave.ReadDiscretes(new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 9), _testDataStore,
_testDataStore.CoilDiscretes);
AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
ModbusMessageFixture.AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
Assert.Equal(expectedResponse.ByteCount, response.ByteCount);
}

Expand All @@ -38,7 +38,7 @@ public void ReadDiscretesInputs()
ReadCoilsInputsResponse response =
ModbusSlave.ReadDiscretes(new ReadCoilsInputsRequest(Modbus.ReadInputs, 1, 1, 9), _testDataStore,
_testDataStore.InputDiscretes);
AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
ModbusMessageFixture.AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
Assert.Equal(expectedResponse.ByteCount, response.ByteCount);
}

Expand All @@ -51,7 +51,7 @@ public void ReadRegistersHoldingRegisters()
ReadHoldingInputRegistersResponse response =
ModbusSlave.ReadRegisters(new ReadHoldingInputRegistersRequest(Modbus.ReadHoldingRegisters, 1, 0, 6),
_testDataStore, _testDataStore.HoldingRegisters);
AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
ModbusMessageFixture.AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
Assert.Equal(expectedResponse.ByteCount, response.ByteCount);
}

Expand All @@ -64,7 +64,7 @@ public void ReadRegistersInputRegisters()
ReadHoldingInputRegistersResponse response =
ModbusSlave.ReadRegisters(new ReadHoldingInputRegistersRequest(Modbus.ReadInputRegisters, 1, 0, 6),
_testDataStore, _testDataStore.InputRegisters);
AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
ModbusMessageFixture.AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
Assert.Equal(expectedResponse.ByteCount, response.ByteCount);
}

Expand All @@ -78,7 +78,7 @@ public void WriteSingleCoil()
WriteSingleCoilRequestResponse response =
ModbusSlave.WriteSingleCoil(new WriteSingleCoilRequestResponse(1, addressToWrite, valueToWrite),
_testDataStore, _testDataStore.CoilDiscretes);
AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
ModbusMessageFixture.AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
Assert.Equal(valueToWrite, _testDataStore.CoilDiscretes[addressToWrite + 1]);
}

Expand All @@ -94,7 +94,7 @@ public void WriteMultipleCoils()
new WriteMultipleCoilsRequest(1, startAddress,
new DiscreteCollection(val, val, val, val, val, val, val, val, val, val)), _testDataStore,
_testDataStore.CoilDiscretes);
AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
ModbusMessageFixture.AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
Assert.Equal(new bool[] { val, val, val, val, val, val, val, val, val, val },
_testDataStore.CoilDiscretes.Slice(startAddress + 1, numberOfPoints).ToArray());
}
Expand All @@ -110,7 +110,7 @@ public void WriteSingleRegister()
WriteSingleRegisterRequestResponse response =
ModbusSlave.WriteSingleRegister(new WriteSingleRegisterRequestResponse(1, startAddress, value),
_testDataStore, _testDataStore.HoldingRegisters);
AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
ModbusMessageFixture.AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
}

[Fact]
Expand All @@ -126,7 +126,7 @@ public void WriteMultipleRegisters()
ModbusSlave.WriteMultipleRegisters(
new WriteMultipleRegistersRequest(1, startAddress, new RegisterCollection(valuesToWrite)),
_testDataStore, _testDataStore.HoldingRegisters);
AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
ModbusMessageFixture.AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
}

[Fact]
Expand Down
22 changes: 22 additions & 0 deletions NModbus4.UnitTests/IO/EmptyTransportFixture.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System;
using Modbus.IO;
using Modbus.Message;
using Xunit;

namespace Modbus.UnitTests.IO
{
public static class EmptyTransportFixture
{
[Fact]
public static void Negative()
{
var transport = new EmptyTransport();
Assert.Throws<NotImplementedException>(() => transport.ReadRequest());
Assert.Throws<NotImplementedException>(() => transport.ReadResponse<ReadCoilsInputsResponse>());
Assert.Throws<NotImplementedException>(() => transport.BuildMessageFrame(null));
Assert.Throws<NotImplementedException>(() => transport.Write(null));
Assert.Throws<NotImplementedException>(() => transport.OnValidateResponse(null, null));
}
}
}

2 changes: 1 addition & 1 deletion NModbus4.UnitTests/IO/ModbusAsciiTransportFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace Modbus.UnitTests.IO
{
public class ModbusAsciiTransportFixture : ModbusMessageFixture
public class ModbusAsciiTransportFixture
{
private static IStreamResource StreamResource => new Mock<IStreamResource>(MockBehavior.Strict).Object;

Expand Down
6 changes: 3 additions & 3 deletions NModbus4.UnitTests/IO/ModbusSerialTransportFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

namespace Modbus.UnitTests.IO
{
public class ModbusSerialTransportFixture : ModbusMessageFixture
public class ModbusSerialTransportFixture
{
private static IStreamResource StreamResource => new Mock<IStreamResource>(MockBehavior.Strict).Object;

Expand All @@ -23,7 +23,7 @@ public void CreateResponse()
var response = transport.CreateResponse<ReadCoilsInputsResponse>(new byte[] { 2, Modbus.ReadCoils, 1, 129, lrc });

Assert.IsType<ReadCoilsInputsResponse>(response);
AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
ModbusMessageFixture.AssertModbusMessagePropertiesAreEqual(expectedResponse, response);
}

[Fact]
Expand Down Expand Up @@ -92,7 +92,7 @@ public void UnicastMessage_PurgeReceiveBuffer()
var request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 2, 3, 4);
var actualResponse = transport.UnicastMessage<ReadCoilsInputsResponse>(request);

AssertModbusMessagePropertiesAreEqual(response, actualResponse);
ModbusMessageFixture.AssertModbusMessagePropertiesAreEqual(response, actualResponse);
mock.VerifyAll();
}
}
Expand Down
Loading

0 comments on commit 5429ac0

Please sign in to comment.