зеркало из https://github.com/mozilla/gecko-dev.git
Move the scripted proxies test into js1_8_5/extensions (bug 546590).
This commit is contained in:
Родитель
fd15cf0041
Коммит
7576f0f9a9
|
@ -7,3 +7,4 @@ skip-if(!xulRuntime.shell) script worker-init.js
|
||||||
skip-if(!xulRuntime.shell) script worker-simple.js
|
skip-if(!xulRuntime.shell) script worker-simple.js
|
||||||
skip-if(!xulRuntime.shell) script worker-terminate.js
|
skip-if(!xulRuntime.shell) script worker-terminate.js
|
||||||
skip-if(!xulRuntime.shell) script worker-timeout.js
|
skip-if(!xulRuntime.shell) script worker-timeout.js
|
||||||
|
script scripted-proxies.js
|
||||||
|
|
|
@ -4,8 +4,89 @@
|
||||||
* Contributor: Andreas Gal
|
* Contributor: Andreas Gal
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Test object proxies. */
|
var gTestfile = 'proxies.js';
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
var BUGNUMBER = 546590;
|
||||||
|
var summary = 'basic scripted proxies tests';
|
||||||
|
var actual = '';
|
||||||
|
var expect = '';
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
test();
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
enterFunc ('test');
|
||||||
|
printBugNumber(BUGNUMBER);
|
||||||
|
printStatus(summary);
|
||||||
|
|
||||||
|
testObj({ foo: 1, bar: 2 });
|
||||||
|
testObj({ 1: 2, 3: 4 });
|
||||||
|
testObj([ 1, 2, 3 ]);
|
||||||
|
testObj(new Date());
|
||||||
|
testObj(new Array());
|
||||||
|
testObj(new RegExp());
|
||||||
|
testObj(Date);
|
||||||
|
testObj(Array);
|
||||||
|
testObj(RegExp);
|
||||||
|
|
||||||
|
/* Test function proxies. */
|
||||||
|
var proxy = Proxy.createFunction({
|
||||||
|
get: function(obj,name) { return Function.prototype[name]; },
|
||||||
|
fix: function() {
|
||||||
|
return ({});
|
||||||
|
}
|
||||||
|
}, function() { return "call"; });
|
||||||
|
|
||||||
|
assertEq(proxy(), "call");
|
||||||
|
assertEq(typeof proxy, "function");
|
||||||
|
if ("isTrapping" in Proxy) {
|
||||||
|
assertEq(Proxy.isTrapping(proxy), true);
|
||||||
|
assertEq(Proxy.fix(proxy), true);
|
||||||
|
assertEq(Proxy.isTrapping(proxy), false);
|
||||||
|
assertEq(typeof proxy, "function");
|
||||||
|
assertEq(proxy(), "call");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test function proxies as constructors. */
|
||||||
|
var proxy = Proxy.createFunction({
|
||||||
|
get: function(obj, name) { return Function.prototype[name]; },
|
||||||
|
fix: function() { return ({}); }
|
||||||
|
},
|
||||||
|
function() { var x = {}; x.origin = "call"; return x; },
|
||||||
|
function() { var x = {}; x.origin = "new"; return x; })
|
||||||
|
|
||||||
|
assertEq(proxy().origin, "call");
|
||||||
|
assertEq((new proxy()).origin, "new");
|
||||||
|
if ("fix" in Proxy) {
|
||||||
|
assertEq(Proxy.fix(proxy), true);
|
||||||
|
assertEq(proxy().origin, "call");
|
||||||
|
assertEq((new proxy()).origin, "new");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test fallback on call if no construct trap was given. */
|
||||||
|
var proxy = Proxy.createFunction({
|
||||||
|
get: function(obj, name) { return Function.prototype[name]; },
|
||||||
|
fix: function() { return ({}); }
|
||||||
|
},
|
||||||
|
function() { this.origin = "new"; return "new-ret"; });
|
||||||
|
|
||||||
|
assertEq((new proxy()).origin, "new");
|
||||||
|
if ("fix" in Proxy) {
|
||||||
|
assertEq(Proxy.fix(proxy), true);
|
||||||
|
assertEq((new proxy()).origin, "new");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test invoke. */
|
||||||
|
var proxy = Proxy.create({ get: function(obj,name) { return function(a,b,c) { return name + uneval([a,b,c]); } }});
|
||||||
|
assertEq(proxy.foo(1,2,3), "foo[1, 2, 3]");
|
||||||
|
|
||||||
|
reportCompare(0, 0, "done.");
|
||||||
|
|
||||||
|
exitFunc ('test');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test object proxies. */
|
||||||
function noopHandlerMaker(obj) {
|
function noopHandlerMaker(obj) {
|
||||||
return {
|
return {
|
||||||
getOwnPropertyDescriptor: function(name) {
|
getOwnPropertyDescriptor: function(name) {
|
||||||
|
@ -77,78 +158,3 @@ function testObj(obj) {
|
||||||
testNoopHandler(obj, proxy);
|
testNoopHandler(obj, proxy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
testObj({ foo: 1, bar: 2 });
|
|
||||||
testObj({ 1: 2, 3: 4 });
|
|
||||||
testObj([ 1, 2, 3 ]);
|
|
||||||
testObj(new Date());
|
|
||||||
testObj(new Array());
|
|
||||||
testObj(new RegExp());
|
|
||||||
testObj(Date);
|
|
||||||
testObj(Array);
|
|
||||||
testObj(RegExp);
|
|
||||||
|
|
||||||
reportCompare(0, 0, "Proxies: Object proxies.");
|
|
||||||
|
|
||||||
/* Test function proxies. */
|
|
||||||
|
|
||||||
var proxy = Proxy.createFunction({
|
|
||||||
get: function(obj,name) { return Function.prototype[name]; },
|
|
||||||
fix: function() {
|
|
||||||
return ({});
|
|
||||||
}
|
|
||||||
}, function() { return "call"; });
|
|
||||||
|
|
||||||
assertEq(proxy(), "call");
|
|
||||||
assertEq(typeof proxy, "function");
|
|
||||||
if ("isTrapping" in Proxy) {
|
|
||||||
assertEq(Proxy.isTrapping(proxy), true);
|
|
||||||
assertEq(Proxy.fix(proxy), true);
|
|
||||||
assertEq(Proxy.isTrapping(proxy), false);
|
|
||||||
assertEq(typeof proxy, "function");
|
|
||||||
assertEq(proxy(), "call");
|
|
||||||
}
|
|
||||||
|
|
||||||
reportCompare(0, 0, "Proxies: Function proxies.");
|
|
||||||
|
|
||||||
/* Test function proxies as constructors. */
|
|
||||||
|
|
||||||
var proxy = Proxy.createFunction({
|
|
||||||
get: function(obj, name) { return Function.prototype[name]; },
|
|
||||||
fix: function() { return ({}); }
|
|
||||||
},
|
|
||||||
function() { var x = {}; x.origin = "call"; return x; },
|
|
||||||
function() { var x = {}; x.origin = "new"; return x; })
|
|
||||||
|
|
||||||
assertEq(proxy().origin, "call");
|
|
||||||
assertEq((new proxy()).origin, "new");
|
|
||||||
if ("fix" in Proxy) {
|
|
||||||
assertEq(Proxy.fix(proxy), true);
|
|
||||||
assertEq(proxy().origin, "call");
|
|
||||||
assertEq((new proxy()).origin, "new");
|
|
||||||
}
|
|
||||||
|
|
||||||
reportCompare(0, 0, "Proxies: Function proxies as constructor.");
|
|
||||||
|
|
||||||
/* Test fallback on call if no construct trap was given. */
|
|
||||||
|
|
||||||
var proxy = Proxy.createFunction({
|
|
||||||
get: function(obj, name) { return Function.prototype[name]; },
|
|
||||||
fix: function() { return ({}); }
|
|
||||||
},
|
|
||||||
function() { this.origin = "new"; return "new-ret"; });
|
|
||||||
|
|
||||||
assertEq((new proxy()).origin, "new");
|
|
||||||
if ("fix" in Proxy) {
|
|
||||||
assertEq(Proxy.fix(proxy), true);
|
|
||||||
assertEq((new proxy()).origin, "new");
|
|
||||||
}
|
|
||||||
|
|
||||||
reportCompare(0, 0, "Proxies: No constructor trap supplied.");
|
|
||||||
|
|
||||||
/* Test invoke. */
|
|
||||||
|
|
||||||
var proxy = Proxy.create({ get: function(obj,name) { return function(a,b,c) { return name + uneval([a,b,c]); } }});
|
|
||||||
assertEq(proxy.foo(1,2,3), "foo[1, 2, 3]");
|
|
||||||
|
|
||||||
reportCompare(0, 0, "Proxies: Test invoke.");
|
|
|
@ -14,4 +14,3 @@ include js1_7/jstests.list
|
||||||
include js1_8/jstests.list
|
include js1_8/jstests.list
|
||||||
include js1_8_1/jstests.list
|
include js1_8_1/jstests.list
|
||||||
include js1_8_5/jstests.list
|
include js1_8_5/jstests.list
|
||||||
include proxies/jstests.list
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
url-prefix ../../jsreftest.html?test=proxies/
|
|
||||||
script scripted.js
|
|
Загрузка…
Ссылка в новой задаче