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

Unified Diff: test/mjsunit/harmony/object-observe.js

Issue 116083006: Make Function.length and Function.name configurable properties. (Closed) Base URL: git://github.com/v8/v8.git@bleeding_edge
Patch Set: Created 7 years 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 | « test/cctest/test-accessors.cc ('k') | test/mjsunit/regress/regress-1530.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/harmony/object-observe.js
diff --git a/test/mjsunit/harmony/object-observe.js b/test/mjsunit/harmony/object-observe.js
index 72a9cadbf8ecb9df05a37593055e58e3c44f7efc..49822d251540e697f3a356b4417aad143465b6c0 100644
--- a/test/mjsunit/harmony/object-observe.js
+++ b/test/mjsunit/harmony/object-observe.js
@@ -975,16 +975,26 @@ observer.assertNotCalled();
// Test all kinds of objects generically.
-function TestObserveConfigurable(obj, prop) {
+function TestObserveConfigurable(obj, prop, is_writable) {
reset();
+ var valueWhenDeleted = is_writable ? 3 : obj[prop];
Object.observe(obj, observer.callback);
Object.unobserve(obj, observer.callback);
obj[prop] = 1;
Object.observe(obj, observer.callback);
obj[prop] = 2;
- obj[prop] = 3;
+ obj[prop] = valueWhenDeleted;
delete obj[prop];
- obj[prop] = 4;
+ // If the deleted obj[prop] exposed another 'prop' along
+ // the prototype chain, do not update it, but create an
+ // own property with the descriptor that [[Put]] mandates
+ // for a new property (ES-5.1, 8.12.5.6)
+ //
+ // (Q: do this unconditionally?)
+ if (Object.getPrototypeOf(obj) && (prop in Object.getPrototypeOf(obj)))
rossberg 2014/01/09 12:26:39 Only do this fall-back when really necessary, i.e.
sof 2014/01/09 14:04:51 Done, I think (but it feels counterintuitive to "r
+ Object.defineProperty(obj, prop, {value: 4, writable: true, enumerable: true, configurable: true});
rossberg 2014/01/09 12:26:39 Nit: line length
+ else
+ obj[prop] = 4;
obj[prop] = 4; // ignored
obj[prop] = 5;
Object.defineProperty(obj, prop, {value: 6});
@@ -1014,34 +1024,40 @@ function TestObserveConfigurable(obj, prop) {
delete obj[prop];
Object.defineProperty(obj, prop, {value: 11, configurable: true});
Object.deliverChangeRecords(observer.callback);
- observer.assertCallbackRecords([
- { object: obj, name: prop, type: "update", oldValue: 1 },
- { object: obj, name: prop, type: "update", oldValue: 2 },
- { object: obj, name: prop, type: "delete", oldValue: 3 },
- { object: obj, name: prop, type: "add" },
- { object: obj, name: prop, type: "update", oldValue: 4 },
- { object: obj, name: prop, type: "update", oldValue: 5 },
- { object: obj, name: prop, type: "reconfigure" },
- { object: obj, name: prop, type: "update", oldValue: 6 },
- { object: obj, name: prop, type: "reconfigure", oldValue: 8 },
- { object: obj, name: prop, type: "reconfigure", oldValue: 7 },
- { object: obj, name: prop, type: "reconfigure" },
- { object: obj, name: prop, type: "reconfigure" },
- { object: obj, name: prop, type: "reconfigure" },
- { object: obj, name: prop, type: "reconfigure" },
- { object: obj, name: prop, type: "reconfigure" },
- { object: obj, name: prop, type: "delete" },
- { object: obj, name: prop, type: "add" },
- { object: obj, name: prop, type: "delete" },
- { object: obj, name: prop, type: "add" },
- { object: obj, name: prop, type: "reconfigure" },
- { object: obj, name: prop, type: "update", oldValue: 9 },
- { object: obj, name: prop, type: "update", oldValue: 10 },
- { object: obj, name: prop, type: "update", oldValue: 11 },
- { object: obj, name: prop, type: "update", oldValue: 12 },
- { object: obj, name: prop, type: "delete", oldValue: 36 },
- { object: obj, name: prop, type: "add" },
- ]);
+
+ var expected = [
+ { object: obj, name: prop, type: "delete", oldValue: valueWhenDeleted },
+ { object: obj, name: prop, type: "add" },
+ { object: obj, name: prop, type: "update", oldValue: 4 },
+ { object: obj, name: prop, type: "update", oldValue: 5 },
+ { object: obj, name: prop, type: "reconfigure" },
+ { object: obj, name: prop, type: "update", oldValue: 6 },
+ { object: obj, name: prop, type: "reconfigure", oldValue: 8 },
+ { object: obj, name: prop, type: "reconfigure", oldValue: 7 },
+ { object: obj, name: prop, type: "reconfigure" },
+ { object: obj, name: prop, type: "reconfigure" },
+ { object: obj, name: prop, type: "reconfigure" },
+ { object: obj, name: prop, type: "reconfigure" },
+ { object: obj, name: prop, type: "reconfigure" },
+ { object: obj, name: prop, type: "delete" },
+ { object: obj, name: prop, type: "add" },
+ { object: obj, name: prop, type: "delete" },
+ { object: obj, name: prop, type: "add" },
+ { object: obj, name: prop, type: "reconfigure" },
+ { object: obj, name: prop, type: "update", oldValue: 9 },
+ { object: obj, name: prop, type: "update", oldValue: 10 },
+ { object: obj, name: prop, type: "update", oldValue: 11 },
+ { object: obj, name: prop, type: "update", oldValue: 12 },
+ { object: obj, name: prop, type: "delete", oldValue: 36 },
+ { object: obj, name: prop, type: "add" },
+ ];
+
+ if (is_writable) {
+ expected.unshift({ object: obj, name: prop, type: "update", oldValue: 1 },
+ { object: obj, name: prop, type: "update", oldValue: 2 });
+ }
+
+ observer.assertCallbackRecords(expected);
Object.unobserve(obj, observer.callback);
delete obj[prop];
}
@@ -1143,7 +1159,7 @@ for (var i in objects) for (var j in properties) {
var desc = Object.getOwnPropertyDescriptor(obj, prop);
print("***", typeof obj, stringifyNoThrow(obj), prop);
if (!desc || desc.configurable)
- TestObserveConfigurable(obj, prop);
+ TestObserveConfigurable(obj, prop, !desc || desc.writable);
else if (desc.writable)
TestObserveNonConfigurable(obj, prop, desc);
}
« no previous file with comments | « test/cctest/test-accessors.cc ('k') | test/mjsunit/regress/regress-1530.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698