Skip to content

Commit 0237db8

Browse files
committed
[Tests] DRY up tests with some helpers
1 parent 28791c4 commit 0237db8

7 files changed

+106
-341
lines changed

__tests__/helpers/testForEach.js

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import inspect from 'object-inspect';
2+
3+
export default function testForEach(t, map, entriesList, predicate) {
4+
t.test('forEach()', (st) => {
5+
const output = [];
6+
let context;
7+
map.forEach((value, key, map) => {
8+
output.push([key, value]);
9+
if (!context) {
10+
context = map;
11+
}
12+
});
13+
14+
for (let i = 0; i < output.length; i++) {
15+
const [obj, values] = output[i];
16+
const found = entriesList.filter((entry) => predicate(obj, entry))[0];
17+
18+
st.ok(found, `\`forEach\` has element: ${inspect(obj)}`);
19+
20+
if (values && found && found[1]) {
21+
st.deepEqual(values, found[1], `\`forEach\` has object elements`);
22+
} else {
23+
st.ok(values && typeof values === 'object', `\`forEach\` has object elements`)
24+
}
25+
}
26+
27+
st.end();
28+
});
29+
}

__tests__/helpers/testIteration.js

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import inspect from 'object-inspect';
2+
3+
export default function testIteration(t, map, entriesList, expectedLength, predicate) {
4+
t.test('iteration', { skip: typeof Symbol === 'undefined' }, (st) => {
5+
st.notEqual(map[Symbol.iterator], undefined, 'has an iterator defined');
6+
st.equal([...map].length, expectedLength, 'has a specific length');
7+
8+
st.test('supports the spread operator', (s2t) => {
9+
[...map].forEach(([obj, values]) => {
10+
const found = entriesList.filter((entry) => predicate(obj, entry))[0];
11+
12+
s2t.ok(found, `spread has element: ${inspect(obj)}`);
13+
if (values && found && found[1]) {
14+
s2t.deepEqual(values, found[1], `spread has object elements`);
15+
} else {
16+
s2t.ok(values && typeof values === 'object', 'spread has object elements')
17+
}
18+
});
19+
20+
s2t.end();
21+
});
22+
23+
st.test('supports the for..of pattern', (s2t) => {
24+
const output = [];
25+
for (const [key, value] of map) {
26+
output.push([key, value]);
27+
}
28+
29+
output.forEach(([obj, values]) => {
30+
const found = entriesList.filter((entry) => predicate(obj, entry))[0];
31+
32+
s2t.ok(found, `for-of has element: ${inspect(obj)}`);
33+
if (values && found && found[1]) {
34+
s2t.deepEqual(values, found[1], `for-of has object elements`);
35+
} else {
36+
s2t.ok(values && typeof values === 'object', 'for-of has object elements')
37+
}
38+
});
39+
40+
s2t.end();
41+
});
42+
43+
st.end();
44+
});
45+
}

__tests__/src/ariaPropsMaps-test.js

+7-68
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import test from 'tape';
22
import deepEqual from 'deep-equal-json';
3-
import inspect from 'object-inspect';
4-
import some from 'array.prototype.some';
53

64
import ariaPropsMap from 'aria-query/src/ariaPropsMap';
75
import rolesMap from 'aria-query/src/rolesMap';
86

