コード例 #1
0
        public async Task BuildingCollectionWith6969Elements_Reset_SwitchedCountFetchingCountAdjusted(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            bool switched = false;

            int CountFetcher() =>
            switched
                    ? 9
                    : 6969;

            using var collection = SlidingWindowFactory.CreateCollectionWithCustomCountFetcher(
                      pageLoadingBehavior,
                      pageRemovalBehavior,
                      fetchersKind,
                      indexAccessBehavior,
                      CountFetcher,
                      10,
                      10,
                      69);

            await collection.InitializationCompleted;

            var _ = collection[0];
            await Task.Delay(50);

            switched = true;

            // Act
            collection.Reset();
            await Task.Delay(50);

            var __ = collection[0];
            await Task.Delay(50);

            // Assert
            Assert.Equal(0, collection[0]);
            Assert.Equal(9, collection.Count);
        }
コード例 #2
0
        internal static IDataVirtualizingCollection <int> CreateCollectionWithIncrementalIntegerWhereFetchersIgnorePageSize(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior,
            int count,
            int pageSize,
            IScheduler scheduler)
        {
            var pageLoadingBehaviorCollectionBuilder = DataVirtualizingCollectionBuilder.Build <int>(
                pageSize,
                new EventLoopScheduler(),
                scheduler);
            var pageHoldingBehaviorCollectionBuilder =
                StandardPageHoldingBehaviorCollectionBuilder(
                    pageLoadingBehaviorCollectionBuilder,
                    pageLoadingBehavior,
                    (_, __) => - 1);
            var fetchersKindCollectionBuilder =
                StandardFetcherKindCollectionBuilder(
                    pageHoldingBehaviorCollectionBuilder,
                    pageRemovalBehavior,
                    10,
                    1);
            var indexAccessBehaviorCollectionBuilder =
                StandardIndexAccessBehaviorCollectionBuilder(
                    fetchersKindCollectionBuilder,
                    fetchersKind,
                    (offset, pSize) =>
                    Enumerable
                    .Range(offset, pageSize)         // <--- This is different! pageSize instead of pSize!
                    .ToArray(),
                    () => count);

            var dataVirtualizingCollection =
                StandardDataVirtualizingCollection(
                    indexAccessBehaviorCollectionBuilder,
                    indexAccessBehavior,
                    () => - 1);

            return(dataVirtualizingCollection);
        }
コード例 #3
0
        public void BuildingCollectionWith6969Elements_6001thEntry_6000(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            using var collection = SlidingWindowFactory.CreateCollectionWithIncrementalInteger(
                      pageLoadingBehavior,
                      pageRemovalBehavior,
                      fetchersKind,
                      indexAccessBehavior,
                      6969,
                      100,
                      10,
                      6000);

            // Act + Assert
            Assert.Equal(6000, collection[0]);
        }
コード例 #4
0
        public void BuildingCollectionWherePageFetcherIgnoresGivenPageSize23_70thEntry_69(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            using var collection = SlidingWindowFactory.CreateCollectionWithIncrementalIntegerWhereFetchersIgnorePageSize(
                      pageLoadingBehavior,
                      pageRemovalBehavior,
                      fetchersKind,
                      indexAccessBehavior,
                      6969,
                      23,
                      10,
                      60);

            // Act + Assert
            Assert.Equal(69, collection[9]);
        }
コード例 #5
0
        public void BuildingCollectionWith6969Elements_MinusFirstEntry_ThrowsIndexOutOfRangeException(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            using var collection = SlidingWindowFactory.CreateCollectionWithIncrementalInteger(
                      pageLoadingBehavior,
                      pageRemovalBehavior,
                      fetchersKind,
                      indexAccessBehavior,
                      6969,
                      100,
                      10,
                      6959);

            // Act + Assert
            Assert.Throws <IndexOutOfRangeException>(() => collection[-1]);
        }
コード例 #6
0
        public async Task BuildingCollectionWith6969Elements_MinusFirstEntry_ThrowsIndexOutOfRangeException(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            using var collection = DataVirtualizingCollectionFactory.CreateCollectionWithIncrementalInteger(
                      pageLoadingBehavior,
                      pageRemovalBehavior,
                      fetchersKind,
                      indexAccessBehavior,
                      6969,
                      100);

            await collection.InitializationCompleted;

            // Act + Assert
            Assert.Throws <IndexOutOfRangeException>(() => collection[-1]);
        }
