예제 #1
0
        public void ReadAsync_ShouldReturnRequestedValues_ForLiveChannel_WithSampleRange_UsingValidSampleRange()
        {
            // Arrange.
            var collection       = new Int32[] { 3, 4, 5, 6, 7 };
            var target           = new ObjectCollectionChannel <Int32>(collection);
            var index            = 2;
            var lookBehindLength = 2;
            var lookAheadLength  = 2;

            // Act.
            var task = target.ReadAsync(index, lookBehindLength, lookAheadLength);

            task.Wait();
            var result = task.Result;

            // Assert.
            result.UnitOfOutput.ChannelReadIndex.Should().Be(index);
            result.UnitOfOutput.Value.Should().Be(collection[index]);
            result.LookBehindRange.Should().HaveCount(lookBehindLength);
            result.LookBehindRange[0].ChannelReadIndex.Should().Be(0);
            result.LookBehindRange[0].Value.Should().Be(3);
            result.LookBehindRange[1].ChannelReadIndex.Should().Be(1);
            result.LookBehindRange[1].Value.Should().Be(4);
            result.LookAheadRange.Should().HaveCount(lookAheadLength);
            result.LookAheadRange[0].ChannelReadIndex.Should().Be(3);
            result.LookAheadRange[0].Value.Should().Be(6);
            result.LookAheadRange[1].ChannelReadIndex.Should().Be(4);
            result.LookAheadRange[1].Value.Should().Be(7);
        }
예제 #2
0
        public void ReadAsync_ShouldRaiseArgumentOutOfRangeException_ForLiveChannel_WithoutSampleRange_UsingRaiseExceptionBehavior_UsingOutOfRangeIndex()
        {
            // Arrange.
            var collection          = new Int32[] { 3, 4, 5, 6, 7 };
            var invalidReadBehavior = InvalidReadBehavior.RaiseException;
            var target = new ObjectCollectionChannel <Int32>(collection, invalidReadBehavior);
            var index  = 5;

            // Act.
            var action = new Action(() =>
            {
                try
                {
                    var task = target.ReadAsync(index);
                    task.Wait();
                }
                catch (AggregateException exception)
                {
                    throw exception.Flatten().InnerException;
                }
            });

            // Assert.
            action.Should().Throw <ArgumentOutOfRangeException>();
        }
예제 #3
0
        public void OutputType_ShouldReflectChannelOutputType()
        {
            // Arrange.
            var collection = new Int32[] { 3, 4, 5, 6, 7 };
            var target     = new ObjectCollectionChannel <Int32>(collection);

            // Act.
            var result = target.OutputType;

            // Assert.
            result.Should().Be(typeof(Int32));
        }
예제 #4
0
        public void Indexer_ShouldReturnRequestedValue_ForLiveChannel_UsingValidIndex()
        {
            // Arrange.
            var collection = new Int32[] { 3, 4, 5, 6, 7 };
            var target     = new ObjectCollectionChannel <Int32>(collection);
            var index      = 2;

            // Act.
            var result = target[index];

            // Assert.
            result.Should().Be(collection[index]);
        }
예제 #5
0
        public void Indexer_ShouldReturnDefaultValue_UsingReadSilenceBehavior_UsingOutOfRangeIndex()
        {
            // Arrange.
            var collection          = new Int32[] { 3, 4, 5, 6, 7 };
            var invalidReadBehavior = InvalidReadBehavior.ReadSilence;
            var target = new ObjectCollectionChannel <Int32>(collection, invalidReadBehavior);
            var index  = 5;

            // Act.
            var result = target[index];

            // Assert.
            result.Should().Be(default(Int32));
        }
예제 #6
0
        public void ReadSilence_ShouldReturnDefaultValue()
        {
            // Arrange.
            var collection = new Int32[] { 3, 4, 5, 6, 7 };
            var target     = new ObjectCollectionChannel <Int32>(collection);
            var index      = 2;

            // Act.
            var result = target.ReadSilence(index);

            // Assert.
            result.ChannelReadIndex.Should().Be(index);
            result.Value.Should().Be(default(Int32));
        }
예제 #7
0
        public void Indexer_ShouldReturnDefaultValue_ForSilentChannel_UsingValidIndex()
        {
            // Arrange.
            var collection = new Int32[] { 3, 4, 5, 6, 7 };
            var target     = new ObjectCollectionChannel <Int32>(collection);
            var index      = 2;

            target.Toggle();

            // Act.
            var result = target[index];

            // Assert.
            result.Should().Be(default(Int32));
        }
