1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/js1_8_5/extensions/proxy-proto-setter.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,50 @@ 1.4 +// |reftest| skip-if(!xulRuntime.shell) 1.5 +// Any copyright is dedicated to the Public Domain. 1.6 +// http://creativecommons.org/licenses/publicdomain/ 1.7 +// Contributor: Blake Kaplan 1.8 + 1.9 +function expect(actual, arg) { 1.10 + reportCompare(expect.expected, actual, arg); 1.11 +} 1.12 + 1.13 +var window = { set x(y) { expect(this, y) }, y: 4 }; 1.14 +expect.expected = window; 1.15 +window.x = "setting through a setter directly"; 1.16 +window.y = 5; 1.17 +reportCompare(5, window.y, "setting properties works"); 1.18 +var easy = { easy: 'yes', __proto__: window } 1.19 +expect.expected = easy; 1.20 +easy.x = "setting through a setter all-native on prototype"; 1.21 +easy.y = 6; 1.22 +reportCompare(5, window.y, "window.y remains as it was"); 1.23 +reportCompare(6, easy.y, "shadowing works properly"); 1.24 + 1.25 +var sandbox = evalcx(''); 1.26 +sandbox.window = window; 1.27 +sandbox.print = print; 1.28 +sandbox.expect = expect; 1.29 +var hard = evalcx('Object.create(window)', sandbox); 1.30 +expect.expected = hard; 1.31 +hard.x = "a setter through proxy -> native"; 1.32 +hard.y = 6; 1.33 +reportCompare(5, window.y, "window.y remains as it was through a proxy"); 1.34 +reportCompare(6, hard.y, "shadowing works on proxies"); 1.35 + 1.36 +hard.__proto__ = { 'passed': true } 1.37 +reportCompare(true, hard.passed, "can set proxy.__proto__ through a native"); 1.38 + 1.39 +var inverse = evalcx('({ set x(y) { expect(this, y); }, y: 4 })', sandbox); 1.40 +expect.expected = inverse; 1.41 +inverse.x = "setting through a proxy directly"; 1.42 +inverse.y = 5; 1.43 +reportCompare(5, inverse.y, "setting properties works on proxies"); 1.44 + 1.45 +var inversehard = Object.create(inverse); 1.46 +expect.expected = inversehard; 1.47 +inversehard.x = "setting through a setter with a proxy on the proto chain"; 1.48 +inversehard.y = 6; 1.49 +reportCompare(5, inverse.y, "inverse.y remains as it was"); 1.50 +reportCompare(6, inversehard.y, "shadowing works native -> proxy"); 1.51 + 1.52 +inversehard.__proto__ = { 'passed': true } 1.53 +reportCompare(true, inversehard.passed, "can set native.__proto__ through a proxy");