-
Notifications
You must be signed in to change notification settings - Fork 63
/
end-to-end.test.js
63 lines (51 loc) · 1.99 KB
/
end-to-end.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/* eslint-env jest */
const fs = require('fs')
const path = require('path')
const load = require('load-json-file')
const polygonClipping = require('../main')
/** USE ME TO RUN ONLY ONE TEST **/
const targetOnly = ''
const opOnly = ''
/** USE ME TO SKIP TESTS **/
const targetsSkip = []
const opsSkip = []
const endToEndDir = 'test/end-to-end'
describe('end to end', () => {
const targets = fs.readdirSync(endToEndDir)
targets.forEach(target => {
// ignore dotfiles like .DS_Store
if (target.startsWith('.')) return
describe(target, () => {
const targetDir = path.join(endToEndDir, target)
const argsGeojson = load.sync(path.join(targetDir, 'args.geojson'))
const args = argsGeojson.features.map(f => f.geometry.coordinates)
const resultPathsAndOperationTypes = fs
.readdirSync(targetDir)
.filter(fn => fn !== 'args.geojson' && fn.endsWith('.geojson'))
.map(fn => [fn.slice(0, -'.geojson'.length), path.join(targetDir, fn)])
resultPathsAndOperationTypes.forEach(([operationType, resultPath]) => {
let doTest = test
if (targetsSkip.includes(target)) doTest = test.skip
if (opsSkip.includes(operationType)) doTest = test.skip
if (targetOnly && opOnly) {
if (target === targetOnly && operationType === opOnly) {
doTest = test.only
}
} else if (targetOnly && target === targetOnly) doTest = test.only
else if (opOnly && operationType === opOnly) doTest = test.only
doTest(operationType, () => {
const resultGeojson = load.sync(resultPath)
const expected = resultGeojson.geometry.coordinates
const operation = polygonClipping[operationType]
if (!operation) {
throw new Error(
`Unknown operation '${operationType}'. Mispelling in filename of ${resultPath} ?`
)
}
const result = operation(...args)
expect(result).toEqual(expected)
})
})
})
})
})