Commit f0829575 authored by dslomov@chromium.org's avatar dslomov@chromium.org

Clean-up tests for super getters and setters

R=arv@chromium.org

Review URL: https://codereview.chromium.org/617443003

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24292 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent a36dee4d
...@@ -521,7 +521,7 @@ class FullCodeGenerator: public AstVisitor { ...@@ -521,7 +521,7 @@ class FullCodeGenerator: public AstVisitor {
// The receiver is left on the stack by the IC. // The receiver is left on the stack by the IC.
void EmitNamedPropertyLoad(Property* expr); void EmitNamedPropertyLoad(Property* expr);
// Load a value from super.named prroperty. // Load a value from super.named property.
// Expect receiver ('this' value) and home_object on the stack. // Expect receiver ('this' value) and home_object on the stack.
void EmitNamedSuperPropertyLoad(Property* expr); void EmitNamedSuperPropertyLoad(Property* expr);
......
...@@ -120,17 +120,17 @@ ...@@ -120,17 +120,17 @@
(function TestAccessorsOnPrimitives() { (function TestAccessorsOnPrimitives() {
var getCalled = false; var getCalled = 0;
var setCalled = false; var setCalled = 0;
function Base() {} function Base() {}
Base.prototype = { Base.prototype = {
constructor: Base, constructor: Base,
get x() { get x() {
getCalled = true; getCalled++;
return 1; return 1;
}, },
set x(v) { set x(v) {
setCalled = true; setCalled++;
return v; return v;
}, },
}; };
...@@ -141,46 +141,41 @@ ...@@ -141,46 +141,41 @@
constructor: Derived, constructor: Derived,
}; };
Derived.prototype.testSetter = function() { Derived.prototype.testSetter = function() {
assertTrue(42 == this); setCalled = 0;
getCalled = false; getCalled = 0;
setCalled = false; assertEquals('object', typeof this);
assertTrue(this instanceof Number)
assertEquals(42, this.valueOf());
assertEquals(1, super.x); assertEquals(1, super.x);
assertTrue(getCalled); assertEquals(1, getCalled);
assertFalse(setCalled); assertEquals(0, setCalled);
setCalled = false;
getCalled = false;
assertEquals(5, super.x = 5); assertEquals(5, super.x = 5);
assertFalse(getCalled); assertEquals(1, getCalled);
assertTrue(setCalled); assertEquals(1, setCalled);
getCalled = false;
setCalled = false;
assertEquals(6, super.x += 5); assertEquals(6, super.x += 5);
assertTrue(getCalled); assertEquals(2, getCalled);
assertTrue(setCalled); assertEquals(2, setCalled);
}.toMethod(Derived.prototype); }.toMethod(Derived.prototype);
Derived.prototype.testSetterStrict = function() { Derived.prototype.testSetterStrict = function() {
'use strict'; 'use strict';
assertTrue(42 == this); getCalled = 0;
getCalled = false; setCalled = 0;
setCalled = false; assertTrue(42 === this);
assertEquals(1, super.x); assertEquals(1, super.x);
assertTrue(getCalled); assertEquals(1, getCalled);
assertFalse(setCalled); assertEquals(0, setCalled);
setCalled = false;
getCalled = false;
assertEquals(5, super.x = 5); assertEquals(5, super.x = 5);
assertFalse(getCalled); assertEquals(1, getCalled);
assertTrue(setCalled); assertEquals(1, setCalled);
getCalled = false;
setCalled = false;
assertEquals(6, super.x += 5); assertEquals(6, super.x += 5);
assertTrue(getCalled); assertEquals(2, getCalled);
assertTrue(setCalled); assertEquals(2, setCalled);
}.toMethod(Derived.prototype); }.toMethod(Derived.prototype);
Derived.prototype.testSetter.call(42); Derived.prototype.testSetter.call(42);
...@@ -191,13 +186,14 @@ ...@@ -191,13 +186,14 @@
function f() { function f() {
'use strict'; 'use strict';
assertTrue(42 == this); assertTrue(42 === this);
assertEquals(String.prototype.toString, super.toString); assertEquals(String.prototype.toString, super.toString);
var except = false; var ex;
try { try {
super.toString(); super.toString();
} catch(e) { except = true; } } catch(e) { ex = e; }
assertTrue(except);
assertTrue(ex instanceof TypeError);
} }
f.toMethod(DerivedFromString.prototype).call(42); f.toMethod(DerivedFromString.prototype).call(42);
}()); }());
...@@ -213,7 +209,7 @@ ...@@ -213,7 +209,7 @@
}.toMethod(Derived.prototype); }.toMethod(Derived.prototype);
Derived.prototype.mStrict = function () { Derived.prototype.mStrict = function () {
"use strict"; 'use strict';
super.x = 10; super.x = 10;
}.toMethod(Derived.prototype); }.toMethod(Derived.prototype);
var d = new Derived(); var d = new Derived();
...@@ -276,7 +272,7 @@ ...@@ -276,7 +272,7 @@
(function TestUnsupportedCases() { (function TestUnsupportedCases() {
function f1(x) { return super[x]; } function f1(x) { return super[x]; }
function f2(x) { super[x] = 5; } function f2(x) { super[x] = 5; }
var o = {} var o = {};
assertThrows(function(){f1.toMethod(o)(x);}, ReferenceError); assertThrows(function(){f1.toMethod(o)(x);}, ReferenceError);
assertThrows(function(){f2.toMethod(o)(x);}, ReferenceError); assertThrows(function(){f2.toMethod(o)(x);}, ReferenceError);
}()); }());
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment