mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 778085 - Tests. r=ejpbruel
--HG-- extra : rebase_source : a63199371f5f5e5bc9271d68224a8dc39aa08754
This commit is contained in:
parent
387c544c5a
commit
c4f9821cde
81
js/src/jit-test/tests/basic/testProxyPrototypes.js
Normal file
81
js/src/jit-test/tests/basic/testProxyPrototypes.js
Normal file
@ -0,0 +1,81 @@
|
||||
"use strict"
|
||||
// Helpers.
|
||||
function makeAccessorProp(obj, propName, initialValue, hiddenName) {
|
||||
if (!hiddenName)
|
||||
hiddenName = propName + '_';
|
||||
if (initialValue)
|
||||
Object.defineProperty(obj, hiddenName, { value: initialValue, writable: true, enumerable: false });
|
||||
Object.defineProperty(obj, propName,
|
||||
{ configurable: true,
|
||||
enumerable: true,
|
||||
get: function() { return this[hiddenName]; },
|
||||
set: function(x) {
|
||||
Object.defineProperty(this, hiddenName, { value: x, writable: true, enumerable: false });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Set up a prototype with 4 properties.
|
||||
var proto = {valueProp: 11, valuePropShadowed: 22};
|
||||
makeAccessorProp(proto, 'accessorProp', 33);
|
||||
makeAccessorProp(proto, 'accessorPropShadowed', 44);
|
||||
|
||||
// Set up a proxy that uses |proto| as a prototype.
|
||||
var proxyTarget = {valuePropShadowed: 21};
|
||||
makeAccessorProp(proxyTarget, 'accessorPropShadowed', -44, 'accessorPropShadowed__');
|
||||
var proxy = wrapWithProto(proxyTarget, proto);
|
||||
|
||||
// Value getters.
|
||||
assertEq(proxy.valueProp, 11);
|
||||
assertEq(proxy.valuePropShadowed, 21);
|
||||
// Iteration, enumeration, etc.
|
||||
var propNames = [];
|
||||
for (var i in proxy)
|
||||
propNames.push(i);
|
||||
assertEq(propNames.length, 4);
|
||||
assertEq('valueProp' in proxy, true);
|
||||
assertEq(proxy.hasOwnProperty('valueProp'), false);
|
||||
assertEq(Object.getOwnPropertyNames(proxy).indexOf('valueProp'), -1);
|
||||
assertEq('valuePropShadowed' in proxy, true);
|
||||
assertEq(Object.getOwnPropertyNames(proxy).indexOf('valuePropShadowed') == -1, false);
|
||||
assertEq(proxy.hasOwnProperty('valuePropShadowed'), true);
|
||||
// Value setters.
|
||||
proxy.valuePropShadowed = 20;
|
||||
proxy.valueProp = 10;
|
||||
assertEq(proxyTarget.valuePropShadowed, 20);
|
||||
assertEq(proxyTarget.valueProp, 10);
|
||||
// Accessor getters.
|
||||
assertEq(proxy.accessorProp, 33);
|
||||
assertEq(proxy.accessorPropShadowed, -44);
|
||||
// Accessor setters.
|
||||
proxy.accessorProp = 32;
|
||||
proxy.accessorPropShadowed = -43;
|
||||
assertEq(proxy.accessorProp, 32);
|
||||
assertEq(proxy.accessorPropShadowed, -43);
|
||||
// Make sure the underlying objects look right.
|
||||
assertEq(proto.accessorProp_, 33);
|
||||
assertEq(proto.accessorPropShadowed_, 44);
|
||||
assertEq(proto.hasOwnProperty('accessorPropShadowed__'), false);
|
||||
assertEq(proxyTarget.accessorProp_, 32);
|
||||
assertEq(proxyTarget.hasOwnProperty('accessorPropShadowed_'), false);
|
||||
assertEq(proxyTarget.accessorPropShadowed__, -43);
|
||||
|
||||
// Now, create a new object prototyped to |proxy| and make sure |proxy| behaves
|
||||
// well on the prototype chain.
|
||||
function Constructor() {
|
||||
this.foo = 2;
|
||||
}
|
||||
Constructor.prototype = proxy;
|
||||
var child = new Constructor();
|
||||
assertEq(child.valueProp, 10);
|
||||
assertEq(child.valuePropShadowed, 20);
|
||||
var childPropNames = [];
|
||||
for (var i in child)
|
||||
childPropNames.push(i);
|
||||
assertEq(childPropNames.length, 5);
|
||||
child.accessorProp = 5;
|
||||
child.accessorPropShadowed = 6;
|
||||
assertEq(child.accessorProp, 5);
|
||||
assertEq(child.accessorPropShadowed, 6);
|
||||
assertEq(child.accessorProp_, 5);
|
||||
assertEq(child.accessorPropShadowed__, 6);
|
Loading…
Reference in New Issue
Block a user