コード例 #7
0
        internal static IDataVirtualizingCollection <T> CreateCollectionWithCustomPageFetchingLogic <T>(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior,
            int count,
            int pageSize,
            Func <int, int, T[]> pageFetchingLogic,
            T placeholder,
            IScheduler scheduler)
        {
            var pageLoadingBehaviorCollectionBuilder = DataVirtualizingCollectionBuilder.Build <T>(
                pageSize,
                new EventLoopScheduler(),
                scheduler);
            var pageHoldingBehaviorCollectionBuilder =
                StandardPageHoldingBehaviorCollectionBuilder(
                    pageLoadingBehaviorCollectionBuilder,
                    pageLoadingBehavior,
                    (_, __) => placeholder);
            var fetchersKindCollectionBuilder =
                StandardFetcherKindCollectionBuilder(
                    pageHoldingBehaviorCollectionBuilder,
                    pageRemovalBehavior,
                    10,
                    1);
            var indexAccessBehaviorCollectionBuilder =
                StandardIndexAccessBehaviorCollectionBuilder(
                    fetchersKindCollectionBuilder,
                    fetchersKind,
                    pageFetchingLogic,
                    () => count);

            var dataVirtualizingCollection =
                StandardDataVirtualizingCollection(
                    indexAccessBehaviorCollectionBuilder,
                    indexAccessBehavior,
                    () => placeholder);

            return(dataVirtualizingCollection);
        }
コード例 #8
0
        public async Task BuildingCollectionWith6969Elements_6001thEntry_6000(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            var scheduler = new TestScheduler();

            await using var collection = DataVirtualizingCollectionFactory.CreateCollectionWithIncrementalInteger(
                            pageLoadingBehavior,
                            pageRemovalBehavior,
                            fetchersKind,
                            indexAccessBehavior,
                            6969,
                            100,
                            scheduler);

            // Act + Assert
            Assert.Equal(6000, collection[6000]);
        }
コード例 #9
0
        public async Task BuildingCollectionWherePageFetcherIgnoresGivenPageSize23_70thEntry_69(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            var scheduler = new TestScheduler();

            await using var collection = DataVirtualizingCollectionFactory.CreateCollectionWithIncrementalIntegerWhereFetchersIgnorePageSize(
                            pageLoadingBehavior,
                            pageRemovalBehavior,
                            fetchersKind,
                            indexAccessBehavior,
                            6969,
                            23,
                            scheduler);

            // Act + Assert
            Assert.Equal(69, collection[69]);
        }
コード例 #10
0
        public async Task BuildingCollectionWith6969Elements_6970thEntry_ThrowsIndexOutOfRangeException(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            var scheduler = new TestScheduler();

            await using var collection = DataVirtualizingCollectionFactory.CreateCollectionWithIncrementalInteger(
                            pageLoadingBehavior,
                            pageRemovalBehavior,
                            fetchersKind,
                            indexAccessBehavior,
                            6969,
                            100,
                            scheduler);

            // Act + Assert
            Assert.Throws <IndexOutOfRangeException>(() => collection[6969]);
        }
コード例 #11
0
        public async Task With6969ElementsAndPageSize1000_GetAnElementFromEachPage_NoneDisposed(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            var scheduler = new TestScheduler();
            var set       = new ConcurrentBag <int>();

            await using var collection = DataVirtualizingCollectionFactory.CreateCollectionWithCustomPageFetchingLogic(
                            pageLoadingBehavior,
                            pageRemovalBehavior,
                            fetchersKind,
                            indexAccessBehavior,
                            6969,
                            10,
                            (offset, pSize) =>
                            Enumerable
                            .Range(offset, pSize)
                            .Select(i => Disposable.Create(() => set.Add(i)))
                            .ToArray(),
                            Disposable.Empty,
                            scheduler);

            scheduler.AdvanceBy(20);
            Assert.True(collection.InitializationCompleted.IsCompletedSuccessfully);

            // Act
            for (var i = 0; i <= 6900; i += 100)
            {
                var _ = collection[i];
            }
            await Task.Delay(TimeSpan.FromMilliseconds(50)).ConfigureAwait(false);

            scheduler.AdvanceBy(20);

            // Assert
            Assert.Empty(set);
        }
コード例 #12
0
        public async Task BuildingCollectionWith6969Elements_Reset_SwitchedPageFetching(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            var  scheduler = new TestScheduler();
            bool switched  = false;

            int[] PageFetcher(int offset, int size) =>
            switched
                    ? Enumerable.Range(offset + 1, size).ToArray()
                    : Enumerable.Range(offset, size).ToArray();

            await using var collection = SlidingWindowFactory.CreateCollectionWithCustomPageFetchingLogic(
                            pageLoadingBehavior,
                            pageRemovalBehavior,
                            fetchersKind,
                            indexAccessBehavior,
                            6969,
                            10,
                            10,
                            69,
                            PageFetcher,
                            -1,
                            scheduler);

            var previous = collection[0];

            switched = true;

            // Act
            collection.Reset();

            // Assert
            Assert.Equal(69, previous);
            Assert.Equal(70, collection[0]);
        }
