mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-10-25 17:39:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // TODO: Add "[[OwnPropertyKeys]] trap normal behavior" tests
 | |
| 
 | |
| describe("[[OwnPropertyKeys]] invariants", () => {
 | |
|     // TODO: Add tests for other [[OwnPropertyKeys]] trap invariants
 | |
| 
 | |
|     test("cannot report new property of non-extensible object", () => {
 | |
|         const target = Object.preventExtensions({});
 | |
|         const handler = {
 | |
|             ownKeys() {
 | |
|                 return ["foo", "bar", "baz"];
 | |
|             },
 | |
|         };
 | |
|         const proxy = new Proxy(target, handler);
 | |
| 
 | |
|         expect(() => {
 | |
|             Reflect.ownKeys(proxy);
 | |
|         }).toThrowWithMessage(
 | |
|             TypeError,
 | |
|             "Proxy handler's ownKeys trap violates invariant: cannot report new property 'foo' of non-extensible object"
 | |
|         );
 | |
|     });
 | |
| 
 | |
|     test("cannot skip property of non-extensible object", () => {
 | |
|         const target = Object.preventExtensions({ foo: null });
 | |
|         const handler = {
 | |
|             ownKeys() {
 | |
|                 return ["bar", "baz"];
 | |
|             },
 | |
|         };
 | |
|         const proxy = new Proxy(target, handler);
 | |
| 
 | |
|         expect(() => {
 | |
|             Reflect.ownKeys(proxy);
 | |
|         }).toThrowWithMessage(
 | |
|             TypeError,
 | |
|             "Proxy handler's ownKeys trap violates invariant: cannot skip property 'foo' of non-extensible object"
 | |
|         );
 | |
|     });
 | |
| 
 | |
|     test("cannot skip non-configurable property", () => {
 | |
|         const target = Object.defineProperty({}, "foo", { configurable: false });
 | |
|         const handler = {
 | |
|             ownKeys() {
 | |
|                 return ["bar", "baz"];
 | |
|             },
 | |
|         };
 | |
|         const proxy = new Proxy(target, handler);
 | |
| 
 | |
|         expect(() => {
 | |
|             Reflect.ownKeys(proxy);
 | |
|         }).toThrowWithMessage(
 | |
|             TypeError,
 | |
|             "Proxy handler's ownKeys trap violates invariant: cannot skip non-configurable property 'foo'"
 | |
|         );
 | |
|     });
 | |
| });
 |