1import { withStringResult, InteropNativeModule } from "@koalaui/interop" 2 3export const TEST_GROUP_LOG = 1 4export const CALL_GROUP_LOG = 2 5 6export let reportTestFailures: boolean = true 7 8let failedTestsCount = 0 9 10export function setReportTestFailures(report: boolean) { 11 reportTestFailures = report 12} 13 14export function checkTestFailures() { 15 if (reportTestFailures) { 16 if (!failedTestsCount) { 17 console.log(`all tests passed`) 18 } else { 19 console.log(`failed tests: ${failedTestsCount}`) 20 process.exit(1) 21 } 22 } 23} 24 25export function startNativeTest(testName: string, group: number) { 26 InteropNativeModule._AppendGroupedLog(group, `void TEST_${testName}() {\n`) 27} 28 29export function stopNativeTest(group: number) { 30 InteropNativeModule._AppendGroupedLog(group, `}\n`) 31} 32 33export function startNativeLog(group: number) { 34 InteropNativeModule._StartGroupedLog(group) 35} 36 37export function stopNativeLog(group: number) { 38 InteropNativeModule._StopGroupedLog(group) 39} 40 41export function getNativeLog(group: number): string { 42 return withStringResult(InteropNativeModule._GetGroupedLog(group))! 43} 44 45export function checkResult(name: string, test: () => void, expected: string) { 46 startNativeLog(TEST_GROUP_LOG) 47 test() 48 stopNativeLog(TEST_GROUP_LOG) 49 const out = getNativeLog(TEST_GROUP_LOG) 50 // remove out comments like /* some text */ 51 const actual = out.replace(/\s?\/\*.*?\*\//g, "") 52 .replaceAll(" \n", "") 53 if (reportTestFailures) { 54 if (actual != expected) { 55 failedTestsCount++ 56 console.log(`TEST ${name} FAIL:\n EXPECTED "${expected}"\n ACTUAL "${actual}"`) 57 console.log(`output: ${out}`) 58 } else { 59 console.log(`TEST ${name} PASS`) 60 } 61 } 62} 63 64export function assertTrue(name: string, value: boolean) { 65 if (!value) { 66 failedTestsCount++ 67 console.log(`TEST ${name} FAIL:\n EXPECTED value is not true.`) 68 } else { 69 console.log(`TEST ${name} PASS`) 70 } 71} 72 73export function assertEquals(name: string, expected: any, actual: any) { 74 if (expected != actual ) { 75 failedTestsCount++ 76 console.log(`TEST ${name} FAIL:\n EXPECTED "${expected}"\n ACTUAL "${actual}"`) 77 } else { 78 console.log(`TEST ${name} PASS`) 79 } 80} 81 82export function assertThrows(name: string, fn: () => void) { 83 let caught = false 84 try { 85 fn() 86 } catch (e) { 87 caught = true 88 } 89 if (!caught) { 90 failedTestsCount++ 91 console.log(`TEST ${name} FAIL:\n No exception thrown`) 92 } else { 93 console.log(`TEST ${name} PASS`) 94 } 95}