예제 #8
0
        public void ReadAsync_ShouldReturnRequestedValue_ForLiveChannel_WithoutSampleRange_UsingValidIndex()
        {
            // Arrange.
            var collection = new Int32[] { 3, 4, 5, 6, 7 };
            var target     = new ObjectCollectionChannel <Int32>(collection);
            var index      = 2;

            // Act.
            var task = target.ReadAsync(index);

            task.Wait();
            var result = task.Result;

            // Assert.
            result.ChannelReadIndex.Should().Be(index);
            result.Value.Should().Be(collection[index]);
        }
예제 #9
0
        public void Indexer_ShouldRaiseIndexOutOfRangeException_UsingRaiseExceptionBehavior_UsingOutOfRangeIndex()
        {
            // Arrange.
            var collection          = new Int32[] { 3, 4, 5, 6, 7 };
            var invalidReadBehavior = InvalidReadBehavior.RaiseException;
            var target = new ObjectCollectionChannel <Int32>(collection, invalidReadBehavior);
            var index  = 5;

            // Act.
            var action = new Action(() =>
            {
                var result = target[index];
            });

            // Assert.
            action.Should().Throw <IndexOutOfRangeException>();
        }
예제 #10
0
        public void ReadAsync_ShouldReturnDefaultValue_ForLiveChannel_WithoutSampleRange_UsingReadSilenceBehavior_UsingOutOfRangeIndex()
        {
            // Arrange.
            var collection          = new Int32[] { 3, 4, 5, 6, 7 };
            var invalidReadBehavior = InvalidReadBehavior.ReadSilence;
            var target = new ObjectCollectionChannel <Int32>(collection, invalidReadBehavior);
            var index  = 5;

            // Act.
            var task = target.ReadAsync(index);

            task.Wait();
            var result = task.Result;

            // Assert.
            result.ChannelReadIndex.Should().Be(index);
            result.Value.Should().Be(default(Int32));
        }
예제 #11
0
        public void ReadAsync_ShouldReturnDefaultValue_ForSilentChannel_WithoutSampleRange_UsingValidIndex()
        {
            // Arrange.
            var collection = new Int32[] { 3, 4, 5, 6, 7 };
            var target     = new ObjectCollectionChannel <Int32>(collection);
            var index      = 2;

            target.Toggle();

            // Act.
            var task = target.ReadAsync(index);

            task.Wait();
            var result = task.Result;

            // Assert.
            result.ChannelReadIndex.Should().Be(index);
            result.Value.Should().Be(default(Int32));
        }
예제 #12
0
        public void ReadAsync_ShouldReturnDefaultValue_ForLiveChannel_WithSampleRange_UsingReadSilenceBehavior_UsingOutOfRangeSample()
        {
            // Arrange.
            var collection          = new Int32[] { 3, 4, 5, 6, 7 };
            var invalidReadBehavior = InvalidReadBehavior.ReadSilence;
            var target           = new ObjectCollectionChannel <Int32>(collection, invalidReadBehavior);
            var index            = 2;
            var lookBehindLength = 1;
            var lookAheadLength  = 3;

            // Act.
            var task = target.ReadAsync(index, lookBehindLength, lookAheadLength);

            task.Wait();
            var result = task.Result;

            // Assert.
            result.UnitOfOutput.ChannelReadIndex.Should().Be(index);
            result.UnitOfOutput.Value.Should().Be(default(Int32));
            result.LookBehindRange.Should().HaveCount(0);
            result.LookAheadRange.Should().HaveCount(0);
        }
예제 #13
0
        public void ReadAsync_ShouldReturnDefaultValues_ForSilentChannel_WithSampleRange_UsingValidSampleRange()
        {
            // Arrange.
            var collection       = new Int32[] { 3, 4, 5, 6, 7 };
            var target           = new ObjectCollectionChannel <Int32>(collection);
            var index            = 2;
            var lookBehindLength = 2;
            var lookAheadLength  = 2;

            target.Toggle();

            // Act.
            var task = target.ReadAsync(index, lookBehindLength, lookAheadLength);

            task.Wait();
            var result = task.Result;

            // Assert.
            result.UnitOfOutput.ChannelReadIndex.Should().Be(index);
            result.UnitOfOutput.Value.Should().Be(default(Int32));
            result.LookBehindRange.Should().HaveCount(0);
            result.LookAheadRange.Should().HaveCount(0);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="SimulatedChannelCollection" /> class.
 /// </summary>
 /// <param name="channelA">
 /// The first channel in the collection.
 /// </param>
 /// <param name="channelB">
 /// The second channel in the collection.
 /// </param>
 /// <exception cref="ArgumentNullException">
 /// One or more of the specified channels is <see langword="null" />.
 /// </exception>
 public SimulatedChannelCollection(ObjectCollectionChannel <Int32> channelA, ObjectCollectionChannel <Int32> channelB)
     : base(channelA, channelB)
 {
     return;
 }