7+
import testIteration from '../helpers/testIteration';
8+
import testForEach from '../helpers/testForEach';
9+
910
const entriesList = [
1011
['aria-activedescendant', {'type': 'id'}],
1112
['aria-atomic', {'type': 'boolean'}],
@@ -61,52 +62,11 @@ const entriesList = [
6162
];
6263

6364
test('ariaPropsMap API', (t) => {
64-
t.test('iteration', async (st) => {
65-
st.notEqual(ariaPropsMap[Symbol.iterator], undefined, 'has an iterator defined');
66-
st.equal([...ariaPropsMap].length, 51, 'has a specific length');
67-
68-
st.test('supports the spread operator', async (s2t) => {
69-
[...ariaPropsMap].forEach(([obj, roles]) => {
70-
const found = entriesList.filter(([o]) => deepEqual(o, obj))[0];
71-
72-
s2t.ok(found, `spread has element: ${inspect(obj)}`);
73-
s2t.deepEqual(roles, found[1], `for-of has object elements`);
74-
});
75-
});
76-
77-
st.test('supports the for..of pattern', async (s2t) => {
78-
const output = [];
79-
for (const [key, value] of ariaPropsMap) {
80-
output.push([key, value]);
81-
}
82-
83-
output.forEach(([obj, roles]) => {
84-
const found = entriesList.filter(([o]) => deepEqual(o, obj))[0];
85-
86-
s2t.ok(found, `for-of has element: ${inspect(obj)}`);
87-
s2t.deepEqual(roles, found[1], `for-of has object elements`);
88-
});
89-
});
90-
});
91-
92-
t.test('forEach()', async (st) => {
93-
const output = [];
94-
let context;
95-
ariaPropsMap.forEach((value, key, map) => {
96-
output.push([key, value]);
97-
if (!context) {
98-
context = map;
99-
}
100-
});
65+
const predicate = (obj, [o]) => deepEqual(o, obj);
66+
67+
testIteration(t, ariaPropsMap, entriesList, 51, predicate);
10168

102-
for (let i = 0; i < output.length; i++) {
103-
const [obj, roles] = output[i];
104-
const found = entriesList.filter(([o]) => deepEqual(o, obj))[0];
105-
106-
st.ok(found, `\`forEach\` has element: ${inspect(obj)}`);
107-
st.deepEqual(roles, found[1], `\`forEach\` has object elements`);
108-
}
109-
});
69+
testForEach(t, ariaPropsMap, entriesList, predicate);
11070

11171
t.test('get()', (st) => {
11272
st.notEqual(ariaPropsMap.get('aria-label'), undefined, 'has a defined prop')
@@ -121,27 +81,6 @@ test('ariaPropsMap API', (t) => {
12181

12282
st.end();
12383
});
124-
125-
t.test('keys(), iteration', async (st) => {
126-
const entriesKeys = entriesList.map(entry => entry[0]);
127-
for (const obj of ariaPropsMap.keys()) {
128-
st.ok(entriesKeys.filter((k) => deepEqual(k, obj))[0], `for-of has key: ${inspect(obj)}`);
129-
}
130-
131-
[...ariaPropsMap.keys()].forEach((obj) => {
132-
st.ok(entriesKeys.filter((k) => deepEqual(k, obj))[0], `spread has key: ${inspect(obj)}`);
133-
});
134-
});
135-
136-
t.test('values(), iteration', async (st) => {
137-
for (const values of ariaPropsMap.values()) {
138-
st.ok(some(entriesList, ([, x]) => deepEqual(x, values)), `for-of has object values: ${inspect(values)}`);
139-
}
140-
141-
[...ariaPropsMap.values()].forEach((values) => {
142-
st.ok(some(entriesList, ([, x]) => deepEqual(x, values)), `spread has object values: ${inspect(values)}`);
143-
});
144-
});
14584

14685
t.test('props and role defintions', (st) => {
14786
const usedProps = [];

__tests__/src/domMap-test.js

+6-67
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import test from 'tape';
22
import deepEqual from 'deep-equal-json';
3-
import inspect from 'object-inspect';
4-
import some from 'array.prototype.some';
53

64
import domMap from 'aria-query/src/domMap';
75

6+
import testIteration from '../helpers/testIteration';
7+
import testForEach from '../helpers/testForEach';
8+
89
const entriesList = [
910
["a", {"reserved": false}],
1011
["abbr", {"reserved": false}],
@@ -138,52 +139,11 @@ const entriesList = [
138139
];
139140

140141
test('domMap API', (t) => {
141-
t.test('iteration', async (st) => {
142-
st.notEqual(domMap[Symbol.iterator], undefined, 'has an iterator defined');
143-
st.equal([...domMap].length, 129, 'has a specific length');
144-
145-
st.test('supports the spread operator', async (s2t) => {
146-
[...domMap].forEach(([obj, roles]) => {
147-
const found = entriesList.filter(([o]) => deepEqual(o, obj))[0];
148-
149-
s2t.ok(found, `spread has element: ${inspect(obj)}`);
150-
s2t.deepEqual(roles, found[1], `for-of has object elements`);
151-
});
152-
});
153-
154-
st.test('supports the for..of pattern', async (s2t) => {
155-
const output = [];
156-
for (const [key, value] of domMap) {
157-
output.push([key, value]);
158-
}
142+
const predicate = (obj, [o]) => deepEqual(o, obj);
159143

160-
output.forEach(([obj, roles]) => {
161-
const found = entriesList.filter(([o]) => deepEqual(o, obj))[0];
144+
testIteration(t, domMap, entriesList, 129, predicate);
162145

163-
s2t.ok(found, `for-of has element: ${inspect(obj)}`);
164-
s2t.deepEqual(roles, found[1], `for-of has object elements`);
165-
});
166-
});
167-
});
168-
169-
t.test('forEach()', async (st) => {
170-
const output = [];
171-
let context;
172-
domMap.forEach((value, key, map) => {
173-
output.push([key, value]);
174-
if (!context) {
175-
context = map;
176-
}
177-
});
178-
179-
for (let i = 0; i < output.length; i++) {
180-
const [obj, roles] = output[i];
181-
const found = entriesList.filter(([o]) => deepEqual(o, obj))[0];
182-
183-
st.ok(found, `\`forEach\` has element: ${inspect(obj)}`);
184-
st.deepEqual(roles, found[1], `\`forEach\` has object elements`);
185-
}
186-
});
146+
testForEach(t, domMap, entriesList, predicate);
187147

188148
t.test('get()', (st) => {
189149
st.notEqual(domMap.get('a'), undefined, 'has a defined element')
@@ -199,26 +159,5 @@ test('domMap API', (t) => {
199159
st.end();
200160
});
201161

202-
t.test('keys(), iteration', async (st) => {
203-
const entriesKeys = entriesList.map(entry => entry[0]);
204-
for (const obj of domMap.keys()) {
205-
st.ok(entriesKeys.filter((k) => deepEqual(k, obj))[0], `for-of has key: ${inspect(obj)}`);
206-
}
207-
208-
[...domMap.keys()].forEach((obj) => {
209-
st.ok(entriesKeys.filter((k) => deepEqual(k, obj))[0], `spread has key: ${inspect(obj)}`);
210-
});
211-
});
212-
213-
t.test('values(), iteration', async (st) => {
214-
for (const values of domMap.values()) {
215-
st.ok(some(entriesList, (([, x]) => deepEqual(x, values)), `for-of has object values: ${inspect(values)}`));
216-
}
217-
218-
[...domMap.values()].forEach((values) => {
219-
st.ok(some(entriesList, (([, x]) => deepEqual(x, values)), `spread has object values: ${inspect(values)}`));
220-
});
221-
});
222-
223162
t.end();
224163
});

__tests__/src/elementRoleMap-test.js

+6-72
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import test from 'tape';
22
import deepEqual from 'deep-equal-json';
3-
import inspect from 'object-inspect';
43
import some from 'array.prototype.some';
54

65
import elementRoleMap from 'aria-query/src/elementRoleMap';
76

7+
import testIteration from '../helpers/testIteration';
8+
import testForEach from '../helpers/testForEach';
9+
810
const entriesList = [
911
[{"name": "article"}, ["article"]],
1012
[{"constraints": ["scoped to the body element"], "name": "header"}, ["banner"]],
@@ -127,55 +129,12 @@ const entriesList = [
127129
];
128130

129131
test('elementRoleMap API', (t) => {
130-
t.test('iteration', async (st) => {
131-
st.notEqual(elementRoleMap[Symbol.iterator], undefined, 'has an iterator defined');
132-
st.equal([...elementRoleMap].length, 112, 'has a specific length');
133-
134-
st.test('supports the spread operator', async (s2t) => {
135-
[...elementRoleMap].forEach(([obj, roles]) => {
136-
const found = entriesList.filter(([o]) => deepEqual(o, obj))[0];
137-
138-
s2t.ok(found, `spread has element: ${inspect(obj)}`);
139-
s2t.deepEqual(roles, found[1], `for-of has object elements`);
140-
});
141-
});
142-
143-
st.test('supports the for..of pattern', async (s2t) => {
144-
const output = [];
145-
for (const [key, value] of elementRoleMap) {
146-
output.push([key, value]);
147-
}
148-
149-
output.forEach(([obj, roles]) => {
150-
const found = entriesList.filter(([o]) => deepEqual(o, obj))[0];
132+
const predicate = (obj, [o]) => deepEqual(o, obj);
151133

152-
s2t.ok(found, `for-of has element: ${inspect(obj)}`);
153-
s2t.deepEqual(roles, found[1], `for-of has object elements`);
154-
});
155-
});
156-
});
157-
158-
t.test('forEach()', (st) => {
159-
const output = [];
160-
let context;
161-
elementRoleMap.forEach((value, key, map) => {
162-
output.push([key, value]);
163-
if (!context) {
164-
context = map;
165-
}
166-
});
134+
testIteration(t, elementRoleMap, entriesList, 112, predicate);
167135

168-
for (let i = 0; i < output.length; i++) {
169-
const [obj, roles] = output[i];
170-
const found = entriesList.filter(([o]) => deepEqual(o, obj))[0];
171-
172-
st.ok(found, `\`forEach\` has element: ${inspect(obj)}`);
173-
st.deepEqual(roles, found[1], `\`forEach\` has object elements`);
174-
}
136+
testForEach(t, elementRoleMap, entriesList, predicate);
175137

176-
st.end();
177-
});
178-
179138
t.test('get()', (st) => {
180139
st.ok(some(
181140
elementRoleMap.get({
@@ -236,30 +195,5 @@ test('elementRoleMap API', (t) => {
236195
st.end();
237196
});
238197

239-
t.test('keys(), iteration', (st) => {
240-
const entriesKeys = entriesList.map(entry => entry[0]);
241-
for (const obj of elementRoleMap.keys()) {
242-
st.ok(entriesKeys.filter((k) => deepEqual(k, obj))[0], `for-of has key: ${inspect(obj)}`);
243-
}
244-
245-
[...elementRoleMap.keys()].forEach((obj) => {
246-
st.ok(entriesKeys.filter((k) => deepEqual(k, obj))[0], `spread has key: ${inspect(obj)}`);
247-
});
248-
249-
st.end();
250-
});
251-
252-
t.test('values(), iteration', (st) => {
253-
for (const values of elementRoleMap.values()) {
254-
st.ok(some(entriesList, (([, x]) => deepEqual(x, values)), `for-of has object values: ${inspect(values)}`));
255-
}
256-
257-
[...elementRoleMap.values()].forEach((values) => {
258-
st.ok(some(entriesList, (([, x]) => deepEqual(x, values)), `spread has object values: ${inspect(values)}`));
259-
});
260-
261-
st.end();
262-
});
263-
264198
t.end();
265199
});

0 commit comments

Comments
 (0)