e36aacdee2
R=verwaest@chromium.org, arv@chromium.org BUG=v8:3330 LOG=N Review URL: https://codereview.chromium.org/527963002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24078 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
128 lines
2.9 KiB
JavaScript
128 lines
2.9 KiB
JavaScript
// Copyright 2014 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
//
|
|
// Flags: --harmony-classes
|
|
|
|
|
|
(function TestSuperNamedLoads() {
|
|
function Base() { }
|
|
function Derived() {
|
|
this.derivedDataProperty = "xxx";
|
|
}
|
|
Derived.prototype = Object.create(Base.prototype);
|
|
|
|
function fBase() { return "Base " + this.toString(); }
|
|
|
|
Base.prototype.f = fBase.toMethod(Base.prototype);
|
|
|
|
function fDerived() {
|
|
assertEquals("Base this is Derived", super.f());
|
|
assertEquals(15, super.x);
|
|
assertEquals(27, this.x);
|
|
|
|
return "Derived"
|
|
}
|
|
|
|
Base.prototype.x = 15;
|
|
Base.prototype.toString = function() { return "this is Base"; };
|
|
Derived.prototype.toString = function() { return "this is Derived"; };
|
|
Derived.prototype.x = 27;
|
|
Derived.prototype.f = fDerived.toMethod(Derived.prototype);
|
|
|
|
assertEquals("Base this is Base", new Base().f());
|
|
assertEquals("Derived", new Derived().f());
|
|
}());
|
|
|
|
(function TestSuperKeywordNonMethod() {
|
|
function f() {
|
|
super.unknown();
|
|
}
|
|
|
|
assertThrows(f, ReferenceError);
|
|
}());
|
|
|
|
|
|
(function TestGetter() {
|
|
function Base() {}
|
|
var derived;
|
|
Base.prototype = {
|
|
constructor: Base,
|
|
get x() {
|
|
assertSame(this, derived);
|
|
return this._x;
|
|
},
|
|
_x: 'base'
|
|
};
|
|
|
|
function Derived() {}
|
|
Derived.__proto__ = Base;
|
|
Derived.prototype = {
|
|
__proto__: Base.prototype,
|
|
constructor: Derived,
|
|
_x: 'derived'
|
|
};
|
|
Derived.prototype.testGetter = function() {
|
|
return super.x;
|
|
}.toMethod(Derived.prototype);
|
|
derived = new Derived();
|
|
assertEquals('derived', derived.testGetter());
|
|
}());
|
|
|
|
/*
|
|
* TODO[dslomov]: named stores and keyed loads/stores not implemented yet.
|
|
(function TestSetter() {
|
|
function Base() {}
|
|
Base.prototype = {
|
|
constructor: Base,
|
|
get x() {
|
|
return this._x;
|
|
},
|
|
set x(v) {
|
|
this._x = v;
|
|
},
|
|
_x: 'base'
|
|
};
|
|
|
|
function Derived() {}
|
|
Derived.__proto__ = Base;
|
|
Derived.prototype = {
|
|
__proto__: Base.prototype,
|
|
constructor: Derived,
|
|
_x: 'derived'
|
|
};
|
|
Derived.prototype.testSetter = function() {
|
|
super.x = 'foobar';
|
|
}.toMethod(Derived.prototype);
|
|
var d = new Derived();
|
|
d.testSetter();
|
|
assertEquals('base', Base.prototype._x);
|
|
assertEquals('foobar', d._x);
|
|
}());
|
|
|
|
|
|
(function TestKeyedGetter() {
|
|
function Base() {}
|
|
Base.prototype = {
|
|
constructor: Base,
|
|
_x: 'base'
|
|
};
|
|
|
|
Object.defineProperty(Base.prototype, '0',
|
|
{ get: function() { return this._x; } });
|
|
|
|
function Derived() {}
|
|
Derived.__proto__ = Base;
|
|
Derived.prototype = {
|
|
__proto__: Base.prototype,
|
|
constructor: Derived,
|
|
_x: 'derived'
|
|
};
|
|
Derived.prototype.testGetter = function() {
|
|
return super[0];
|
|
}.toMethod(Derived.prototype);
|
|
assertEquals('derived', new Derived()[0]);
|
|
// assertEquals('derived', new Derived().testGetter());
|
|
}());
|
|
*/
|