Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(479)

Unified Diff: runtime/vm/dart_api_impl_test.cc

Issue 10824209: - Allow patching of top-level methods and accessors. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | runtime/vm/object.h » ('j') | runtime/vm/object.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
« no previous file with comments | « no previous file | runtime/vm/object.h » ('j') | runtime/vm/object.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698