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

Unified Diff: vm/dart_api_impl_test.cc

Issue 9616044: Adds new apis Dart_GetField/Dart_SetField. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 9 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
Index: vm/dart_api_impl_test.cc
===================================================================
--- vm/dart_api_impl_test.cc (revision 4977)
+++ vm/dart_api_impl_test.cc (working copy)
@@ -1803,8 +1803,261 @@
// Only ia32 and x64 can run execution tests.
#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
+
+static void TestFieldOk(Dart_Handle container,
+ Dart_Handle name,
+ bool final,
+ const char* initial_value) {
+ Dart_Handle result;
+
+ // Make sure we have the right initial value.
+ result = Dart_GetField(container, name);
+ EXPECT_VALID(result);
+ const char* value = "";
+ EXPECT_VALID(Dart_StringToCString(result, &value));
+ EXPECT_STREQ(initial_value, value);
+
+ // Use a unique expected value.
+ static int counter = 0;
+ char buffer[256];
+ OS::SNPrint(buffer, 256, "Expected%d", ++counter);
+
+ // Try to change the field value.
+ result = Dart_SetField(container, name, Dart_NewString(buffer));
+ if (final) {
+ EXPECT(Dart_IsError(result));
+ } else {
+ EXPECT_VALID(result);
+ }
+
+ // Make sure we have the right final value.
+ result = Dart_GetField(container, name);
+ EXPECT_VALID(result);
+ EXPECT_VALID(Dart_StringToCString(result, &value));
+ if (final) {
+ EXPECT_STREQ(initial_value, value);
+ } else {
+ EXPECT_STREQ(buffer, value);
+ }
+}
+
+
+static void TestFieldNotFound(Dart_Handle container,
+ Dart_Handle name) {
+ EXPECT(Dart_IsError(Dart_GetField(container, name)));
+ EXPECT(Dart_IsError(Dart_SetField(container, name, Dart_Null())));
+}
+
+
TEST_CASE(FieldAccess) {
const char* kScriptChars =
+ "class BaseFields {\n"
+ " BaseFields()\n"
+ " : this.inherited_fld = 'inherited' {\n"
+ " }\n"
+ " var inherited_fld;\n"
+ " static var non_inherited_fld;\n"
+ "}\n"
+ "\n"
+ "class Fields extends BaseFields {\n"
+ " Fields()\n"
+ " : this.instance_fld = 'instance',\n"
+ " this._instance_fld = 'hidden instance',\n"
+ " this.final_instance_fld = 'final instance',\n"
+ " this._final_instance_fld = 'hidden final instance' {\n"
+ " instance_getset_fld = 'instance getset';\n"
+ " _instance_getset_fld = 'hidden instance getset';\n"
+ " }\n"
+ "\n"
+ " static Init() {\n"
+ " static_fld = 'static';\n"
+ " _static_fld = 'hidden static';\n"
+ " static_getset_fld = 'static getset';\n"
+ " _static_getset_fld = 'hidden static getset';\n"
+ " }\n"
+ "\n"
+ " var instance_fld;\n"
+ " var _instance_fld;\n"
+ " final final_instance_fld;\n"
+ " final _final_instance_fld;\n"
+ " static var static_fld;\n"
+ " static var _static_fld;\n"
+ " static final final_static_fld = 'final static';\n"
+ " static final _final_static_fld = 'hidden final static';\n"
+ "\n"
+ " get instance_getset_fld() { return _gs_fld1; }\n"
+ " void set instance_getset_fld(var value) { _gs_fld1 = value; }\n"
+ " get _instance_getset_fld() { return _gs_fld2; }\n"
+ " void set _instance_getset_fld(var value) { _gs_fld2 = value; }\n"
+ " var _gs_fld1;\n"
+ " var _gs_fld2;\n"
+ "\n"
+ " static get static_getset_fld() { return _gs_fld3; }\n"
+ " static void set static_getset_fld(var value) { _gs_fld3 = value; }\n"
+ " static get _static_getset_fld() { return _gs_fld4; }\n"
+ " static void set _static_getset_fld(var value) { _gs_fld4 = value; }\n"
+ " static var _gs_fld3;\n"
+ " static var _gs_fld4;\n"
+ "}\n"
+ "var top_fld;\n"
+ "var _top_fld;\n"
+ "final final_top_fld = 'final top';\n"
+ "final _final_top_fld = 'hidden final top';\n"
+ "\n"
+ "get top_getset_fld() { return _gs_fld5; }\n"
+ "void set top_getset_fld(var value) { _gs_fld5 = value; }\n"
+ "get _top_getset_fld() { return _gs_fld6; }\n"
+ "void set _top_getset_fld(var value) { _gs_fld6 = value; }\n"
+ "var _gs_fld5;\n"
+ "var _gs_fld6;\n"
+ "\n"
+ "Fields test() {\n"
+ " Fields.Init();\n"
+ " top_fld = 'top';\n"
+ " _top_fld = 'hidden top';\n"
+ " top_getset_fld = 'top getset';\n"
+ " _top_getset_fld = 'hidden top getset';\n"
+ " return new Fields();\n"
+ "}\n";
+
+ // Shared setup.
+ Dart_Handle result;
+ Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
+ Dart_Handle cls = Dart_GetClass(lib, Dart_NewString("Fields"));
+ EXPECT_VALID(cls);
+ Dart_Handle instance = Dart_InvokeStatic(lib,
+ Dart_Null(),
+ Dart_NewString("test"),
+ 0,
+ NULL);
+ EXPECT_VALID(instance);
+ Dart_Handle name;
+ int64_t value = 0;
+
+ // Instance field.
+ name = Dart_NewString("instance_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(cls, name);
+ TestFieldOk(instance, name, false, "instance");
+
+ // Hidden instance field.
+ name = Dart_NewString("_instance_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(cls, name);
+ TestFieldOk(instance, name, false, "hidden instance");
+
+ // Final instance field.
+ name = Dart_NewString("final_instance_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(cls, name);
+ TestFieldOk(instance, name, true, "final instance");
+
+ // Hidden final instance field.
+ name = Dart_NewString("_final_instance_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(cls, name);
+ TestFieldOk(instance, name, true, "hidden final instance");
+
+ // Inherited field.
+ name = Dart_NewString("inherited_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(cls, name);
+ TestFieldOk(instance, name, false, "inherited");
+
+ // Instance get/set field.
+ name = Dart_NewString("instance_getset_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(cls, name);
+ TestFieldOk(instance, name, false, "instance getset");
+
+ // Hidden instance get/set field.
+ name = Dart_NewString("_instance_getset_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(cls, name);
+ TestFieldOk(instance, name, false, "hidden instance getset");
+
+ // Static field.
+ name = Dart_NewString("static_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(instance, name);
+ TestFieldOk(cls, name, false, "static");
+
+ // Hidden static field.
+ name = Dart_NewString("_static_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(instance, name);
+ TestFieldOk(cls, name, false, "hidden static");
+
+ // Static final field.
+ name = Dart_NewString("final_static_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(instance, name);
+ TestFieldOk(cls, name, true, "final static");
+
+ // Hidden static final field.
+ name = Dart_NewString("_final_static_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(instance, name);
+ TestFieldOk(cls, name, true, "hidden final static");
+
+ // Static non-inherited field. Not found at any level.
+ name = Dart_NewString("non_inherited_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(instance, name);
+ TestFieldNotFound(cls, name);
+
+ // Static get/set field.
+ name = Dart_NewString("static_getset_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(instance, name);
+ TestFieldOk(cls, name, false, "static getset");
+
+ // Hidden static get/set field.
+ name = Dart_NewString("_static_getset_fld");
+ TestFieldNotFound(lib, name);
+ TestFieldNotFound(instance, name);
+ TestFieldOk(cls, name, false, "hidden static getset");
+
+ // Top-Level field.
+ name = Dart_NewString("top_fld");
+ TestFieldNotFound(cls, name);
+ TestFieldNotFound(instance, name);
+ TestFieldOk(lib, name, false, "top");
+
+ // Hidden top-level field.
+ name = Dart_NewString("_top_fld");
+ TestFieldNotFound(cls, name);
+ TestFieldNotFound(instance, name);
+ TestFieldOk(lib, name, false, "hidden top");
+
+ // Top-Level final field.
+ name = Dart_NewString("final_top_fld");
+ TestFieldNotFound(cls, name);
+ TestFieldNotFound(instance, name);
+ TestFieldOk(lib, name, true, "final top");
+
+ // Hidden top-level final field.
+ name = Dart_NewString("_final_top_fld");
+ TestFieldNotFound(cls, name);
+ TestFieldNotFound(instance, name);
+ TestFieldOk(lib, name, true, "hidden final top");
+
+ // Top-Level get/set field.
+ name = Dart_NewString("top_getset_fld");
+ TestFieldNotFound(cls, name);
+ TestFieldNotFound(instance, name);
+ TestFieldOk(lib, name, false, "top getset");
+
+ // Hidden top-level get/set field.
+ name = Dart_NewString("_top_getset_fld");
+ TestFieldNotFound(cls, name);
+ TestFieldNotFound(instance, name);
+ TestFieldOk(lib, name, false, "hidden top getset");
+}
+
+
+TEST_CASE(FieldAccessOld) {
+ const char* kScriptChars =
"class Fields {\n"
" Fields(int i, int j) : fld1 = i, fld2 = j {}\n"
" int fld1;\n"

Powered by Google App Engine
This is Rietveld 408576698