getStackTrace.spec.ts (6485B)
1 export const description = ` 2 Tests for getStackTrace. 3 `; 4 5 import { makeTestGroup } from '../common/framework/test_group.js'; 6 import { extractImportantStackTrace } from '../common/internal/stack.js'; 7 8 import { UnitTest } from './unit_test.js'; 9 10 export const g = makeTestGroup(UnitTest); 11 12 g.test('stacks') 13 .paramsSimple([ 14 { 15 case: 'node_fail', 16 _expectedLines: 3, 17 _stack: `Error: 18 at CaseRecorder.fail (/Users/kainino/src/cts/src/common/framework/logger.ts:99:30) 19 at RunCaseSpecific.exports.g.test.t [as fn] (/Users/kainino/src/cts/src/unittests/logger.spec.ts:80:7) 20 at RunCaseSpecific.run (/Users/kainino/src/cts/src/common/framework/test_group.ts:121:18) 21 at processTicksAndRejections (internal/process/task_queues.js:86:5)`, 22 }, 23 { 24 // MAINTENANCE_TODO: make sure this test case actually matches what happens on windows 25 case: 'node_fail_backslash', 26 _expectedLines: 3, 27 _stack: `Error: 28 at CaseRecorder.fail (C:\\Users\\kainino\\src\\cts\\src\\common\\framework\\logger.ts:99:30) 29 at RunCaseSpecific.exports.g.test.t [as fn] (C:\\Users\\kainino\\src\\cts\\src\\unittests\\logger.spec.ts:80:7) 30 at RunCaseSpecific.run (C:\\Users\\kainino\\src\\cts\\src\\common\\framework\\test_group.ts:121:18) 31 at processTicksAndRejections (internal\\process\\task_queues.js:86:5)`, 32 }, 33 { 34 case: 'node_fail_processTicksAndRejections', 35 _expectedLines: 5, 36 _stack: `Error: expectation had no effect: suite1:foo: 37 at Object.generateMinimalQueryList (/Users/kainino/src/cts/src/common/framework/generate_minimal_query_list.ts:72:24) 38 at testGenerateMinimalQueryList (/Users/kainino/src/cts/src/unittests/loading.spec.ts:289:25) 39 at processTicksAndRejections (internal/process/task_queues.js:93:5) 40 at RunCaseSpecific.fn (/Users/kainino/src/cts/src/unittests/loading.spec.ts:300:3) 41 at RunCaseSpecific.run (/Users/kainino/src/cts/src/common/framework/test_group.ts:144:9) 42 at /Users/kainino/src/cts/src/common/runtime/cmdline.ts:62:25 43 at async Promise.all (index 29) 44 at /Users/kainino/src/cts/src/common/runtime/cmdline.ts:78:5`, 45 }, 46 { 47 case: 'node_throw', 48 _expectedLines: 2, 49 _stack: `Error: hello 50 at RunCaseSpecific.g.test.t [as fn] (/Users/kainino/src/cts/src/unittests/test_group.spec.ts:51:11) 51 at RunCaseSpecific.run (/Users/kainino/src/cts/src/common/framework/test_group.ts:121:18) 52 at processTicksAndRejections (internal/process/task_queues.js:86:5)`, 53 }, 54 { 55 case: 'firefox_fail', 56 _expectedLines: 3, 57 _stack: `fail@http://localhost:8080/out/common/framework/logger.js:104:30 58 expect@http://localhost:8080/out/common/framework/default_fixture.js:59:16 59 @http://localhost:8080/out/unittests/util.spec.js:35:5 60 run@http://localhost:8080/out/common/framework/test_group.js:119:18`, 61 }, 62 { 63 case: 'firefox_throw', 64 _expectedLines: 1, 65 _stack: `@http://localhost:8080/out/unittests/test_group.spec.js:48:11 66 run@http://localhost:8080/out/common/framework/test_group.js:119:18`, 67 }, 68 { 69 case: 'safari_fail', 70 _expectedLines: 3, 71 _stack: `fail@http://localhost:8080/out/common/framework/logger.js:104:39 72 expect@http://localhost:8080/out/common/framework/default_fixture.js:59:20 73 http://localhost:8080/out/unittests/util.spec.js:35:11 74 http://localhost:8080/out/common/framework/test_group.js:119:20 75 asyncFunctionResume@[native code] 76 [native code] 77 promiseReactionJob@[native code]`, 78 }, 79 { 80 case: 'safari_throw', 81 _expectedLines: 1, 82 _stack: `http://localhost:8080/out/unittests/test_group.spec.js:48:20 83 http://localhost:8080/out/common/framework/test_group.js:119:20 84 asyncFunctionResume@[native code] 85 [native code] 86 promiseReactionJob@[native code]`, 87 }, 88 { 89 case: 'chrome_fail', 90 _expectedLines: 4, 91 _stack: `Error 92 at CaseRecorder.fail (http://localhost:8080/out/common/framework/logger.js:104:30) 93 at DefaultFixture.expect (http://localhost:8080/out/common/framework/default_fixture.js:59:16) 94 at RunCaseSpecific.fn (http://localhost:8080/out/unittests/util.spec.js:35:5) 95 at RunCaseSpecific.run (http://localhost:8080/out/common/framework/test_group.js:119:18) 96 at async runCase (http://localhost:8080/out/common/runtime/standalone.js:37:17) 97 at async http://localhost:8080/out/common/runtime/standalone.js:102:7`, 98 }, 99 { 100 case: 'chrome_throw', 101 _expectedLines: 6, 102 _stack: `Error: hello 103 at RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:48:11) 104 at RunCaseSpecific.run (http://localhost:8080/out/common/framework/test_group.js:119:18)" 105 at async Promise.all (index 0) 106 at async TestGroupTest.run (http://localhost:8080/out/unittests/test_group_test.js:6:5) 107 at async RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:53:15) 108 at async RunCaseSpecific.run (http://localhost:8080/out/common/framework/test_group.js:119:7) 109 at async runCase (http://localhost:8080/out/common/runtime/standalone.js:37:17) 110 at async http://localhost:8080/out/common/runtime/standalone.js:102:7`, 111 }, 112 { 113 case: 'multiple_lines', 114 _expectedLines: 8, 115 _stack: `Error: hello 116 at RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:48:11) 117 at RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:48:11) 118 at RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:48:11) 119 at RunCaseSpecific.run (http://localhost:8080/out/common/framework/test_group.js:119:18)" 120 at async Promise.all (index 0) 121 at async TestGroupTest.run (http://localhost:8080/out/unittests/test_group_test.js:6:5) 122 at async RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:53:15) 123 at async RunCaseSpecific.run (http://localhost:8080/out/common/framework/test_group.js:119:7) 124 at async runCase (http://localhost:8080/out/common/runtime/standalone.js:37:17) 125 at async http://localhost:8080/out/common/runtime/standalone.js:102:7`, 126 }, 127 ]) 128 .fn(t => { 129 const ex = new Error(); 130 ex.stack = t.params._stack; 131 t.expect(ex.stack === t.params._stack); 132 const stringified = extractImportantStackTrace(ex); 133 const parts = stringified.split('\n'); 134 135 t.expect(parts.length === t.params._expectedLines); 136 const last = parts[parts.length - 1]; 137 t.expect(last.indexOf('/unittests/') !== -1 || last.indexOf('\\unittests\\') !== -1); 138 });