mirror of
https://github.com/leporello-js/leporello-js
synced 2026-01-13 13:04:30 -08:00
refactor tests
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
import {tests} from './test.js'
|
import {tests} from './test.js'
|
||||||
import {run} from './utils.js'
|
|
||||||
|
// external
|
||||||
|
import {run} from './run_utils.js'
|
||||||
|
|
||||||
await run(tests)
|
await run(tests)
|
||||||
|
|||||||
58
test/run_utils.js
Normal file
58
test/run_utils.js
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
export const run = tests => {
|
||||||
|
// Runs test, return failure or null if not failed
|
||||||
|
const run_test = t => {
|
||||||
|
return Promise.resolve().then(t.test)
|
||||||
|
.then(() => null)
|
||||||
|
.catch(e => {
|
||||||
|
if(globalThis.process != null) {
|
||||||
|
// In node.js runner, fail fast
|
||||||
|
console.error('Failed: ' + t.message)
|
||||||
|
throw e
|
||||||
|
} else {
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// If not run in node, then dont apply filter
|
||||||
|
const filter = globalThis.process && globalThis.process.argv[2]
|
||||||
|
|
||||||
|
if(filter == null) {
|
||||||
|
|
||||||
|
const only = tests.find(t => t.only)
|
||||||
|
const tests_to_run = only == null ? tests : [only]
|
||||||
|
|
||||||
|
// Exec each test. After all tests are done, we rethrow first error if
|
||||||
|
// any. So we will mark root calltree node if one of tests failed
|
||||||
|
return tests_to_run.reduce(
|
||||||
|
(failureP, t) =>
|
||||||
|
Promise.resolve(failureP).then(failure =>
|
||||||
|
run_test(t).then(next_failure => failure ?? next_failure)
|
||||||
|
)
|
||||||
|
,
|
||||||
|
null
|
||||||
|
).then(failure => {
|
||||||
|
|
||||||
|
if(failure != null) {
|
||||||
|
throw failure
|
||||||
|
} else {
|
||||||
|
if(globalThis.process != null) {
|
||||||
|
console.log('Ok')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
} else {
|
||||||
|
const test = tests.find(t => t.message.includes(filter))
|
||||||
|
if(test == null) {
|
||||||
|
throw new Error('test not found')
|
||||||
|
} else {
|
||||||
|
return run_test(test).then(() => {
|
||||||
|
if(globalThis.process != null) {
|
||||||
|
console.log('Ok')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -234,66 +234,3 @@ export const test = (message, test, only = false) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const test_only = (message, t) => test(message, t, true)
|
export const test_only = (message, t) => test(message, t, true)
|
||||||
|
|
||||||
// Wrap to Function constructor to hide from calltree view
|
|
||||||
// TODO in calltree view, hide fn which has special flag set (see
|
|
||||||
// filter_calltree)
|
|
||||||
|
|
||||||
export const run = Object.defineProperty(new Function('tests', `
|
|
||||||
// Runs test, return failure or null if not failed
|
|
||||||
const run_test = t => {
|
|
||||||
return Promise.resolve().then(t.test)
|
|
||||||
.then(() => null)
|
|
||||||
.catch(e => {
|
|
||||||
if(globalThis.process != null) {
|
|
||||||
// In node.js runner, fail fast
|
|
||||||
console.error('Failed: ' + t.message)
|
|
||||||
throw e
|
|
||||||
} else {
|
|
||||||
return e
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// If not run in node, then dont apply filter
|
|
||||||
const filter = globalThis.process && globalThis.process.argv[2]
|
|
||||||
|
|
||||||
if(filter == null) {
|
|
||||||
|
|
||||||
const only = tests.find(t => t.only)
|
|
||||||
const tests_to_run = only == null ? tests : [only]
|
|
||||||
|
|
||||||
// Exec each test. After all tests are done, we rethrow first error if
|
|
||||||
// any. So we will mark root calltree node if one of tests failed
|
|
||||||
return tests_to_run.reduce(
|
|
||||||
(failureP, t) =>
|
|
||||||
Promise.resolve(failureP).then(failure =>
|
|
||||||
run_test(t).then(next_failure => failure ?? next_failure)
|
|
||||||
)
|
|
||||||
,
|
|
||||||
null
|
|
||||||
).then(failure => {
|
|
||||||
|
|
||||||
if(failure != null) {
|
|
||||||
throw failure
|
|
||||||
} else {
|
|
||||||
if(globalThis.process != null) {
|
|
||||||
console.log('Ok')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
} else {
|
|
||||||
const test = tests.find(t => t.message.includes(filter))
|
|
||||||
if(test == null) {
|
|
||||||
throw new Error('test not found')
|
|
||||||
} else {
|
|
||||||
return run_test(test).then(() => {
|
|
||||||
if(globalThis.process != null) {
|
|
||||||
console.log('Ok')
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`), 'name', {value: 'run'})
|
|
||||||
|
|||||||
Reference in New Issue
Block a user