diff --git a/src/devices/Mcp23xxx/tests/EnableDisableTests.cs b/src/devices/Mcp23xxx/tests/EnableDisableTests.cs index 1c49a2e861..ca7bc376ce 100644 --- a/src/devices/Mcp23xxx/tests/EnableDisableTests.cs +++ b/src/devices/Mcp23xxx/tests/EnableDisableTests.cs @@ -10,27 +10,21 @@ namespace Iot.Device.Mcp23xxx.Tests { public class EnableDisableTests : Mcp23xxxTest { - private readonly GpioDriverMock _driverMock; - private readonly GpioController _gpioMock; - - public EnableDisableTests() - { - _driverMock = new GpioDriverMock(); - _gpioMock = new GpioController(_driverMock); - } - [Theory] [MemberData(nameof(ResetTestDevices))] public void InitialResetState(TestDevice testDevice) { - _gpioMock.OpenPin(1, PinMode.Input); - Assert.Equal(PinValue.Low, _gpioMock.Read(1)); - _gpioMock.SetPinMode(1, PinMode.Output); + GpioController gpioMock = testDevice.ResetController!; + GpioDriverMock driverMock = testDevice.ResetDriverMock!; + + gpioMock.OpenPin(1, PinMode.Input); + Assert.Equal(PinValue.Low, gpioMock.Read(1)); + gpioMock.SetPinMode(1, PinMode.Output); testDevice.Device.Enable(); - _gpioMock.SetPinMode(1, PinMode.Input); - Assert.Equal(PinValue.High, _gpioMock.Read(1)); - _gpioMock.ClosePin(1); - _driverMock.Reset(); + gpioMock.SetPinMode(1, PinMode.Input); + Assert.Equal(PinValue.High, gpioMock.Read(1)); + gpioMock.ClosePin(1); + driverMock.Reset(); } [Theory] @@ -89,24 +83,51 @@ public static TheoryData ResetTestDevices { TheoryData devices = new TheoryData(); + // Create separate driver mock for each device to avoid parallel test issues + GpioDriverMock driverMock; + GpioController gpioController; + // Don't want to use the same bus mock for each I2cDeviceMock i2c = new I2cDeviceMock(1); - devices.Add(new TestDevice(new Mcp23008(i2c, reset: 1, controller: new GpioController(_driverMock)), i2c.DeviceMock)); + driverMock = new GpioDriverMock(); + gpioController = new GpioController(driverMock); + devices.Add(new TestDevice(new Mcp23008(i2c, reset: 1, controller: gpioController), i2c.DeviceMock, driverMock, gpioController)); + i2c = new I2cDeviceMock(1); - devices.Add(new TestDevice(new Mcp23009(i2c, reset: 1, controller: new GpioController(_driverMock)), i2c.DeviceMock)); + driverMock = new GpioDriverMock(); + gpioController = new GpioController(driverMock); + devices.Add(new TestDevice(new Mcp23009(i2c, reset: 1, controller: gpioController), i2c.DeviceMock, driverMock, gpioController)); + i2c = new I2cDeviceMock(2); - devices.Add(new TestDevice(new Mcp23017(i2c, reset: 1, controller: new GpioController(_driverMock)), i2c.DeviceMock)); + driverMock = new GpioDriverMock(); + gpioController = new GpioController(driverMock); + devices.Add(new TestDevice(new Mcp23017(i2c, reset: 1, controller: gpioController), i2c.DeviceMock, driverMock, gpioController)); + i2c = new I2cDeviceMock(2); - devices.Add(new TestDevice(new Mcp23018(i2c, reset: 1, controller: new GpioController(_driverMock)), i2c.DeviceMock)); + driverMock = new GpioDriverMock(); + gpioController = new GpioController(driverMock); + devices.Add(new TestDevice(new Mcp23018(i2c, reset: 1, controller: gpioController), i2c.DeviceMock, driverMock, gpioController)); SpiDeviceMock spi = new SpiDeviceMock(1); - devices.Add(new TestDevice(new Mcp23s08(spi, 0x20, reset: 1, controller: new GpioController(_driverMock)), spi.DeviceMock)); + driverMock = new GpioDriverMock(); + gpioController = new GpioController(driverMock); + devices.Add(new TestDevice(new Mcp23s08(spi, 0x20, reset: 1, controller: gpioController), spi.DeviceMock, driverMock, gpioController)); + spi = new SpiDeviceMock(1); - devices.Add(new TestDevice(new Mcp23s09(spi, reset: 1, controller: new GpioController(_driverMock)), spi.DeviceMock)); + driverMock = new GpioDriverMock(); + gpioController = new GpioController(driverMock); + devices.Add(new TestDevice(new Mcp23s09(spi, reset: 1, controller: gpioController), spi.DeviceMock, driverMock, gpioController)); + spi = new SpiDeviceMock(2); - devices.Add(new TestDevice(new Mcp23s17(spi, 0x20, reset: 1, controller: new GpioController(_driverMock)), spi.DeviceMock)); + driverMock = new GpioDriverMock(); + gpioController = new GpioController(driverMock); + devices.Add(new TestDevice(new Mcp23s17(spi, 0x20, reset: 1, controller: gpioController), spi.DeviceMock, driverMock, gpioController)); + spi = new SpiDeviceMock(2); - devices.Add(new TestDevice(new Mcp23s18(spi, reset: 1, controller: new GpioController(_driverMock)), spi.DeviceMock)); + driverMock = new GpioDriverMock(); + gpioController = new GpioController(driverMock); + devices.Add(new TestDevice(new Mcp23s18(spi, reset: 1, controller: gpioController), spi.DeviceMock, driverMock, gpioController)); + return devices; } } diff --git a/src/devices/Mcp23xxx/tests/Mcp23xxxTest.cs b/src/devices/Mcp23xxx/tests/Mcp23xxxTest.cs index d787000d44..5e7d09e696 100644 --- a/src/devices/Mcp23xxx/tests/Mcp23xxxTest.cs +++ b/src/devices/Mcp23xxx/tests/Mcp23xxxTest.cs @@ -48,11 +48,32 @@ public struct TestDevice public Mcp23xxxChipMock ChipMock { get; } public GpioController Controller { get; } + /// + /// Optional GpioDriverMock for tests that use reset pin functionality. + /// + public GpioDriverMock? ResetDriverMock { get; } + + /// + /// Optional GpioController (backed by ResetDriverMock) for tests that use reset pin functionality. + /// + public GpioController? ResetController { get; } + public TestDevice(Mcp23xxx device, Mcp23xxxChipMock chipMock) { Device = device; ChipMock = chipMock; Controller = new GpioController(Device); + ResetDriverMock = null; + ResetController = null; + } + + public TestDevice(Mcp23xxx device, Mcp23xxxChipMock chipMock, GpioDriverMock resetDriverMock, GpioController resetController) + { + Device = device; + ChipMock = chipMock; + Controller = new GpioController(Device); + ResetDriverMock = resetDriverMock; + ResetController = resetController; } }