export const description = ` Tests for getStackTrace. `; import { makeTestGroup } from '../common/framework/test_group.js'; import { extractImportantStackTrace } from '../common/internal/stack.js'; import { UnitTest } from './unit_test.js'; export const g = makeTestGroup(UnitTest); g.test('stacks') .paramsSimple([ { case: 'node_fail', _expectedLines: 3, _stack: `Error: at CaseRecorder.fail (/Users/kainino/src/cts/src/common/framework/logger.ts:99:30) at RunCaseSpecific.exports.g.test.t [as fn] (/Users/kainino/src/cts/src/unittests/logger.spec.ts:80:7) at RunCaseSpecific.run (/Users/kainino/src/cts/src/common/framework/test_group.ts:121:18) at processTicksAndRejections (internal/process/task_queues.js:86:5)`, }, { // MAINTENANCE_TODO: make sure this test case actually matches what happens on windows case: 'node_fail_backslash', _expectedLines: 3, _stack: `Error: at CaseRecorder.fail (C:\\Users\\kainino\\src\\cts\\src\\common\\framework\\logger.ts:99:30) at RunCaseSpecific.exports.g.test.t [as fn] (C:\\Users\\kainino\\src\\cts\\src\\unittests\\logger.spec.ts:80:7) at RunCaseSpecific.run (C:\\Users\\kainino\\src\\cts\\src\\common\\framework\\test_group.ts:121:18) at processTicksAndRejections (internal\\process\\task_queues.js:86:5)`, }, { case: 'node_fail_processTicksAndRejections', _expectedLines: 5, _stack: `Error: expectation had no effect: suite1:foo: at Object.generateMinimalQueryList (/Users/kainino/src/cts/src/common/framework/generate_minimal_query_list.ts:72:24) at testGenerateMinimalQueryList (/Users/kainino/src/cts/src/unittests/loading.spec.ts:289:25) at processTicksAndRejections (internal/process/task_queues.js:93:5) at RunCaseSpecific.fn (/Users/kainino/src/cts/src/unittests/loading.spec.ts:300:3) at RunCaseSpecific.run (/Users/kainino/src/cts/src/common/framework/test_group.ts:144:9) at /Users/kainino/src/cts/src/common/runtime/cmdline.ts:62:25 at async Promise.all (index 29) at /Users/kainino/src/cts/src/common/runtime/cmdline.ts:78:5`, }, { case: 'node_throw', _expectedLines: 2, _stack: `Error: hello at RunCaseSpecific.g.test.t [as fn] (/Users/kainino/src/cts/src/unittests/test_group.spec.ts:51:11) at RunCaseSpecific.run (/Users/kainino/src/cts/src/common/framework/test_group.ts:121:18) at processTicksAndRejections (internal/process/task_queues.js:86:5)`, }, { case: 'firefox_fail', _expectedLines: 3, _stack: `fail@http://localhost:8080/out/common/framework/logger.js:104:30 expect@http://localhost:8080/out/common/framework/default_fixture.js:59:16 @http://localhost:8080/out/unittests/util.spec.js:35:5 run@http://localhost:8080/out/common/framework/test_group.js:119:18`, }, { case: 'firefox_throw', _expectedLines: 1, _stack: `@http://localhost:8080/out/unittests/test_group.spec.js:48:11 run@http://localhost:8080/out/common/framework/test_group.js:119:18`, }, { case: 'safari_fail', _expectedLines: 3, _stack: `fail@http://localhost:8080/out/common/framework/logger.js:104:39 expect@http://localhost:8080/out/common/framework/default_fixture.js:59:20 http://localhost:8080/out/unittests/util.spec.js:35:11 http://localhost:8080/out/common/framework/test_group.js:119:20 asyncFunctionResume@[native code] [native code] promiseReactionJob@[native code]`, }, { case: 'safari_throw', _expectedLines: 1, _stack: `http://localhost:8080/out/unittests/test_group.spec.js:48:20 http://localhost:8080/out/common/framework/test_group.js:119:20 asyncFunctionResume@[native code] [native code] promiseReactionJob@[native code]`, }, { case: 'chrome_fail', _expectedLines: 4, _stack: `Error at CaseRecorder.fail (http://localhost:8080/out/common/framework/logger.js:104:30) at DefaultFixture.expect (http://localhost:8080/out/common/framework/default_fixture.js:59:16) at RunCaseSpecific.fn (http://localhost:8080/out/unittests/util.spec.js:35:5) at RunCaseSpecific.run (http://localhost:8080/out/common/framework/test_group.js:119:18) at async runCase (http://localhost:8080/out/common/runtime/standalone.js:37:17) at async http://localhost:8080/out/common/runtime/standalone.js:102:7`, }, { case: 'chrome_throw', _expectedLines: 6, _stack: `Error: hello at RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:48:11) at RunCaseSpecific.run (http://localhost:8080/out/common/framework/test_group.js:119:18)" at async Promise.all (index 0) at async TestGroupTest.run (http://localhost:8080/out/unittests/test_group_test.js:6:5) at async RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:53:15) at async RunCaseSpecific.run (http://localhost:8080/out/common/framework/test_group.js:119:7) at async runCase (http://localhost:8080/out/common/runtime/standalone.js:37:17) at async http://localhost:8080/out/common/runtime/standalone.js:102:7`, }, { case: 'multiple_lines', _expectedLines: 8, _stack: `Error: hello at RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:48:11) at RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:48:11) at RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:48:11) at RunCaseSpecific.run (http://localhost:8080/out/common/framework/test_group.js:119:18)" at async Promise.all (index 0) at async TestGroupTest.run (http://localhost:8080/out/unittests/test_group_test.js:6:5) at async RunCaseSpecific.fn (http://localhost:8080/out/unittests/test_group.spec.js:53:15) at async RunCaseSpecific.run (http://localhost:8080/out/common/framework/test_group.js:119:7) at async runCase (http://localhost:8080/out/common/runtime/standalone.js:37:17) at async http://localhost:8080/out/common/runtime/standalone.js:102:7`, }, ]) .fn(t => { const ex = new Error(); ex.stack = t.params._stack; t.expect(ex.stack === t.params._stack); const stringified = extractImportantStackTrace(ex); const parts = stringified.split('\n'); t.expect(parts.length === t.params._expectedLines); const last = parts[parts.length - 1]; t.expect(last.indexOf('/unittests/') !== -1 || last.indexOf('\\unittests\\') !== -1); });