| Index: runtime/vm/dart_api_impl_test.cc
|
| ===================================================================
|
| --- runtime/vm/dart_api_impl_test.cc (revision 10353)
|
| +++ runtime/vm/dart_api_impl_test.cc (working copy)
|
| @@ -5479,18 +5479,27 @@
|
| const char* kLibraryChars =
|
| "#library('patched_library');\n"
|
| "class A {\n"
|
| + " var _f;\n"
|
| " external method(var value);\n"
|
| "}\n"
|
| - "external int topLevel(var value);\n";
|
| + "external int unpatched();\n"
|
| + "external int topLevel(var value);\n"
|
| + "external int get topLevelGetter();\n"
|
| + "external void set topLevelSetter(int value);\n";
|
|
|
| const char* kPatchChars =
|
| - "patch int topLevel(var value) => value * value;\n";
|
| + "var _topLevelValue = -1;"
|
| + "patch int topLevel(var value) => value * value;\n"
|
| + "patch int set topLevelSetter(value) { _topLevelValue = value; }\n"
|
| + "patch int get topLevelGetter() => 2 * _topLevelValue;\n";
|
|
|
| const char* kScriptChars =
|
| "#import('theLibrary');\n"
|
| - "main() {\n"
|
| - // TODO(iposva): Implement patching.
|
| - " return 4 /* topLevel(2) */;\n"
|
| + "e1() => unpatched();\n"
|
| + "m1() => topLevel(2);\n"
|
| + "m2() {\n"
|
| + " topLevelSetter = 20;\n"
|
| + " return topLevelGetter;\n"
|
| "}\n";
|
|
|
| Dart_Handle result = Dart_SetLibraryTagHandler(library_handler);
|
| @@ -5501,19 +5510,36 @@
|
| result = Dart_LoadLibrary(lib_url, source);
|
| EXPECT_VALID(result);
|
|
|
| - // TODO(iposva): Implement patching.
|
| - source = Dart_NewString(kPatchChars);
|
| + const String& url = String::Handle(String::New("theLibrary"));
|
| + const String& patch_source = String::Handle(String::New(kPatchChars));
|
| + const Library& lib = Library::Handle(Library::LookupLibrary(url));
|
| + const Error& err = Error::Handle(lib.Patch(url, patch_source));
|
| + if (!err.IsNull()) {
|
| + OS::Print("Patching error: %s\n", err.ToErrorCString());
|
| + EXPECT(false);
|
| + }
|
|
|
| Dart_Handle script_url = Dart_NewString("theScript");
|
| source = Dart_NewString(kScriptChars);
|
| - result = Dart_LoadScript(script_url, source);
|
| + Dart_Handle test_script = Dart_LoadScript(script_url, source);
|
| + EXPECT_VALID(test_script);
|
| +
|
| + result = Dart_Invoke(test_script, Dart_NewString("e1"), 0, NULL);
|
| + EXPECT_ERROR(result, "External implementation missing");
|
| +
|
| + int64_t value = 0;
|
| + result = Dart_Invoke(test_script, Dart_NewString("m1"), 0, NULL);
|
| EXPECT_VALID(result);
|
| - result = Dart_Invoke(result, Dart_NewString("main"), 0, NULL);
|
| + EXPECT(Dart_IsInteger(result));
|
| + EXPECT_VALID(Dart_IntegerToInt64(result, &value));
|
| + EXPECT_EQ(4, value);
|
| +
|
| + value = 0;
|
| + result = Dart_Invoke(test_script, Dart_NewString("m2"), 0, NULL);
|
| EXPECT_VALID(result);
|
| EXPECT(Dart_IsInteger(result));
|
| - int64_t value = 0;
|
| EXPECT_VALID(Dart_IntegerToInt64(result, &value));
|
| - EXPECT_EQ(4, value);
|
| + EXPECT_EQ(40, value);
|
| }
|
|
|
|
|
|
|