diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status index 4008b72e9ec..77162b97ba4 100644 --- a/runtime/tests/vm/vm.status +++ b/runtime/tests/vm/vm.status @@ -181,20 +181,6 @@ cc/Debugger_Rewind_Optimized: SkipSlow cc/Debugger_SetBreakpointInPartOfLibrary: Crash cc/IsolateReload_NotTypedefToTypedef: Fail cc/IsolateReload_TypedefToNotTypedef: Fail -cc/SourceReport_CallSites_PolymorphicCall: Fail -cc/SourceReport_CallSites_SimpleCall: Fail -cc/SourceReport_Coverage_AllFunctions: Fail -cc/SourceReport_Coverage_AllFunctions_ForceCompile: Fail -cc/SourceReport_Coverage_ForceCompile: Fail -cc/SourceReport_Coverage_NestedFunctions: Fail -cc/SourceReport_Coverage_NoCalls: Fail -cc/SourceReport_Coverage_RestrictedRange: Fail -cc/SourceReport_Coverage_SimpleCall: Fail -cc/SourceReport_Coverage_UnusedClass_ForceCompile: Fail -cc/SourceReport_Coverage_UnusedClass_ForceCompileError: Crash -cc/SourceReport_Coverage_UnusedClass_NoForceCompile: Fail -cc/SourceReport_MultipleReports: Fail -cc/SourceReport_PossibleBreakpoints_Simple: Fail dart/data_uri_import_test/utf16: MissingRuntimeError dart/spawn_shutdown_test: SkipSlow diff --git a/runtime/vm/source_report_test.cc b/runtime/vm/source_report_test.cc index 5e37a9b5e2a..9b0070d2932 100644 --- a/runtime/vm/source_report_test.cc +++ b/runtime/vm/source_report_test.cc @@ -10,11 +10,15 @@ namespace dart { #ifndef PRODUCT -static RawObject* ExecuteScript(const char* script) { +static RawObject* ExecuteScript(const char* script, bool allow_errors = false) { Dart_Handle lib; { TransitionVMToNative transition(Thread::Current()); - lib = TestCase::LoadTestScript(script, NULL); + if (allow_errors) { + lib = TestCase::LoadTestScriptWithErrors(script, NULL); + } else { + lib = TestCase::LoadTestScript(script, NULL); + } EXPECT_VALID(lib); Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); EXPECT_VALID(result); @@ -33,7 +37,6 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_NoCalls) { ASSERT(!lib.IsNull()); const Script& script = Script::Handle(lib.LookupScript(String::Handle(String::New("test-lib")))); - SourceReport report(SourceReport::kCoverage); JSONStream js; report.PrintJSON(&js, script); @@ -42,12 +45,12 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_NoCalls) { "{\"type\":\"SourceReport\",\"ranges\":" // One compiled range, one hit at function declaration. - "[{\"scriptIndex\":0,\"startPos\":0,\"endPos\":5,\"compiled\":true," + "[{\"scriptIndex\":0,\"startPos\":0,\"endPos\":9,\"compiled\":true," "\"coverage\":{\"hits\":[0],\"misses\":[]}}]," // One script in the script table. "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\"," - "\"uri\":\"test-lib\",\"_kind\":\"script\"}]}", + "\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}", buffer); } @@ -79,19 +82,19 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_SimpleCall) { "{\"type\":\"SourceReport\",\"ranges\":[" // One range compiled with one hit at function declaration (helper0). - "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":4,\"compiled\":true," + "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":11,\"compiled\":true," "\"coverage\":{\"hits\":[0],\"misses\":[]}}," // One range not compiled (helper1). - "{\"scriptIndex\":0,\"startPos\":6,\"endPos\":10,\"compiled\":false}," + "{\"scriptIndex\":0,\"startPos\":13,\"endPos\":24,\"compiled\":false}," // One range with two hits and a miss (main). - "{\"scriptIndex\":0,\"startPos\":12,\"endPos\":39,\"compiled\":true," - "\"coverage\":{\"hits\":[12,23],\"misses\":[32]}}]," + "{\"scriptIndex\":0,\"startPos\":26,\"endPos\":94,\"compiled\":true," + "\"coverage\":{\"hits\":[26,53],\"misses\":[79]}}]," // Only one script in the script table. "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\"," - "\"uri\":\"test-lib\",\"_kind\":\"script\"}]}", + "\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}", buffer); } @@ -119,24 +122,25 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_ForceCompile) { report.PrintJSON(&js, script); ElideJSONSubstring("classes", js.ToCString(), buffer); ElideJSONSubstring("libraries", buffer, buffer); + EXPECT_STREQ( "{\"type\":\"SourceReport\",\"ranges\":[" // One range compiled with one hit at function declaration (helper0). - "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":4,\"compiled\":true," + "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":11,\"compiled\":true," "\"coverage\":{\"hits\":[0],\"misses\":[]}}," // This range is compiled even though it wasn't called (helper1). - "{\"scriptIndex\":0,\"startPos\":6,\"endPos\":10,\"compiled\":true," - "\"coverage\":{\"hits\":[],\"misses\":[6]}}," + "{\"scriptIndex\":0,\"startPos\":13,\"endPos\":24,\"compiled\":true," + "\"coverage\":{\"hits\":[],\"misses\":[13]}}," // One range with two hits and a miss (main). - "{\"scriptIndex\":0,\"startPos\":12,\"endPos\":39,\"compiled\":true," - "\"coverage\":{\"hits\":[12,23],\"misses\":[32]}}]," + "{\"scriptIndex\":0,\"startPos\":26,\"endPos\":94,\"compiled\":true," + "\"coverage\":{\"hits\":[26,53],\"misses\":[79]}}]," // Only one script in the script table. "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\"," - "\"uri\":\"test-lib\",\"_kind\":\"script\"}]}", + "\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}", buffer); } @@ -166,19 +170,19 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_UnusedClass_NoForceCompile) { "{\"type\":\"SourceReport\",\"ranges\":[" // UnusedClass is not compiled. - "{\"scriptIndex\":0,\"startPos\":6,\"endPos\":20,\"compiled\":false}," + "{\"scriptIndex\":0,\"startPos\":13,\"endPos\":55,\"compiled\":false}," // helper0 is compiled. - "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":4,\"compiled\":true," + "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":11,\"compiled\":true," "\"coverage\":{\"hits\":[0],\"misses\":[]}}," // One range with two hits (main). - "{\"scriptIndex\":0,\"startPos\":22,\"endPos\":32,\"compiled\":true," - "\"coverage\":{\"hits\":[22,27],\"misses\":[]}}]," + "{\"scriptIndex\":0,\"startPos\":57,\"endPos\":79,\"compiled\":true," + "\"coverage\":{\"hits\":[57,68],\"misses\":[]}}]," // Only one script in the script table. "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\"," - "\"uri\":\"test-lib\",\"_kind\":\"script\"}]}", + "\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}", buffer); } @@ -208,20 +212,20 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_UnusedClass_ForceCompile) { "{\"type\":\"SourceReport\",\"ranges\":[" // UnusedClass.helper1 is compiled. - "{\"scriptIndex\":0,\"startPos\":10,\"endPos\":18,\"compiled\":true," - "\"coverage\":{\"hits\":[],\"misses\":[10,14]}}," + "{\"scriptIndex\":0,\"startPos\":30,\"endPos\":53,\"compiled\":true," + "\"coverage\":{\"hits\":[],\"misses\":[30,42]}}," // helper0 is compiled. - "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":4,\"compiled\":true," + "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":11,\"compiled\":true," "\"coverage\":{\"hits\":[0],\"misses\":[]}}," // One range with two hits (main). - "{\"scriptIndex\":0,\"startPos\":22,\"endPos\":32,\"compiled\":true," - "\"coverage\":{\"hits\":[22,27],\"misses\":[]}}]," + "{\"scriptIndex\":0,\"startPos\":57,\"endPos\":79,\"compiled\":true," + "\"coverage\":{\"hits\":[57,68],\"misses\":[]}}]," // Only one script in the script table. "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\"," - "\"uri\":\"test-lib\",\"_kind\":\"script\"}]}", + "\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}", buffer); } @@ -237,7 +241,7 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_UnusedClass_ForceCompileError) { "}"; Library& lib = Library::Handle(); - lib ^= ExecuteScript(kScript); + lib ^= ExecuteScript(kScript, true); ASSERT(!lib.IsNull()); const Script& script = Script::Handle(lib.LookupScript(String::Handle(String::New("test-lib")))); @@ -251,23 +255,25 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_UnusedClass_ForceCompileError) { "{\"type\":\"SourceReport\",\"ranges\":[" // UnusedClass has a syntax error. - "{\"scriptIndex\":0,\"startPos\":10,\"endPos\":18,\"compiled\":false," + "{\"scriptIndex\":0,\"startPos\":30,\"endPos\":53,\"compiled\":false," "\"error\":{\"type\":\"@Error\",\"_vmType\":\"LanguageError\"," "\"kind\":\"LanguageError\",\"id\":\"objects\\/0\"," - "\"message\":\"'test-lib': error: line 3 pos 26: unexpected token '}'\\n" - " helper1() { helper0()+ }\\n ^\\n\"}}," + "\"message\":\"'file:\\/\\/\\/test-lib': error: " + "file:\\/\\/\\/test-lib:3:26: " + "Error: This couldn't be parsed.\\n" + " helper1() { helper0()+ }\\n ^\"}}," // helper0 is compiled. - "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":4,\"compiled\":true," + "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":11,\"compiled\":true," "\"coverage\":{\"hits\":[0],\"misses\":[]}}," // One range with two hits (main). - "{\"scriptIndex\":0,\"startPos\":22,\"endPos\":32,\"compiled\":true," - "\"coverage\":{\"hits\":[22,27],\"misses\":[]}}]," + "{\"scriptIndex\":0,\"startPos\":57,\"endPos\":79,\"compiled\":true," + "\"coverage\":{\"hits\":[57,68],\"misses\":[]}}]," // Only one script in the script table. "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\"," - "\"uri\":\"test-lib\",\"_kind\":\"script\"}]}", + "\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}", buffer); } @@ -299,30 +305,31 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_NestedFunctions) { report.PrintJSON(&js, script); ElideJSONSubstring("classes", js.ToCString(), buffer); ElideJSONSubstring("libraries", buffer, buffer); + EXPECT_STREQ( "{\"type\":\"SourceReport\",\"ranges\":[" // One range compiled with one hit (helper0). - "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":22,\"compiled\":true," - "\"coverage\":{\"hits\":[0,18],\"misses\":[]}}," + "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":73,\"compiled\":true," + "\"coverage\":{\"hits\":[0,69],\"misses\":[]}}," // One range not compiled (helper1). - "{\"scriptIndex\":0,\"startPos\":24,\"endPos\":28,\"compiled\":false}," + "{\"scriptIndex\":0,\"startPos\":75,\"endPos\":86,\"compiled\":false}," // One range with two hits and a miss (main). - "{\"scriptIndex\":0,\"startPos\":30,\"endPos\":57,\"compiled\":true," - "\"coverage\":{\"hits\":[30,41],\"misses\":[50]}}," + "{\"scriptIndex\":0,\"startPos\":88,\"endPos\":156,\"compiled\":true," + "\"coverage\":{\"hits\":[88,115],\"misses\":[141]}}," // Nested range compiled (nestedHelper0). - "{\"scriptIndex\":0,\"startPos\":5,\"endPos\":9,\"compiled\":true," - "\"coverage\":{\"hits\":[5],\"misses\":[]}}," + "{\"scriptIndex\":0,\"startPos\":14,\"endPos\":31,\"compiled\":true," + "\"coverage\":{\"hits\":[14],\"misses\":[]}}," // Nested range not compiled (nestedHelper1). - "{\"scriptIndex\":0,\"startPos\":11,\"endPos\":15,\"compiled\":false}]," + "{\"scriptIndex\":0,\"startPos\":35,\"endPos\":52,\"compiled\":false}]," // Only one script in the script table. "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\"," - "\"uri\":\"test-lib\",\"_kind\":\"script\"}]}", + "\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}", buffer); } @@ -357,23 +364,24 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_RestrictedRange) { report.PrintJSON(&js, script, helper.token_pos(), helper.end_token_pos()); ElideJSONSubstring("classes", js.ToCString(), buffer); ElideJSONSubstring("libraries", buffer, buffer); + EXPECT_STREQ( "{\"type\":\"SourceReport\",\"ranges\":[" // One range compiled with one hit (helper0). - "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":22,\"compiled\":true," - "\"coverage\":{\"hits\":[0,18],\"misses\":[]}}," + "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":73,\"compiled\":true," + "\"coverage\":{\"hits\":[0,69],\"misses\":[]}}," // Nested range compiled (nestedHelper0). - "{\"scriptIndex\":0,\"startPos\":5,\"endPos\":9,\"compiled\":true," - "\"coverage\":{\"hits\":[5],\"misses\":[]}}," + "{\"scriptIndex\":0,\"startPos\":14,\"endPos\":31,\"compiled\":true," + "\"coverage\":{\"hits\":[14],\"misses\":[]}}," // Nested range not compiled (nestedHelper1). - "{\"scriptIndex\":0,\"startPos\":11,\"endPos\":15,\"compiled\":false}]," + "{\"scriptIndex\":0,\"startPos\":35,\"endPos\":52,\"compiled\":false}]," // Only one script in the script table. "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\"," - "\"uri\":\"test-lib\",\"_kind\":\"script\"}]}", + "\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}", buffer); } @@ -406,8 +414,8 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_AllFunctions) { // Make sure that the main function was found. EXPECT_SUBSTRING( - "\"startPos\":12,\"endPos\":39,\"compiled\":true," - "\"coverage\":{\"hits\":[12,23],\"misses\":[32]}", + "\"startPos\":26,\"endPos\":94,\"compiled\":true," + "\"coverage\":{\"hits\":[26,53],\"misses\":[79]}", result); // More than one script is referenced in the report. @@ -445,8 +453,8 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_AllFunctions_ForceCompile) { // Make sure that the main function was found. EXPECT_SUBSTRING( - "\"startPos\":12,\"endPos\":39,\"compiled\":true," - "\"coverage\":{\"hits\":[12,23],\"misses\":[32]}", + "\"startPos\":26,\"endPos\":94,\"compiled\":true," + "\"coverage\":{\"hits\":[26,53],\"misses\":[79]}", result); // More than one script is referenced in the report. @@ -479,25 +487,25 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_CallSites_SimpleCall) { "{\"type\":\"SourceReport\",\"ranges\":[" // One range compiled with no callsites (helper0). - "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":4,\"compiled\":true," + "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":11,\"compiled\":true," "\"callSites\":[]}," // One range not compiled (helper1). - "{\"scriptIndex\":0,\"startPos\":6,\"endPos\":10,\"compiled\":false}," + "{\"scriptIndex\":0,\"startPos\":13,\"endPos\":24,\"compiled\":false}," // One range compiled with one callsite (main). - "{\"scriptIndex\":0,\"startPos\":12,\"endPos\":22,\"compiled\":true," + "{\"scriptIndex\":0,\"startPos\":26,\"endPos\":48,\"compiled\":true," "\"callSites\":[" - "{\"name\":\"helper0\",\"tokenPos\":17,\"cacheEntries\":[" + "{\"name\":\"helper0\",\"tokenPos\":37,\"cacheEntries\":[" "{\"target\":{\"type\":\"@Function\",\"fixedId\":true,\"id\":\"\"," "\"name\":\"helper0\",\"owner\":{\"type\":\"@Library\",\"fixedId\":true," - "\"id\":\"\",\"name\":\"\",\"uri\":\"test-lib\"}," + "\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"}," "\"_kind\":\"RegularFunction\",\"static\":true,\"const\":false," "\"_intrinsic\":false,\"_native\":false},\"count\":1}]}]}]," // One script in the script table. "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\"," - "\"uri\":\"test-lib\",\"_kind\":\"script\"}]}", + "\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}", buffer); } @@ -538,10 +546,10 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_CallSites_PolymorphicCall) { "{\"type\":\"SourceReport\",\"ranges\":[" // One range... - "{\"scriptIndex\":0,\"startPos\":24,\"endPos\":37,\"compiled\":true," + "{\"scriptIndex\":0,\"startPos\":60,\"endPos\":88,\"compiled\":true," // With one call site... - "\"callSites\":[{\"name\":\"func\",\"tokenPos\":32,\"cacheEntries\":[" + "\"callSites\":[{\"name\":\"dyn:func\",\"tokenPos\":80,\"cacheEntries\":[" // First receiver: "Common", called twice. "{\"receiver\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\"," @@ -571,7 +579,7 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_CallSites_PolymorphicCall) { // One script in the script table. "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\"," - "\"uri\":\"test-lib\",\"_kind\":\"script\"}]}", + "\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}", buffer); } @@ -599,27 +607,27 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_MultipleReports) { "{\"type\":\"SourceReport\",\"ranges\":[" // One range compiled with no callsites (helper0). - "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":4,\"compiled\":true," + "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":11,\"compiled\":true," "\"callSites\":[]," "\"coverage\":{\"hits\":[0],\"misses\":[]}}," // One range not compiled (helper1). - "{\"scriptIndex\":0,\"startPos\":6,\"endPos\":10,\"compiled\":false}," + "{\"scriptIndex\":0,\"startPos\":13,\"endPos\":24,\"compiled\":false}," // One range compiled with one callsite (main). - "{\"scriptIndex\":0,\"startPos\":12,\"endPos\":22,\"compiled\":true," + "{\"scriptIndex\":0,\"startPos\":26,\"endPos\":48,\"compiled\":true," "\"callSites\":[" - "{\"name\":\"helper0\",\"tokenPos\":17,\"cacheEntries\":[" + "{\"name\":\"helper0\",\"tokenPos\":37,\"cacheEntries\":[" "{\"target\":{\"type\":\"@Function\",\"fixedId\":true,\"id\":\"\"," "\"name\":\"helper0\",\"owner\":{\"type\":\"@Library\",\"fixedId\":true," - "\"id\":\"\",\"name\":\"\",\"uri\":\"test-lib\"}," + "\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"}," "\"_kind\":\"RegularFunction\",\"static\":true,\"const\":false," "\"_intrinsic\":false,\"_native\":false},\"count\":1}]}]," - "\"coverage\":{\"hits\":[12,17],\"misses\":[]}}]," + "\"coverage\":{\"hits\":[26,37],\"misses\":[]}}]," // One script in the script table. "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\"," - "\"uri\":\"test-lib\",\"_kind\":\"script\"}]}", + "\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}", buffer); } @@ -651,19 +659,19 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_PossibleBreakpoints_Simple) { "{\"type\":\"SourceReport\",\"ranges\":[" // helper0. - "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":4,\"compiled\":true," - "\"possibleBreakpoints\":[1,4]}," + "{\"scriptIndex\":0,\"startPos\":0,\"endPos\":11,\"compiled\":true," + "\"possibleBreakpoints\":[7,11]}," // One range not compiled (helper1). - "{\"scriptIndex\":0,\"startPos\":6,\"endPos\":10,\"compiled\":false}," + "{\"scriptIndex\":0,\"startPos\":13,\"endPos\":24,\"compiled\":false}," // main. - "{\"scriptIndex\":0,\"startPos\":12,\"endPos\":39,\"compiled\":true," - "\"possibleBreakpoints\":[13,23,32,39]}]," + "{\"scriptIndex\":0,\"startPos\":26,\"endPos\":94,\"compiled\":true," + "\"possibleBreakpoints\":[30,53,79,94]}]," // Only one script in the script table. "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\"," - "\"uri\":\"test-lib\",\"_kind\":\"script\"}]}", + "\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}", buffer); }