mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-11-04 07:10:57 +00:00 
			
		
		
		
	
		
			
	
	
		
			50 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			50 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								load("test-common.js");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								try {
							 | 
						||
| 
								 | 
							
								    assert(Object.isExtensible(new Proxy({}, { isExtensible: null })) === true);
							 | 
						||
| 
								 | 
							
								    assert(Object.isExtensible(new Proxy({}, { isExtensible: undefined })) === true);
							 | 
						||
| 
								 | 
							
								    assert(Object.isExtensible(new Proxy({}, {})) === true);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    let o = {};
							 | 
						||
| 
								 | 
							
								    let p = new Proxy(o, {
							 | 
						||
| 
								 | 
							
								        isExtensible(target) {
							 | 
						||
| 
								 | 
							
								            assert(target === o);
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Object.isExtensible(p);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Invariants
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    o = {};
							 | 
						||
| 
								 | 
							
								    p = new Proxy(o, {
							 | 
						||
| 
								 | 
							
								        isExtensible(proxyTarget) {
							 | 
						||
| 
								 | 
							
								            assert(proxyTarget === o);
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    assert(Object.isExtensible(p) === true);
							 | 
						||
| 
								 | 
							
								    Object.preventExtensions(o);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    assertThrowsError(() => {
							 | 
						||
| 
								 | 
							
								        Object.isExtensible(p);
							 | 
						||
| 
								 | 
							
								    }, {
							 | 
						||
| 
								 | 
							
								        error: TypeError,
							 | 
						||
| 
								 | 
							
								        message: "Proxy handler's isExtensible trap violates invariant: return value must match the target's extensibility",
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    p = new Proxy(o, {
							 | 
						||
| 
								 | 
							
								        isExtensible(proxyTarget) {
							 | 
						||
| 
								 | 
							
								            assert(proxyTarget === o);
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    assert(Object.isExtensible(p) === false);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    console.log("PASS");
							 | 
						||
| 
								 | 
							
								} catch (e) {
							 | 
						||
| 
								 | 
							
								    console.log("FAIL: " + e);
							 | 
						||
| 
								 | 
							
								}
							 |