mirror of
https://github.com/vale981/tridactyl
synced 2025-03-10 12:46:38 -04:00

- Add and build grammars - Add to content.ts for interactive use - Add tests - Change bracketExpr parser - Improve comments - Apply prettier
60 lines
2 KiB
TypeScript
60 lines
2 KiB
TypeScript
// TODO: There's no reason to wrap the ans.
|
|
function wrapPrimitives(testcases) {
|
|
// Wrap all args and answers in arrays if they're not already
|
|
return testcases.map(argOrAns => {
|
|
if (argOrAns instanceof Array) return argOrAns
|
|
else return [argOrAns]
|
|
})
|
|
}
|
|
|
|
/** Test each case in testcases.
|
|
|
|
Warning: if your function really accepts an array, that array must be
|
|
double wrapped
|
|
*/
|
|
export function testAll(toTest, testcases) {
|
|
testcases = testcases.map(wrapPrimitives)
|
|
for (let [args, ans] of testcases) {
|
|
test(`${toTest.name}(${args}) == ${JSON.stringify(ans)}`, () =>
|
|
expect(
|
|
(() => {
|
|
let result = toTest(...args)
|
|
if (result instanceof Array) return result
|
|
else return [result]
|
|
})(),
|
|
).toEqual(expect.arrayContaining(ans)))
|
|
}
|
|
}
|
|
|
|
/** Test each case in testcases against an arbitrary expectAttr and eval'd Arg
|
|
|
|
For eval:
|
|
- `ans` is an array containing the result of the function
|
|
- `args` is an array of input arguments to the function
|
|
- `toTest` is the function you gave as input
|
|
*/
|
|
export function testAllCustom(toTest, testcases, expectAttr, expectArg) {
|
|
testcases = testcases.map(wrapPrimitives)
|
|
for (let [args, ans] of testcases) {
|
|
test(`${toTest.name}(${args}) == ${JSON.stringify(ans)}`, () =>
|
|
expect(
|
|
(() => {
|
|
let result = toTest(...args)
|
|
if (result instanceof Array) return result
|
|
else return [result]
|
|
})(),
|
|
)[expectAttr](eval(expectArg)))
|
|
}
|
|
}
|
|
|
|
/** Call function with each testcase and check it doesn't throw */
|
|
export function testAllNoError(toTest, testcases) {
|
|
for (let args of wrapPrimitives(testcases)) {
|
|
test(`try: ${toTest.name}(${args})`, () =>
|
|
expect(() => toTest(...args)).not.toThrow())
|
|
}
|
|
}
|
|
|
|
export function testAllObject(toTest, testcases) {
|
|
testAllCustom(toTest, testcases, "toMatchObject", "ans")
|
|
}
|