• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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}