public async Task TryReadValueAsync_ForGattCommunicationStatus_SetsProtocolError( RawValueReader sut, [Freeze] IBufferReader reader, IGattReadResultWrapper result, IGattCharacteristicWrapper characteristic, byte protocolError) { WithTryReadValueResult(reader, Array.Empty <byte> ( )); result.Status .Returns(GattCommunicationStatus.Success); result.ProtocolError .Returns(protocolError); characteristic.WithCharacteristicProperties(GattCharacteristicProperties.Read) .WithReadValueAsyncResult(result); _ = await sut.TryReadValueAsync(characteristic); sut.ProtocolError .Should( ) .Be(protocolError); }
public virtual async Task Refresh( ) { Characteristics.Refresh(DescriptionToUuid.ReadOnlyDictionary); var keys = Characteristics.Characteristics.Keys.ToArray( ); foreach (var key in keys) { if (!Characteristics.Characteristics.TryGetValue(key, out var characteristic)) { Logger.Warning($"Failed to get value for key '{key}'"); continue; } if (characteristic == null) { Logger.Warning($"Failed, characteristic for key '{key}' is null"); continue; } Logger.Debug($"Reading raw value for {key} " + $"and and characteristic {characteristic.Uuid}"); (bool success, byte [] value)result = await RawValueReader.TryReadValueAsync(characteristic); RawValues [key] = result.success ? result.value : RawArrayEmpty; } }
public void TryReadValueAsync_ForCharacteristicIsNull_Throws( RawValueReader sut) { Func <Task> action = async( ) => { await sut.TryReadValueAsync(null !); }; action.Should( ) .Throw <ArgumentNullException> ( ) .WithParameter("characteristic"); }
public async Task Refresh_ForSuccessfulRead_UpdatesRawValuesAsync( ) { var sut = CreateSut( ); ServiceWrapper.Uuid .Returns(sut.GattServiceUuid); RawValueReader.TryReadValueAsync(CharacteristicWrapper1) .Returns((true, RawValue1)); await sut.Initialize <TestCharacteristicBase> ( ) .Refresh( ); sut.RawValue .Should( ) .BeEquivalentTo(RawValue1); }
public async Task ToString_ForInvoke_Instance( ) { var sut = CreateSut( ); ServiceWrapper.Uuid .Returns(sut.GattServiceUuid); RawValueReader.TryReadValueAsync(CharacteristicWrapper1) .Returns((true, RawValue1)); await sut.Initialize <TestCharacteristicBase> ( ) .Refresh( ); sut.ToString( ) .Should( ) .Be(ToStringResult); }
public async Task ToString_ForInvokedWithKeyAndNoProperty_Instance( ) { const string expected = "TestCharacteristicBase\r\n" + "RawValueKey = [01-02-03]\r\n"; var sut = CreateSut( ); ServiceWrapper.Uuid .Returns(sut.GattServiceUuid); RawValueReader.TryReadValueAsync(CharacteristicWrapper1) .Returns((true, RawValue1)); await sut.Initialize <TestCharacteristicBase> ( ) .Refresh( ); sut.ToString( ) .Should( ) .Be(expected); }
public async Task TryReadValueAsync_ForNotSupportingRead_Empty( RawValueReader sut, [Freeze] IBufferReader reader, IGattReadResultWrapper result, IGattCharacteristicWrapper characteristic) { WithTryReadValueResult(reader, Array.Empty <byte> ( )); result.Status .Returns(GattCommunicationStatus.Success); characteristic.WithCharacteristicProperties(GattCharacteristicProperties.None) .WithReadValueAsyncResult(result); var(_, bytes) = await sut.TryReadValueAsync(characteristic); bytes.Should( ) .BeEmpty( ); }
public async Task TryReadValueAsync_ForSupportsNotifyTrue_False( RawValueReader sut, [Freeze] IBufferReader reader, IGattReadResultWrapper result, IGattCharacteristicWrapper characteristic) { WithTryReadValueResult(reader, Array.Empty <byte> ( )); result.Status .Returns(GattCommunicationStatus.Success); characteristic.WithCharacteristicProperties(GattCharacteristicProperties.Notify) .WithReadValueAsyncResult(result); var(success, _) = await sut.TryReadValueAsync(characteristic); success.Should( ) .BeFalse( ); }
public async Task TryReadValueAsync_ForGattCommunicationStatusIsSuccess_Bytes( RawValueReader sut, [Freeze] IBufferReader reader, IGattReadResultWrapper result, IGattCharacteristicWrapper characteristic, byte [] bytes) { WithTryReadValueResult(reader, bytes); result.Status .Returns(GattCommunicationStatus.Success); characteristic.WithCharacteristicProperties(GattCharacteristicProperties.Read) .WithReadValueAsyncResult(result); var(_, value) = await sut.TryReadValueAsync(characteristic); value.Should( ) .BeEquivalentTo(bytes); }
public virtual void Initialize( ) { Logger = Substitute.For <ILogger> ( ); Device = Substitute.For <IDevice> ( ); Scheduler = Substitute.For <IScheduler> ( ); ProviderFactory = Substitute.For <IGattCharacteristicsProviderFactory> ( ); CharacteristicProvider = Substitute.For <IGattCharacteristicProvider> ( ); RawValueReader = Substitute.For <IRawValueReader> ( ); RawValueWriter = Substitute.For <IRawValueWriter> ( ); ToStringConverter = Substitute.For <ICharacteristicBaseToStringConverter> ( ); DescriptionToUuid = new DescriptionToUuid( ); ServiceWrapper = Substitute.For <IGattDeviceServiceWrapper> ( ); ResultWrapper = Substitute.For <IGattCharacteristicsResultWrapper> ( ); WrappersReadOnly.Add(ServiceWrapper, ResultWrapper); IReadOnlyDictionary <IGattDeviceServiceWrapper, IGattCharacteristicsResultWrapper> gattServices = WrappersReadOnly; Device.GattServices .Returns(gattServices); ProviderFactory.Create(ResultWrapper) .Returns(CharacteristicProvider); CharacteristicWrapper1 = Substitute.For <IGattCharacteristicWrapper> ( ); CharacteristicWrapper2 = Substitute.For <IGattCharacteristicWrapper> ( ); CharacteristicWrapper3 = Substitute.For <IGattCharacteristicWrapper> ( ); CharacteristicWrapper4 = Substitute.For <IGattCharacteristicWrapper> ( ); CharacteristicWrapper5 = Substitute.For <IGattCharacteristicWrapper> ( ); CharacteristicWrapper6 = Substitute.For <IGattCharacteristicWrapper> ( ); CharacteristicWrapper7 = Substitute.For <IGattCharacteristicWrapper> ( ); CharacteristicWrapper8 = Substitute.For <IGattCharacteristicWrapper> ( ); CharacteristicWrapper9 = Substitute.For <IGattCharacteristicWrapper> ( ); CharacteristicWrapper10 = Substitute.For <IGattCharacteristicWrapper> ( ); Wrappers = new Dictionary <string, IGattCharacteristicWrapper> ( ); CharacteristicProvider.Characteristics .Returns(Wrappers); Properties = new Dictionary <string, GattCharacteristicProperties> ( ); CharacteristicProvider.Properties .Returns(Properties); RawValue1 = new byte [] { 1, 2, 3 }; RawValue2 = new byte [] { 4, 5, 6 }; RawValue3 = new byte [] { 7, 8, 9 }; RawValue4 = new byte [] { 10, 11, 12 }; RawValue4 = new byte [] { 13, 14, 15 }; RawValue5 = new byte [] { 16, 17, 18 }; RawValue6 = new byte [] { 19, 20, 21 }; RawValue7 = new byte [] { 22, 23, 24 }; RawValue8 = new byte [] { 25, 25, 27 }; RawValue9 = new byte [] { 28, 29, 30 }; RawValue10 = new byte [] { 31, 32, 33 }; RawValueReader.TryReadValueAsync(CharacteristicWrapper1) .Returns((true, RawValue1)); RawValueReader.TryReadValueAsync(CharacteristicWrapper2) .Returns((true, RawValue2)); RawValueReader.TryReadValueAsync(CharacteristicWrapper3) .Returns((true, RawValue3)); RawValueReader.TryReadValueAsync(CharacteristicWrapper4) .Returns((true, RawValue4)); RawValueReader.TryReadValueAsync(CharacteristicWrapper5) .Returns((true, RawValue5)); RawValueReader.TryReadValueAsync(CharacteristicWrapper6) .Returns((true, RawValue6)); RawValueReader.TryReadValueAsync(CharacteristicWrapper7) .Returns((true, RawValue7)); RawValueReader.TryReadValueAsync(CharacteristicWrapper8) .Returns((true, RawValue8)); RawValueReader.TryReadValueAsync(CharacteristicWrapper9) .Returns((true, RawValue9)); RawValueReader.TryReadValueAsync(CharacteristicWrapper10) .Returns((true, RawValue10)); ToStringConverter.ToString(Arg.Any <CharacteristicBase> ( )) .Returns(ToStringResult); PopulateWrappers( ); AfterInitialize( ); }