Currently we test dartdevk against SDK/packages that were compiled with dartdevc (DDC+Analyzer). This CL migrates to having those files compiled with DDC+Kernel. dartdevc testing is unchanged. Most of the fixes are around things like special optimized annotations used in our SDK code, that were not understood by DDK. Also some inline JS type annoations were not correct. Change-Id: Iccf4427e4b9beffd6d97a4be654253d91f6cb89e Reviewed-on: https://dart-review.googlesource.com/57800 Reviewed-by: Vijay Menon <vsm@google.com>
Testing of source maps
This folder contains two types of tests for validating sourcemaps: the debugging behavior and the stacktrace behavior.
For both there are 2 suits: One for (legacy) DDC and one for DDC with kernel (DDK).
Running the tests likely requires the compilation of the correct targets. DDK currently also
requires ddc_sdk.dill inside
{sdkroot}/{out,xcodebuild}/ReleaseX64/gen/utils/dartdevc/kernel/ddc_sdk.dill.
Except for that, running them should simply be a matter of executing the *_suite.dart files.
All tests are plain Dart files and goes in "testfiles" (debugging tests) or "stacktrace_testfiles" (stacktrace tests). They are automatically picked up by the testing framework.
Debugging tests (step tests)
See README.md in pkg/sourcemap_testing.
Debugging a test
One can filter which tests are run by running (from the sourcemap folder):
dart sourcemaps_ddc_suite.dart -- sourcemaps_ddc//printing_class_fields
One can additionally get debug output for failing tests (i.e. tests with different outcome than expected), e.g.:
dart sourcemaps_ddc_suite.dart -Ddebug=true -- sourcemaps_ddc//printing_class_fields
The latter is also useful in combination with /*fail*/ when adding new tests to see all the places
where the debugger stopped (both in JS positions and translated to dart positions).
For instance -Ddebug=true -- sourcemaps_ddk//next_through_catch_test with a /*fail*/
currently gives output like the following:
Stop #1
test.main = function() { | main() {
try { | try {
let value = /*STOP*/"world"; | var value = /*STOP*/"world";
dart.throw(dart.str`Hello, ${value}`); | // Comment
} catch (e) { | throw "Hello, $value";
Stop #2
try { | var value = "world";
let value = "world"; | // Comment
/*STOP*/dart.throw(dart.str`Hello, ${value}`); | /*STOP*/throw "Hello, $value";
} catch (e) { | }
let st = dart.stackTrace(e); | // Comment
Stop #3
dart.throw(dart.str`Hello, ${value}`); | }
} catch (e) { | // Comment
let st = /*STOP*/dart.stackTrace(e); | catch (e, /*STOP*/st) {
{ | print(e);
core.print(e); | print(st);
[...]