Index: runtime/vm/dart_api_impl_test.cc |
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc |
index a9def3fb87a03e00da46727cda36ef658435893d..be5c3772e4057472777e32661c9ead1b67da0e15 100644 |
--- a/runtime/vm/dart_api_impl_test.cc |
+++ b/runtime/vm/dart_api_impl_test.cc |
@@ -5296,8 +5296,13 @@ TEST_CASE(ParsePatchLibrary) { |
" external B.named(x);\n" |
" external B(v);\n" |
"}\n" |
+ "class C {\n" |
+ " external int method();\n" |
+ "}\n" |
+ "\n" |
"external int unpatched();\n" |
"external int topLevel(var value);\n" |
+ "external int topLevel2(var value);\n" |
"external int get topLevelGetter;\n" |
"external void set topLevelSetter(int value);\n"; |
@@ -5322,7 +5327,19 @@ TEST_CASE(ParsePatchLibrary) { |
"patch int set topLevelSetter(value) { _topLevelValue = value; }\n" |
"patch int get topLevelGetter => 2 * _topLevelValue;\n" |
// Allow top level methods named patch. |
- "patch(x) => x*3;\n"; |
+ "patch(x) => x*3;\n" |
+ ; // NOLINT |
+ |
+ const char* kPatchClassOnlyChars = |
+ "patch class C {\n" |
+ " /*patch*/ int method() {\n" |
+ " return 42;\n" |
+ " }\n" |
+ "}\n" |
+ ; // NOLINT |
+ |
+ const char* kPatchNoClassChars = |
+ "patch topLevel2(x) => x * 2;\n"; |
const char* kScriptChars = |
"import 'theLibrary';\n" |
@@ -5356,17 +5373,27 @@ TEST_CASE(ParsePatchLibrary) { |
result = Dart_LoadLibrary(url, source); |
EXPECT_VALID(result); |
- const String& patch_url = String::Handle(String::New("theLibrary patch")); |
- const String& patch_source = String::Handle(String::New(kPatchChars)); |
- const Script& patch_script = Script::Handle(Script::New( |
- patch_url, patch_source, RawScript::kPatchTag)); |
- |
+ const char* patchNames[] = { "main library patch", |
+ "patch class only", |
+ "patch no class" }; |
+ const char* patches[] = { kPatchChars, |
+ kPatchClassOnlyChars, |
+ kPatchNoClassChars }; |
const String& lib_url = String::Handle(String::New("theLibrary")); |
+ |
const Library& lib = Library::Handle(Library::LookupLibrary(lib_url)); |
- const Error& err = Error::Handle(lib.Patch(patch_script)); |
- if (!err.IsNull()) { |
- OS::Print("Patching error: %s\n", err.ToErrorCString()); |
- EXPECT(false); |
+ |
+ for (int i = 0; i < 3; i++) { |
+ const String& patch_url = String::Handle(String::New(patchNames[i])); |
+ const String& patch_source = String::Handle(String::New(patches[i])); |
+ const Script& patch_script = Script::Handle(Script::New( |
+ patch_url, patch_source, RawScript::kPatchTag)); |
+ |
+ const Error& err = Error::Handle(lib.Patch(patch_script)); |
+ if (!err.IsNull()) { |
+ OS::Print("Patching error: %s\n", err.ToErrorCString()); |
+ EXPECT(false); |
+ } |
} |
result = Dart_SetNativeResolver(result, &PatchNativeResolver); |
EXPECT_VALID(result); |
@@ -5421,6 +5448,10 @@ TEST_CASE(ParsePatchLibrary) { |
EXPECT(Dart_IsInteger(result)); |
EXPECT_VALID(Dart_IntegerToInt64(result, &value)); |
EXPECT_EQ(8, value); |
+ |
+ // Make sure all source files show up in the patched library. |
+ const Array& lib_scripts = Array::Handle(lib.LoadedScripts()); |
+ EXPECT_EQ(4, lib_scripts.Length()); |
} |