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

Unified Diff: test/mjsunit/harmony/super.js

Issue 934463003: super.property store (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: cleanup Created 5 years, 10 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
« src/objects.cc ('K') | « src/objects.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/harmony/super.js
diff --git a/test/mjsunit/harmony/super.js b/test/mjsunit/harmony/super.js
index d5296424368412af771fb257327bcf63bd7a7801..bad955efe52b6bbb3ae8ae9f565d5b2136f9c23e 100644
--- a/test/mjsunit/harmony/super.js
+++ b/test/mjsunit/harmony/super.js
@@ -595,7 +595,7 @@
setCalled = 0;
getCalled = 0;
assertEquals('object', typeof this);
- assertTrue(this instanceof Number)
+ assertInstanceof(this, Number)
assertEquals(42, this.valueOf());
assertEquals(1, super.x);
assertEquals(1, getCalled);
@@ -635,7 +635,7 @@
try {
super.newProperty = 15;
} catch (e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ assertInstanceof(ex, TypeError);
}
}
@@ -654,7 +654,7 @@
super.toString();
} catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ assertInstanceof(ex, TypeError);
}
};
@@ -689,7 +689,7 @@
setCalled = 0;
getCalled = 0;
assertEquals('object', typeof this);
- assertTrue(this instanceof Number)
+ assertInstanceof(this, Number)
assertEquals(42, this.valueOf());
assertEquals(1, super[x]);
assertEquals(1, getCalled);
@@ -729,7 +729,7 @@
try {
super[newProperty] = 15;
} catch (e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ assertInstanceof(ex,TypeError);
}
};
@@ -748,7 +748,7 @@
super[toString]();
} catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ assertInstanceof(ex, TypeError);
}
};
DerivedFromString.prototype.f.call(42);
@@ -784,7 +784,7 @@
setCalled = 0;
getCalled = 0;
assertEquals('object', typeof this);
- assertTrue(this instanceof Number)
+ assertInstanceof(this, Number)
assertEquals(42, this.valueOf());
assertEquals(1, super[x]);
assertEquals(1, getCalled);
@@ -824,7 +824,7 @@
try {
super[newProperty] = 15;
} catch (e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ assertInstanceof(ex, TypeError);
}
};
@@ -849,13 +849,13 @@
try {
super[5] = 'q';
} catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ assertInstanceof(ex, TypeError);
ex = null;
try {
super[1024] = 'q';
} catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ assertInstanceof(ex, TypeError);
}
};
@@ -963,8 +963,110 @@
}());
-(function TestSetterCreatingOwnProperties() {
- var setterCalled;
+(function TestSetterCreatingOwnPropertiesReconfigurable() {
+ function Base() {}
+ function Derived() {}
+ Derived.prototype = {
+ __proto__: Base.prototype,
+ mSloppy() {
+ assertEquals(42, this.ownReadOnly);
+ super.ownReadOnly = 55;
+ assertEquals(55, this.ownReadOnly);
+ var descr = Object.getOwnPropertyDescriptor(this, 'ownReadOnly');
+ assertEquals(55, descr.value);
+ assertTrue(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertFalse(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty('ownReadOnly'));
+
+ assertEquals(15, this.ownReadonlyAccessor);
+ super.ownReadonlyAccessor = 25;
+ assertEquals(25, this.ownReadonlyAccessor);
+ var descr = Object.getOwnPropertyDescriptor(this, 'ownReadonlyAccessor');
+ assertEquals(25, descr.value);
+ assertTrue(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertTrue(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty('ownReadonlyAccessor'));
+
+ super.ownSetter = 35;
+ assertEquals(35, this.ownSetter);
+ var descr = Object.getOwnPropertyDescriptor(this, 'ownSetter');
+ assertEquals(35, descr.value);
+ assertTrue(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertTrue(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty('ownSetter'));
+ },
+ mStrict() {
+ 'use strict';
+ assertEquals(42, this.ownReadOnly);
+ super.ownReadOnly = 55;
+ assertEquals(55, this.ownReadOnly);
+ var descr = Object.getOwnPropertyDescriptor(this, 'ownReadOnly');
+ assertEquals(55, descr.value);
+ assertTrue(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertFalse(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty('ownReadOnly'));
+
+ assertEquals(15, this.ownReadonlyAccessor);
+ super.ownReadonlyAccessor = 25;
+ assertEquals(25, this.ownReadonlyAccessor);
+ var descr = Object.getOwnPropertyDescriptor(this, 'ownReadonlyAccessor');
+ assertEquals(25, descr.value);
+ assertTrue(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertTrue(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty('ownReadonlyAccessor'));
+
+ super.ownSetter = 35;
+ assertEquals(35, this.ownSetter);
+ var descr = Object.getOwnPropertyDescriptor(this, 'ownSetter');
+ assertEquals(35, descr.value);
+ assertTrue(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertTrue(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty('ownSetter'));
+ },
+ };
+
+ var d = new Derived();
+ Object.defineProperty(d, 'ownReadOnly', {
+ value: 42,
+ writable: false,
+ configurable: true
+ });
+ Object.defineProperty(d, 'ownSetter', {
+ set: function() { assertUnreachable(); },
+ configurable: true
+ });
+ Object.defineProperty(d, 'ownReadonlyAccessor', {
+ get: function() { return 15; },
+ configurable: true
+ });
+
+ d.mSloppy();
+
+ var d = new Derived();
+ Object.defineProperty(d, 'ownReadOnly', {
+ value: 42,
+ writable: false,
+ configurable: true
+ });
+ Object.defineProperty(d, 'ownSetter', {
+ set: function() { assertUnreachable(); },
+ configurable: true
+ });
+ Object.defineProperty(d, 'ownReadonlyAccessor', {
+ get: function() { return 15; },
+ configurable: true
+ });
+ d.mStrict();
+}());
+
+
+(function TestSetterCreatingOwnPropertiesNonConfigurable() {
function Base() {}
function Derived() {}
Derived.prototype = {
@@ -973,43 +1075,74 @@
assertEquals(42, this.ownReadOnly);
super.ownReadOnly = 55;
assertEquals(42, this.ownReadOnly);
+ var descr = Object.getOwnPropertyDescriptor(this, 'ownReadOnly');
+ assertEquals(42, descr.value);
+ assertFalse(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertFalse(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty('ownReadOnly'));
+ var ex;
assertEquals(15, this.ownReadonlyAccessor);
- super.ownReadonlyAccessor = 55;
+ try {
+ super.ownReadonlyAccessor = 25;
+ } catch (e) {
+ ex = e;
+ }
+ assertInstanceof(ex, TypeError);
+ assertEquals('Cannot redefine property: ownReadonlyAccessor', ex.message);
assertEquals(15, this.ownReadonlyAccessor);
- setterCalled = 0;
- super.ownSetter = 42;
- assertEquals(1, setterCalled);
+ ex = null;
+ try {
+ super.ownSetter = 35;
+ } catch (e) {
+ ex = e;
+ }
+ assertInstanceof(ex, TypeError);
+ assertEquals('Cannot redefine property: ownSetter', ex.message);
},
mStrict() {
'use strict';
- assertEquals(42, this.ownReadOnly);
var ex;
+ assertEquals(42, this.ownReadOnly);
try {
super.ownReadOnly = 55;
- } catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ } catch (e) {
+ ex = e;
+ }
+ assertInstanceof(ex, TypeError);
+ assertEquals(
+ 'Cannot assign to read only property \'ownReadOnly\' of #<Base>',
+ ex.message);
assertEquals(42, this.ownReadOnly);
- assertEquals(15, this.ownReadonlyAccessor);
ex = null;
+ assertEquals(15, this.ownReadonlyAccessor);
try {
- super.ownReadonlyAccessor = 55;
- } catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ super.ownReadonlyAccessor = 25;
+ } catch (e) {
+ ex = e;
+ }
+ assertInstanceof(ex, TypeError);
+ assertEquals('Cannot redefine property: ownReadonlyAccessor', ex.message);
assertEquals(15, this.ownReadonlyAccessor);
- setterCalled = 0;
- super.ownSetter = 42;
- assertEquals(1, setterCalled);
+ ex = null;
+ try {
+ super.ownSetter = 35;
+ } catch (e) {
+ ex = e;
+ }
+ assertInstanceof(ex, TypeError);
+ assertEquals('Cannot redefine property: ownSetter', ex.message);
}
};
var d = new Derived();
Object.defineProperty(d, 'ownReadOnly', { value : 42, writable : false });
Object.defineProperty(d, 'ownSetter',
- { set : function() { setterCalled++; } });
+ { set : function() { assertUnreachable(); } });
Object.defineProperty(d, 'ownReadonlyAccessor',
{ get : function() { return 15; }});
d.mSloppy();
@@ -1076,11 +1209,11 @@
}());
-(function TestKeyedSetterCreatingOwnProperties() {
+(function TestKeyedSetterCreatingOwnPropertiesReconfigurable() {
var ownReadOnly = 'ownReadOnly';
var ownReadonlyAccessor = 'ownReadonlyAccessor';
var ownSetter = 'ownSetter';
- var setterCalled;
+
function Base() {}
function Derived() {}
Derived.prototype = {
@@ -1088,56 +1221,107 @@
mSloppy() {
assertEquals(42, this[ownReadOnly]);
super[ownReadOnly] = 55;
- assertEquals(42, this[ownReadOnly]);
+ assertEquals(55, this[ownReadOnly]);
+ var descr = Object.getOwnPropertyDescriptor(this, ownReadOnly);
+ assertEquals(55, descr.value);
+ assertTrue(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertFalse(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty(ownReadOnly));
assertEquals(15, this[ownReadonlyAccessor]);
- super[ownReadonlyAccessor] = 55;
- assertEquals(15, this[ownReadonlyAccessor]);
-
- setterCalled = 0;
- super[ownSetter] = 42;
- assertEquals(1, setterCalled);
+ super[ownReadonlyAccessor] = 25;
+ assertEquals(25, this[ownReadonlyAccessor]);
+ var descr = Object.getOwnPropertyDescriptor(this, ownReadonlyAccessor);
+ assertEquals(25, descr.value);
+ assertTrue(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertTrue(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty(ownReadonlyAccessor));
+
+ super[ownSetter] = 35;
+ assertEquals(35, this[ownSetter]);
+ var descr = Object.getOwnPropertyDescriptor(this, ownSetter);
+ assertEquals(35, descr.value);
+ assertTrue(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertTrue(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty(ownSetter));
},
mStrict() {
'use strict';
assertEquals(42, this[ownReadOnly]);
- var ex;
- try {
- super[ownReadOnly] = 55;
- } catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
- assertEquals(42, this[ownReadOnly]);
+ super[ownReadOnly] = 55;
+ assertEquals(55, this[ownReadOnly]);
+ var descr = Object.getOwnPropertyDescriptor(this, ownReadOnly);
+ assertEquals(55, descr.value);
+ assertTrue(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertFalse(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty(ownReadOnly));
assertEquals(15, this[ownReadonlyAccessor]);
- ex = null;
- try {
- super[ownReadonlyAccessor] = 55;
- } catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
- assertEquals(15, this[ownReadonlyAccessor]);
-
- setterCalled = 0;
- super[ownSetter] = 42;
- assertEquals(1, setterCalled);
- }
+ super[ownReadonlyAccessor] = 25;
+ assertEquals(25, this[ownReadonlyAccessor]);
+ var descr = Object.getOwnPropertyDescriptor(this, 'ownReadonlyAccessor');
+ assertEquals(25, descr.value);
+ assertTrue(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertTrue(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty('ownReadonlyAccessor'));
+
+ super[ownSetter] = 35;
+ assertEquals(35, this[ownSetter]);
+ var descr = Object.getOwnPropertyDescriptor(this, ownSetter);
+ assertEquals(35, descr.value);
+ assertTrue(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertTrue(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty(ownSetter));
+ },
};
var d = new Derived();
- Object.defineProperty(d, 'ownReadOnly', { value : 42, writable : false });
- Object.defineProperty(d, 'ownSetter',
- { set : function() { setterCalled++; } });
- Object.defineProperty(d, 'ownReadonlyAccessor',
- { get : function() { return 15; }});
+ Object.defineProperty(d, ownReadOnly, {
+ value: 42,
+ writable: false,
+ configurable: true
+ });
+ Object.defineProperty(d, ownSetter, {
+ set: function() { assertUnreachable(); },
+ configurable: true
+ });
+ Object.defineProperty(d, ownReadonlyAccessor, {
+ get: function() { return 15; },
+ configurable: true
+ });
+
d.mSloppy();
+
+ var d = new Derived();
+ Object.defineProperty(d, ownReadOnly, {
+ value: 42,
+ writable: false,
+ configurable: true
+ });
+ Object.defineProperty(d, ownSetter, {
+ set: function() { assertUnreachable(); },
+ configurable: true
+ });
+ Object.defineProperty(d, ownReadonlyAccessor, {
+ get: function() { return 15; },
+ configurable: true
+ });
d.mStrict();
-}());
+})();
-(function TestKeyedNumericSetterCreatingOwnProperties() {
- var ownReadOnly = 42;
- var ownReadonlyAccessor = 43;
- var ownSetter = 44;
+(function TestKeyedSetterCreatingOwnPropertiesNonConfigurable() {
+ var ownReadOnly = 'ownReadOnly';
+ var ownReadonlyAccessor = 'ownReadonlyAccessor';
+ var ownSetter = 'ownSetter';
var setterCalled;
+
function Base() {}
function Derived() {}
Derived.prototype = {
@@ -1146,50 +1330,152 @@
assertEquals(42, this[ownReadOnly]);
super[ownReadOnly] = 55;
assertEquals(42, this[ownReadOnly]);
+ var descr = Object.getOwnPropertyDescriptor(this, ownReadOnly);
+ assertEquals(42, descr.value);
+ assertFalse(descr.configurable);
+ assertFalse(descr.enumerable);
+ assertFalse(descr.writable);
+ assertFalse(Base.prototype.hasOwnProperty(ownReadOnly));
+ var ex;
assertEquals(15, this[ownReadonlyAccessor]);
- super[ownReadonlyAccessor] = 55;
+ try {
+ super[ownReadonlyAccessor] = 25;
+ } catch (e) {
+ ex = e;
+ }
+ assertInstanceof(ex, TypeError);
+ assertEquals('Cannot redefine property: ownReadonlyAccessor', ex.message);
assertEquals(15, this[ownReadonlyAccessor]);
setterCalled = 0;
- super[ownSetter] = 42;
- assertEquals(1, setterCalled);
+ ex = null;
+ try {
+ super[ownSetter] = 35;
+ } catch (e) {
+ ex = e;
+ }
+ assertInstanceof(ex, TypeError);
+ assertEquals('Cannot redefine property: ownSetter', ex.message);
+ assertEquals(0, setterCalled);
},
mStrict() {
'use strict';
- assertEquals(42, this[ownReadOnly]);
var ex;
+ assertEquals(42, this.ownReadOnly);
try {
- super[ownReadOnly] = 55;
- } catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
- assertEquals(42, this[ownReadOnly]);
+ super.ownReadOnly = 55;
+ } catch (e) {
+ ex = e;
+ }
+ assertInstanceof(ex, TypeError);
+ assertEquals(
+ 'Cannot assign to read only property \'ownReadOnly\' of #<Base>',
+ ex.message);
+ assertEquals(42, this.ownReadOnly);
- assertEquals(15, this[ownReadonlyAccessor]);
ex = null;
+ assertEquals(15, this[ownReadonlyAccessor]);
try {
- super[ownReadonlyAccessor] = 55;
- } catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ super[ownReadonlyAccessor] = 25;
+ } catch (e) {
+ ex = e;
+ }
+ assertInstanceof(ex, TypeError);
+ assertEquals('Cannot redefine property: ownReadonlyAccessor', ex.message);
assertEquals(15, this[ownReadonlyAccessor]);
setterCalled = 0;
- super[ownSetter] = 42;
- assertEquals(1, setterCalled);
+ ex = null;
+ try {
+ super[ownSetter] = 35;
+ } catch (e) {
+ ex = e;
+ }
+ assertInstanceof(ex, TypeError);
+ assertEquals('Cannot redefine property: ownSetter', ex.message);
+ assertEquals(0, setterCalled);
}
- }
+ };
var d = new Derived();
- Object.defineProperty(d, ownReadOnly, { value : 42, writable : false });
- Object.defineProperty(d, ownSetter,
+ Object.defineProperty(d, 'ownReadOnly', { value : 42, writable : false });
+ Object.defineProperty(d, 'ownSetter',
{ set : function() { setterCalled++; } });
- Object.defineProperty(d, ownReadonlyAccessor,
+ Object.defineProperty(d, 'ownReadonlyAccessor',
{ get : function() { return 15; }});
d.mSloppy();
d.mStrict();
+
}());
+// TODO(arv): This is broken
arv (Not doing code reviews) 2015/02/17 20:41:22 The runtime calls SetElementWithInterceptor. It do
+// (function TestKeyedNumericSetterCreatingOwnProperties() {
+// var ownReadOnly = 42;
+// var ownReadonlyAccessor = 43;
+// var ownSetter = 44;
+// var setterCalled;
+
+// function Base() {}
+// function Derived() {}
+// Derived.prototype = {
+// __proto__: Base.prototype,
+// mSloppy() {
+// assertEquals(42, this[ownReadOnly]);
+// super[ownReadOnly] = 55;
+// assertEquals(42, this[ownReadOnly]);
+
+// var ex;
+// assertEquals(15, this[ownReadonlyAccessor]);
+// try {
+// super[ownReadonlyAccessor] = 55;
+// } catch (e) {
+// ex = e;
+// }
+// assertInstanceof(ex, TypeError);
+// assertEquals('Cannot redefine property: 43', ex.message);
+// assertEquals(15, this[ownReadonlyAccessor]);
+
+// // setterCalled = 0;
+// // super[ownSetter] = 42;
+// // assertEquals(1, setterCalled);
+// },
+// mStrict() {
+// // 'use strict';
+// // assertEquals(42, this[ownReadOnly]);
+// // var ex;
+// // try {
+// // super[ownReadOnly] = 55;
+// // } catch(e) { ex = e; }
+// // assertInstanceof(ex, TypeError);
+// // assertEquals(42, this[ownReadOnly]);
+
+// // assertEquals(15, this[ownReadonlyAccessor]);
+// // ex = null;
+// // try {
+// // super[ownReadonlyAccessor] = 55;
+// // } catch(e) { ex = e; }
+// // assertInstanceof(ex, TypeError);
+// // assertEquals(15, this[ownReadonlyAccessor]);
+
+// // setterCalled = 0;
+// // super[ownSetter] = 42;
+// // assertEquals(1, setterCalled);
+// }
+// }
+
+// var d = new Derived();
+// Object.defineProperty(d, ownReadOnly, { value : 42, writable : false });
+// Object.defineProperty(d, ownSetter,
+// { set : function() { setterCalled++; } });
+// Object.defineProperty(d, ownReadonlyAccessor,
+// { get : function() { return 15; }});
+// d.mSloppy();
+// d.mStrict();
+// }());
+
+
(function TestSetterNoProtoWalk() {
function Base() {}
function Derived() {}
@@ -1684,7 +1970,7 @@
assertEquals(27, this.x);
var ex = null;
try { super.x = 10; } catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ assertInstanceof(ex, TypeError);
assertEquals(27, super.x);
assertEquals(27, this.x);
}
@@ -1716,7 +2002,7 @@
assertEquals(27, this[x]);
var ex = null;
try { super[x] = 10; } catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ assertInstanceof(ex, TypeError);
assertEquals(27, super[x]);
assertEquals(27, this[x]);
}
@@ -1748,7 +2034,7 @@
assertEquals(27, this[x]);
var ex = null;
try { super[x] = 10; } catch(e) { ex = e; }
- assertTrue(ex instanceof TypeError);
+ assertInstanceof(ex, TypeError);
assertEquals(27, super[x]);
assertEquals(27, this[x]);
}
@@ -1845,7 +2131,7 @@
var f = new F(42);
// TODO(dslomov,arv): Fix this. BUG=v8:3886.
- assertTrue(f instanceof Number);
+ assertInstanceof(f, Number);
}());
(function TestSuperCallErrorCases() {
« src/objects.cc ('K') | « src/objects.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698