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); }
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()); }
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)); }
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); }
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); } }
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); } }
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); }
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); } }
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); }
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); }
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); }