public void Register_ThenAllocHGlobalForBuffer() { // ARRANGE var mockedBroadcastDeviceInterfaceFactory = new Mock<IBroadcastDeviceInterfaceFactory>(); var mockedMarshallWrapper = new Mock<IMarshalWrapper>(); var mockedUnsafeNativeMethodsWrapper = new Mock<IUnsafeNativeMethodsWrapper>(); var mockedProcessHandleResultFactory = new Mock<IProcessHandleResultFactory>(); var deviceManagement = new DeviceNotifications( mockedBroadcastDeviceInterfaceFactory.Object, mockedMarshallWrapper.Object, mockedUnsafeNativeMethodsWrapper.Object, mockedProcessHandleResultFactory.Object); var handleReceivesNotifications = new IntPtr(42); var devBroadcastDeviceInterface = new BroadcastDeviceInterface(); mockedBroadcastDeviceInterfaceFactory.Setup(x => x.CreateBroadcastDeviceInterface()).Returns(devBroadcastDeviceInterface); // ACT deviceManagement.Register(handleReceivesNotifications); // ASSERT mockedMarshallWrapper.Verify(x => x.AllocHGlobal(devBroadcastDeviceInterface.Size), Times.Once); }
public void Unregister_ThenUnsafeNativeMethodUnregisterDeviceNotificationsIsCalled() { // ARRANGE var mockedBroadcastDeviceInterfaceFactory = new Mock<IBroadcastDeviceInterfaceFactory>(); var mockedMarshallWrapper = new Mock<IMarshalWrapper>(); var mockedUnsafeNativeMethodsWrapper = new Mock<IUnsafeNativeMethodsWrapper>(); var mockedProcessHandleResultFactory = new Mock<IProcessHandleResultFactory>(); var deviceManagement = new DeviceNotifications( mockedBroadcastDeviceInterfaceFactory.Object, mockedMarshallWrapper.Object, mockedUnsafeNativeMethodsWrapper.Object, mockedProcessHandleResultFactory.Object); var unregisterHandle = new IntPtr(42); // ACT deviceManagement.UnRegister(unregisterHandle); // ASSERT mockedUnsafeNativeMethodsWrapper.Verify(x => x.UnRegisterDeviceNotification(unregisterHandle), Times.Once); }
public void Register_WhenStructureToPointerThrowsException_ThenFreeGlobalIsCalled() { // ARRANGE var mockedBroadcastDeviceInterfaceFactory = new Mock<IBroadcastDeviceInterfaceFactory>(); var mockedMarshallWrapper = new Mock<IMarshalWrapper>(); var mockedUnsafeNativeMethodsWrapper = new Mock<IUnsafeNativeMethodsWrapper>(); var mockedProcessHandleResultFactory = new Mock<IProcessHandleResultFactory>(); var deviceManagement = new DeviceNotifications( mockedBroadcastDeviceInterfaceFactory.Object, mockedMarshallWrapper.Object, mockedUnsafeNativeMethodsWrapper.Object, mockedProcessHandleResultFactory.Object); var handleReceivesNotifications = new IntPtr(42); var devBroadcastDeviceInterface = new BroadcastDeviceInterface(); var intPtrForBuffer = new IntPtr(111); mockedBroadcastDeviceInterfaceFactory.Setup(x => x.CreateBroadcastDeviceInterface()).Returns(devBroadcastDeviceInterface); mockedMarshallWrapper.Setup(x => x.AllocHGlobal(devBroadcastDeviceInterface.Size)).Returns(intPtrForBuffer); mockedMarshallWrapper.Setup(x => x.StructureToPointer(devBroadcastDeviceInterface, intPtrForBuffer, false)).Throws<InvalidOperationException>(); // ACT var testDelegate = new Assert.ThrowsDelegate(() => deviceManagement.Register(handleReceivesNotifications)); // ASSERT Assert.Throws<InvalidOperationException>(testDelegate); mockedMarshallWrapper.Verify(x => x.FreeHGlobal(intPtrForBuffer), Times.Once); }