Index: test/cctest/test-object-observe.cc |
diff --git a/test/cctest/test-object-observe.cc b/test/cctest/test-object-observe.cc |
index 25e5557a89913d9b5c2895d06e6e69d885d7cec0..4b65293fcb2639ac887f1218b1fb88bbaadf61be 100644 |
--- a/test/cctest/test-object-observe.cc |
+++ b/test/cctest/test-object-observe.cc |
@@ -278,3 +278,50 @@ TEST(GlobalObjectObservation) { |
} |
CHECK_EQ(3, CompileRun("records.length")->Int32Value()); |
} |
+ |
+TEST(APITestBasicMutation) { |
+ HarmonyIsolate isolate; |
+ HandleScope scope; |
+ LocalContext context; |
+ Handle<Object> obj = Handle<Object>::Cast(CompileRun( |
+ "var records = [];" |
+ "var obj = {};" |
+ "function observer(r) { [].push.apply(records, r); };" |
+ "Object.observe(obj, observer);" |
+ "obj")); |
+ obj->Set(String::New("foo"), Number::New(1)); |
+ obj->Set(1, Number::New(2)); |
+ // ForceSet should work just as well as Set |
+ obj->ForceSet(String::New("foo"), Number::New(3)); |
+ obj->ForceSet(Number::New(1), Number::New(4)); |
+ // Setting an indexed element via the property setting method |
+ obj->Set(Number::New(1), Number::New(5)); |
+ // Setting with a non-String, non-uint32 key |
+ obj->Set(Number::New(1.1), Number::New(6), DontDelete); |
+ obj->Delete(String::New("foo")); |
+ obj->Delete(1); |
+ obj->ForceDelete(Number::New(1.1)); |
+ |
+ // Force delivery |
+ // TODO(adamk): Should the above set methods trigger delivery themselves? |
+ CompileRun("void 0"); |
+ CHECK_EQ(9, CompileRun("records.length")->Int32Value()); |
+ ExpectString("records[0].type", "new"); |
rossberg
2012/12/18 13:35:58
Can you check object and oldValue as well? Perhaps
adamk
2012/12/18 17:26:10
Added a helper. Will do a cleanup in a future chan
|
+ ExpectString("records[0].name", "foo"); |
+ ExpectString("records[1].type", "new"); |
+ ExpectString("records[1].name", "1"); |
+ ExpectString("records[2].type", "updated"); |
+ ExpectString("records[2].name", "foo"); |
+ ExpectString("records[3].type", "updated"); |
+ ExpectString("records[3].name", "1"); |
+ ExpectString("records[4].type", "updated"); |
+ ExpectString("records[4].name", "1"); |
+ ExpectString("records[5].type", "new"); |
+ ExpectString("records[5].name", "1.1"); |
+ ExpectString("records[6].type", "deleted"); |
+ ExpectString("records[6].name", "foo"); |
+ ExpectString("records[7].type", "deleted"); |
+ ExpectString("records[7].name", "1"); |
+ ExpectString("records[8].type", "deleted"); |
+ ExpectString("records[8].name", "1.1"); |
+} |