napi-rs/examples/napi/__tests__/test.framework.js

67 lines
1.6 KiB
JavaScript

const { bun } = process.versions
/**@type {import('ava').TestFn} */
let testRunner
if (bun) {
const { test, expect } = await import('./bun-test.js')
const testContext = {
is: (actual, expected) => {
expect(actual).toEqual(expected)
},
deepEqual: (actual, expected) => {
expect(actual).toEqual(expected)
},
throws: (fn, expected) => {
if (expected) {
expect(fn).toThrow(expected)
} else {
expect(fn).toThrow()
}
},
notThrows: (fn, expected) => {
if (expected) {
expect(fn).not.toThrow(expected)
} else {
expect(fn).not.toThrow()
}
},
throwsAsync: async (fn, expected) => {
if (expected) {
expect(fn instanceof Promise ? fn : await fn()).rejects.toEqual(
expected,
)
} else {
expect(fn instanceof Promise ? fn : await fn()).rejects.toBeTruthy()
}
},
notThrowsAsync: async (fn, expected) => {
if (expected) {
expect(fn instanceof Promise ? fn : await fn()).resolves.toBe(expected)
} else {
expect(fn instanceof Promise ? fn : await fn()).resolves.toBeTruthy()
}
},
true: (actual, message) => {
expect(actual).toBe(true, message)
},
false: (actual, message) => {
expect(actual).toBe(false, message)
},
}
testRunner = (title, spec) => {
test(title, async () => {
await Promise.resolve(spec(testContext))
})
}
testRunner.skip = (label, fn) => {
test.skip(label, () => {
fn(testContext)
})
}
} else {
const test = (await import('ava')).default
testRunner = test
}
export { testRunner as test }