Skip to content

Commit aee6479

Browse files
tanderson-ldTodd Anderson
andauthored
feat: CompositeDataSource blacklists DataSources that report unrecoverable error (#826)
**Requirements** - [x] I have added test coverage for new or changed functionality - [x] I have followed the repository's [pull request submission guidelines](../blob/main/CONTRIBUTING.md#submitting-pull-requests) - [ ] I have validated my changes against all supported platform versions To be done on target branch. --------- Co-authored-by: Todd Anderson <[email protected]>
1 parent c1089a5 commit aee6479

File tree

14 files changed

+707
-200
lines changed

14 files changed

+707
-200
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
import { DataSourceList } from '../../src/datasource/dataSourceList';
2+
3+
it('replace is well behaved', async () => {
4+
const underTest = new DataSourceList(true, [1, 2, 3]);
5+
expect(underTest.next()).toEqual(1);
6+
expect(underTest.next()).toEqual(2);
7+
underTest.replace([4, 5, 6]);
8+
expect(underTest.next()).toEqual(4);
9+
expect(underTest.next()).toEqual(5);
10+
expect(underTest.next()).toEqual(6);
11+
expect(underTest.next()).toEqual(4);
12+
expect(underTest.next()).toEqual(5);
13+
});
14+
15+
it('it cycles correctly after replacing non-empty list', async () => {
16+
const underTest = new DataSourceList(true, [1, 2, 3]);
17+
expect(underTest.next()).toEqual(1);
18+
expect(underTest.next()).toEqual(2);
19+
expect(underTest.next()).toEqual(3);
20+
21+
underTest.remove(1);
22+
expect(underTest.next()).toEqual(2);
23+
expect(underTest.next()).toEqual(3);
24+
expect(underTest.next()).toEqual(2);
25+
expect(underTest.next()).toEqual(3);
26+
27+
underTest.remove(3);
28+
expect(underTest.next()).toEqual(2);
29+
expect(underTest.next()).toEqual(2);
30+
31+
underTest.remove(2);
32+
expect(underTest.next()).toBeUndefined();
33+
expect(underTest.next()).toBeUndefined();
34+
expect(underTest.next()).toBeUndefined();
35+
36+
underTest.replace([4, 5, 6]);
37+
38+
expect(underTest.next()).toEqual(4);
39+
expect(underTest.next()).toEqual(5);
40+
expect(underTest.next()).toEqual(6);
41+
42+
underTest.remove(4);
43+
expect(underTest.next()).toEqual(5);
44+
expect(underTest.next()).toEqual(6);
45+
expect(underTest.next()).toEqual(5);
46+
expect(underTest.next()).toEqual(6);
47+
48+
underTest.remove(6);
49+
expect(underTest.next()).toEqual(5);
50+
expect(underTest.next()).toEqual(5);
51+
52+
underTest.remove(5);
53+
expect(underTest.next()).toBeUndefined();
54+
expect(underTest.next()).toBeUndefined();
55+
});
56+
57+
it('cycles correctly after replacing empty list', async () => {
58+
const underTest = new DataSourceList<number>(true, []);
59+
60+
underTest.replace([1, 2, 3]);
61+
62+
expect(underTest.next()).toEqual(1);
63+
expect(underTest.next()).toEqual(2);
64+
expect(underTest.next()).toEqual(3);
65+
66+
underTest.remove(1);
67+
expect(underTest.next()).toEqual(2);
68+
expect(underTest.next()).toEqual(3);
69+
expect(underTest.next()).toEqual(2);
70+
expect(underTest.next()).toEqual(3);
71+
72+
underTest.remove(3);
73+
expect(underTest.next()).toEqual(2);
74+
expect(underTest.next()).toEqual(2);
75+
76+
underTest.remove(2);
77+
expect(underTest.next()).toBeUndefined();
78+
expect(underTest.next()).toBeUndefined();
79+
});
80+
81+
it('removing head is well behaved at start', async () => {
82+
const underTest = new DataSourceList(true, [1, 2, 3]);
83+
// head is now pointing to 1
84+
underTest.remove(1);
85+
expect(underTest.next()).toEqual(2);
86+
expect(underTest.next()).toEqual(3);
87+
expect(underTest.next()).toEqual(2);
88+
});
89+
90+
it('removing head is well behaved in middle', async () => {
91+
const underTest = new DataSourceList(true, [1, 2, 3]);
92+
expect(underTest.next()).toEqual(1);
93+
// head is now pointing to 2
94+
underTest.remove(2);
95+
expect(underTest.next()).toEqual(3);
96+
expect(underTest.next()).toEqual(1);
97+
expect(underTest.next()).toEqual(3);
98+
});
99+
100+
it('removing head is well behaved at end', async () => {
101+
const underTest = new DataSourceList(true, [1, 2, 3]);
102+
expect(underTest.next()).toEqual(1);
103+
expect(underTest.next()).toEqual(2);
104+
// head is now pointing to 3
105+
underTest.remove(3);
106+
expect(underTest.next()).toEqual(1);
107+
expect(underTest.next()).toEqual(2);
108+
expect(underTest.next()).toEqual(1);
109+
});
110+
111+
it('removing existing returns true', async () => {
112+
const underTest = new DataSourceList<number>(true, [1]);
113+
expect(underTest.remove(1)).toEqual(true);
114+
expect(underTest.next()).toBeUndefined();
115+
});
116+
117+
it('removing nonexistent returns false', async () => {
118+
const underTest = new DataSourceList<number>(true, []);
119+
expect(underTest.remove(1)).toEqual(false);
120+
expect(underTest.next()).toBeUndefined();
121+
});
122+
123+
it('single element removed and next called', async () => {
124+
const underTest = new DataSourceList<number>(true, [1]);
125+
expect(underTest.remove(1)).toEqual(true);
126+
expect(underTest.next()).toBeUndefined();
127+
});

0 commit comments

Comments
 (0)