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);
        }
Esempio n. 6
0
        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( );
        }