Пример #1
0
        public async Task EveryOtherRequestFailsAsync(int pageSize, int pages)
        {
            var allData    = Enumerable.Range(0, pages * pageSize).ToArray();
            var source     = new DataSource <int>(allData, FailPassSequence);
            var collection = new IncrementalLoadingCollection <DataSource <int>, int>(source, pageSize);

            var requests = new List <Task>();

            var willFail = true;

            for (var submitedRequests = 0; submitedRequests < pages * 2; submitedRequests++)
            {
                if (willFail)
                {
                    requests.Add(Assert.ThrowsExceptionAsync <AggregateException>(collection.LoadMoreItemsAsync(0).AsTask));
                }
                else
                {
                    requests.Add(collection.LoadMoreItemsAsync(0).AsTask().ContinueWith(t => Assert.IsTrue(t.IsCompletedSuccessfully)));
                }

                willFail = !willFail;
            }

            await Task.WhenAll(requests);

            CollectionAssert.AreEqual(allData, collection);
        }
Пример #2
0
        public async Task LoadMoreItemsAsync_LoadsMoreExpectedItemsFromDataSource(uint initialCount, uint count)
        {
            var data       = GetSampleData();
            var dataSource = CreateMockDataSource(data);
            var collection = new IncrementalLoadingCollection <object>(dataSource);

            await collection.LoadMoreItemsAsync(initialCount);

            await collection.LoadMoreItemsAsync(count);

            var expectedData = data.Take((int)(initialCount + count));

            Assert.Equal(expectedData, collection.ToArray());
        }
Пример #3
0
        public async Task LoadMoreItemsAsync_OnlySupportsOneLoadOperationAtOnce()
        {
            var loadingTaskSource = new TaskCompletionSource <IEnumerable <object> >();

            var mockDataSource = CreateMockDataSource(GetSampleData());

            mockDataSource
            .Arrange(dataSource => dataSource.GetItemsAsync(Arg.IsAny <uint>(), Arg.IsAny <uint>()))
            .Returns(loadingTaskSource.Task);

            var collection = new IncrementalLoadingCollection <object>(mockDataSource);

            collection.LoadMoreItemsAsync(1);

            await Assert.ThrowsAsync <InvalidOperationException>(async() => await collection.LoadMoreItemsAsync(1));
        }
Пример #4
0
        public async Task LoadMoreItemsAsync_ReturnsNumberOfItemsLoaded(uint count, uint expectedCount)
        {
            var collection = new IncrementalLoadingCollection <object>(CreateMockDataSource(GetSampleData()));
            var result     = await collection.LoadMoreItemsAsync(count);

            Assert.Equal(expectedCount, result.Count);
        }
Пример #5
0
        public async Task <bool> RefreshAsync()
        {
            try
            {
                if (DataList.IsBusy)
                {
                    return(false);
                }

                PageIndex = DEFAULT_PAGE_INDEX;

                DataList = new IncrementalLoadingCollection <T>(count =>
                {
                    return(GetIncrementalListData(PageIndex++));
                });

                await DataList.LoadMoreItemsAsync(DEFAULT_PER_PAGE);

                return(true);
            }
            catch (Exception e)
            {
                var task = ExceptionHelper.WriteRecordAsync(e, nameof(DataViewModelBase <T>), nameof(RefreshAsync));
                return(false);
            }
        }
Пример #6
0
        public async Task <bool> RefreshAsync()
        {
            try
            {
                if (DataList.IsBusy)
                {
                    return(false);
                }

                PageIndex = DEFAULT_PAGE_INDEX;

                DataList = new IncrementalLoadingCollection <T>(count =>
                {
                    return(GetIncrementalListData(PageIndex++));
                });

                await DataList.LoadMoreItemsAsync(DEFAULT_PER_PAGE);

                return(true);
            }
            catch (Exception e)
            {
                var task = Logger.LogAsync(e);
                return(false);
            }
        }
Пример #7
0
        public async Task FirstRequestFails()
        {
            var source     = new DataSource <int>(AllData, DataSource <int> .ThrowException);
            var collection = new IncrementalLoadingCollection <DataSource <int>, int>(source, PageSize);

            await Assert.ThrowsExceptionAsync <AggregateException>(collection.LoadMoreItemsAsync(0).AsTask);

            Assert.IsTrue(!collection.Any());

            var requests = new List <Task>();

            for (int pageNum = 1; pageNum <= Pages; pageNum++)
            {
                requests.Add(collection.LoadMoreItemsAsync(0).AsTask()
                             .ContinueWith(t => Assert.IsTrue(t.IsCompletedSuccessfully)));
            }

            await Task.WhenAll(requests);

            CollectionAssert.AreEqual(AllData, collection);
        }
Пример #8
0
        public async Task Requests(params int[] pageDelays)
        {
            var source     = new DataSource <int>(AllData, pageDelays.Select(DataSource <int> .MakeDelayOp));
            var collection = new IncrementalLoadingCollection <DataSource <int>, int>(source, PageSize);

            for (int pageNum = 1; pageNum <= Pages; pageNum++)
            {
                await collection.LoadMoreItemsAsync(0);

                CollectionAssert.AreEqual(Enumerable.Range(0, PageSize * pageNum).ToArray(), collection);
            }
        }
Пример #9
0
        public async Task HasMoreItems_ReturnsTrueWhileDataStillInSource(int dataSourceCount, bool expectedHasMoreItems, uint[] countsToLoad)
        {
            var data       = GetSampleData(dataSourceCount);
            var dataSource = CreateMockDataSource(data);
            var collection = new IncrementalLoadingCollection <object>(dataSource);

            foreach (var countToLoad in countsToLoad)
            {
                await collection.LoadMoreItemsAsync(countToLoad);
            }

            Assert.Equal(expectedHasMoreItems, collection.HasMoreItems);
        }
Пример #10
0
        public async Task EveryOtherRequestFails()
        {
            var source     = new DataSource <int>(AllData, FailPassSequence);
            var collection = new IncrementalLoadingCollection <DataSource <int>, int>(source, PageSize);

            var willFail = true;

            for (int submitedRequests = 0; submitedRequests < Pages * 2; submitedRequests++)
            {
                if (willFail)
                {
                    await Assert.ThrowsExceptionAsync <AggregateException>(collection.LoadMoreItemsAsync(0).AsTask);
                }
                else
                {
                    await collection.LoadMoreItemsAsync(0);
                }

                willFail = !willFail;
            }

            CollectionAssert.AreEqual(AllData, collection);
        }
Пример #11
0
        public async Task RequestsAsync(params int[] pageDelays)
        {
            var source     = new DataSource <int>(AllData, pageDelays.Select(DataSource <int> .MakeDelayOp));
            var collection = new IncrementalLoadingCollection <DataSource <int>, int>(source, PageSize);

            var requests = new List <Task>();

            for (int pageNum = 1; pageNum <= Pages; pageNum++)
            {
                requests.Add(collection.LoadMoreItemsAsync(0).AsTask()
                             .ContinueWith(t => Assert.IsTrue(t.IsCompletedSuccessfully)));
            }

            await Task.WhenAll(requests);

            CollectionAssert.AreEqual(AllData, collection);
        }