mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-04 05:33:50 +01:00 
			
		
		
		
	* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
		
			
				
	
	
		
			84 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
function assert(b) {
 | 
						|
    if (!b)
 | 
						|
        throw new Error("Bad assertion");
 | 
						|
}
 | 
						|
 | 
						|
let theTarget = {};
 | 
						|
Object.defineProperty(theTarget, "x", {
 | 
						|
    writable: false,
 | 
						|
    configurable: false,
 | 
						|
    value: 45
 | 
						|
});
 | 
						|
 | 
						|
Object.defineProperty(theTarget, "y", {
 | 
						|
    writable: false,
 | 
						|
    configurable: false,
 | 
						|
    value: 45
 | 
						|
});
 | 
						|
 | 
						|
Object.defineProperty(theTarget, "getter", {
 | 
						|
    configurable: false,
 | 
						|
    set: function(x) { }
 | 
						|
});
 | 
						|
 | 
						|
Object.defineProperty(theTarget, "badGetter", {
 | 
						|
    configurable: false,
 | 
						|
    set: function(x) { }
 | 
						|
});
 | 
						|
 | 
						|
let handler = {
 | 
						|
    get: function(target, propName, proxyArg) {
 | 
						|
        assert(target === theTarget);
 | 
						|
        assert(proxyArg === proxy);
 | 
						|
        if (propName === "x")
 | 
						|
            return 45;
 | 
						|
        else if (propName === "y")
 | 
						|
            return 30;
 | 
						|
        else if (propName === "getter")
 | 
						|
            return undefined;
 | 
						|
        else {
 | 
						|
            assert(propName === "badGetter");
 | 
						|
            return 25;
 | 
						|
        }
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
let proxy = new Proxy(theTarget, handler);
 | 
						|
 | 
						|
for (let i = 0; i < 1000; i++) {
 | 
						|
    assert(proxy.x === 45);
 | 
						|
    assert(proxy["x"] === 45);
 | 
						|
}
 | 
						|
 | 
						|
for (let i = 0; i < 1000; i++) {
 | 
						|
    try {
 | 
						|
        if (i % 2)
 | 
						|
            proxy.y;
 | 
						|
        else
 | 
						|
            proxy["y"];
 | 
						|
    } catch(e) {
 | 
						|
        threw = true;
 | 
						|
        assert(e.toString() === "TypeError: Proxy handler's 'get' result of a non-configurable and non-writable property should be the same value as the target's property");
 | 
						|
    }
 | 
						|
    assert(threw === true);
 | 
						|
}
 | 
						|
 | 
						|
for (let i = 0; i < 1000; i++) {
 | 
						|
    assert(proxy.getter === undefined);
 | 
						|
    assert(proxy["getter"] === undefined);
 | 
						|
}
 | 
						|
 | 
						|
for (let i = 0; i < 1000; i++) {
 | 
						|
    try {
 | 
						|
        if (i % 2)
 | 
						|
            proxy.badGetter;
 | 
						|
        else
 | 
						|
            proxy["badGetter"];
 | 
						|
 | 
						|
    } catch(e) {
 | 
						|
        threw = true;
 | 
						|
        assert(e.toString() === "TypeError: Proxy handler's 'get' result of a non-configurable accessor property without a getter should be undefined");
 | 
						|
    }
 | 
						|
    assert(threw === true);
 | 
						|
}
 |