Index: runtime/vm/unit_test.cc |
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc |
index 522974e6170c97dccbaa5ffc778b9b82f572401f..9c89d9c7d8bde2be03b5d08a71fa437a2bbb370c 100644 |
--- a/runtime/vm/unit_test.cc |
+++ b/runtime/vm/unit_test.cc |
@@ -81,14 +81,27 @@ static bool IsImportableTestLib(const char* url_name) { |
} |
+const char* kDefaultImportableTestLibScript = |
+ "importedFunc() => 'a';\n" |
+ "importedIntFunc() => 4;\n" |
+ "class ImportedMixin {\n" |
+ " mixinFunc() => 'mixin';\n" |
+ "}\n"; |
+const char* importable_test_lib_script = kDefaultImportableTestLibScript; |
+ |
+ |
+void TestCase::SetImportableTestLibScript(const char* source) { |
+ importable_test_lib_script = source; |
+} |
+ |
+ |
+void TestCase::RestoreImportableTestLibScript() { |
+ importable_test_lib_script = kDefaultImportableTestLibScript; |
+} |
+ |
+ |
static Dart_Handle ImportableTestLibSource() { |
- const char* kScript = |
- "importedFunc() => 'a';\n" |
- "importedIntFunc() => 4;\n" |
- "class ImportedMixin {\n" |
- " mixinFunc() => 'mixin';\n" |
- "}\n"; |
- return DartUtils::NewString(kScript); |
+ return DartUtils::NewString(importable_test_lib_script); |
} |
@@ -155,6 +168,7 @@ static Dart_Handle LibraryTagHandler(Dart_LibraryTag tag, |
ASSERT(script_source != NULL); |
OSThread::SetThreadLocal(script_reload_key, 0); |
return Dart_LoadScript(url, |
+ Dart_Null(), |
NewString(script_source), |
0, |
0); |
@@ -191,12 +205,12 @@ static Dart_Handle LibraryTagHandler(Dart_LibraryTag tag, |
} |
} |
if (IsImportableTestLib(url_chars)) { |
- return Dart_LoadLibrary(url, ImportableTestLibSource(), 0, 0); |
+ return Dart_LoadLibrary(url, Dart_Null(), ImportableTestLibSource(), 0, 0); |
} |
NOT_IN_PRODUCT( |
if (IsIsolateReloadTestLib(url_chars)) { |
Dart_Handle library = |
- Dart_LoadLibrary(url, IsolateReloadTestLibSource(), 0, 0); |
+ Dart_LoadLibrary(url, Dart_Null(), IsolateReloadTestLibSource(), 0, 0); |
DART_CHECK_VALID(library); |
Dart_SetNativeResolver(library, IsolateReloadTestNativeResolver, 0); |
return library; |
@@ -204,28 +218,28 @@ static Dart_Handle LibraryTagHandler(Dart_LibraryTag tag, |
if (is_io_library) { |
ASSERT(tag == Dart_kSourceTag); |
return Dart_LoadSource(library, |
- url, |
+ url, Dart_Null(), |
Builtin::PartSource(Builtin::kIOLibrary, |
url_chars), |
0, 0); |
} |
+ Dart_Handle resolved_url = url; |
+ const char* resolved_url_chars = url_chars; |
if (IsPackageSchemeURL(url_chars)) { |
- Dart_Handle resolved_uri = ResolvePackageUri(url_chars); |
- DART_CHECK_VALID(resolved_uri); |
- url_chars = NULL; |
- Dart_Handle result = Dart_StringToCString(resolved_uri, &url_chars); |
- if (Dart_IsError(result)) { |
- return Dart_NewApiError("accessing url characters failed"); |
+ resolved_url = ResolvePackageUri(url_chars); |
+ DART_CHECK_VALID(resolved_url); |
+ if (Dart_IsError(Dart_StringToCString(resolved_url, &resolved_url_chars))) { |
+ return Dart_NewApiError("unable to convert resolved uri to string"); |
} |
} |
// Do sync loading since unit_test doesn't support async. |
- Dart_Handle source = DartUtils::ReadStringFromFile(url_chars); |
+ Dart_Handle source = DartUtils::ReadStringFromFile(resolved_url_chars); |
EXPECT_VALID(source); |
if (tag == Dart_kImportTag) { |
- return Dart_LoadLibrary(url, source, 0, 0); |
+ return Dart_LoadLibrary(url, resolved_url, source, 0, 0); |
} else { |
ASSERT(tag == Dart_kSourceTag); |
- return Dart_LoadSource(library, url, source, 0, 0); |
+ return Dart_LoadSource(library, url, resolved_url, source, 0, 0); |
} |
} |
@@ -238,7 +252,7 @@ Dart_Handle TestCase::LoadTestScript(const char* script, |
Dart_Handle source = NewString(script); |
Dart_Handle result = Dart_SetLibraryTagHandler(LibraryTagHandler); |
EXPECT_VALID(result); |
- Dart_Handle lib = Dart_LoadScript(url, source, 0, 0); |
+ Dart_Handle lib = Dart_LoadScript(url, Dart_Null(), source, 0, 0); |
DART_CHECK_VALID(lib); |
result = Dart_SetNativeResolver(lib, resolver, NULL); |
DART_CHECK_VALID(result); |
@@ -269,7 +283,8 @@ Dart_Handle TestCase::TriggerReload() { |
{ |
TransitionNativeToVM transition(Thread::Current()); |
- isolate->ReloadSources(/* dont_delete_reload_context = */ true); |
+ isolate->ReloadSources(false, // force_reload |
+ true); // dont_delete_reload_context |
} |
return Dart_FinalizeLoading(false); |