コード例 #13
0
        public async Task BuildingCollectionWith6969Elements_Reset_SwitchedCountFetchingCountAdjusted(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            var  scheduler = new TestScheduler();
            bool switched  = false;

            int CountFetcher() =>
            switched
                    ? 9
                    : 6969;

            await using var collection = SlidingWindowFactory.CreateCollectionWithCustomCountFetcher(
                            pageLoadingBehavior,
                            pageRemovalBehavior,
                            fetchersKind,
                            indexAccessBehavior,
                            CountFetcher,
                            10,
                            10,
                            69,
                            scheduler);

            var previous = collection[0];

            switched = true;

            // Act
            collection.Reset();

            // Assert
            Assert.Equal(69, previous);
            Assert.Equal(0, collection[0]);
            Assert.Equal(9, collection.Count);
        }
コード例 #14
0
        public async Task BuildingCollectionWith6969Elements_124thEntry_123(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            var scheduler = new TestScheduler();

            await using var collection = SlidingWindowFactory.CreateCollectionWithIncrementalInteger(
                            pageLoadingBehavior,
                            pageRemovalBehavior,
                            fetchersKind,
                            indexAccessBehavior,
                            6969,
                            100,
                            10,
                            120,
                            scheduler);

            // Act + Assert
            Assert.Equal(123, collection[3]);
        }
コード例 #15
0
        public void BuildingCollectionWith6969Elements_Offset69SlidingRight_Offset70(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            using var collection = SlidingWindowFactory.CreateCollectionWithIncrementalInteger(
                      pageLoadingBehavior,
                      pageRemovalBehavior,
                      fetchersKind,
                      indexAccessBehavior,
                      6969,
                      20,
                      10,
                      69);

            // Act
            collection.SlideRight();

            // Assert
            Assert.Equal(70, collection[0]);
        }
コード例 #16
0
        public void BuildingCollectionWith6969Elements_Reset_NothingChanged(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            using var collection = SlidingWindowFactory.CreateCollectionWithIncrementalInteger(
                      pageLoadingBehavior,
                      pageRemovalBehavior,
                      fetchersKind,
                      indexAccessBehavior,
                      6969,
                      10,
                      10,
                      69);

            // Act
            collection.Reset();

            // Assert
            Assert.Equal(69, collection[0]);
        }
コード例 #17
0
        public async Task With69ElementsAndPageSize10_GetAnElementFromEachPageDisposeCollection_AllDisposed(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            const int expected   = 69;
            var       set        = new ConcurrentBag <int>();
            var       collection = DataVirtualizingCollectionFactory.CreateCollectionWithCustomPageFetchingLogic(
                pageLoadingBehavior,
                pageRemovalBehavior,
                fetchersKind,
                indexAccessBehavior,
                expected,
                10,
                (offset, pSize) =>
                Enumerable
                .Range(offset, pSize)
                .Select(i => Disposable.Create(() => set.Add(i)))
                .ToArray(),
                Disposable.Empty);

            await collection.InitializationCompleted;

            // Act
            for (var i = 0; i <= expected; i += 10)
            {
                var _ = collection[i];
                await Task.Delay(50);
            }
            collection.Dispose();
            await Task.Delay(50);

            // Assert
            Assert.Equal(expected, set.Count);
        }
コード例 #18
0
        public async Task BuildingCollectionWith6969Elements_MinusFirstEntry_ThrowsIndexOutOfRangeException(
            PageLoadingBehavior pageLoadingBehavior,
            PageRemovalBehavior pageRemovalBehavior,
            FetchersKind fetchersKind,
            IndexAccessBehavior indexAccessBehavior)
        {
            // Arrange
            var scheduler = new TestScheduler();

            await using var collection = DataVirtualizingCollectionFactory.CreateCollectionWithIncrementalInteger(
                            pageLoadingBehavior,
                            pageRemovalBehavior,
                            fetchersKind,
                            indexAccessBehavior,
                            6969,
                            100,
                            scheduler);

            scheduler.AdvanceBy(20);
            Assert.True(collection.InitializationCompleted.IsCompletedSuccessfully);

            // Act + Assert
            Assert.Throws <IndexOutOfRangeException>(() => collection[-1]);
        }