mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 16:32:45 +00:00 
			
		
		
		
	LibJS: Convert Proxy tests
This commit is contained in:
		
							parent
							
								
									b86faeaeef
								
							
						
					
					
						commit
						449a1cf3a2
					
				
					 14 changed files with 820 additions and 815 deletions
				
			
		|  | @ -1,56 +1,56 @@ | |||
| load("test-common.js"); | ||||
| 
 | ||||
| try { | ||||
|     assert(delete (new Proxy({}, { deleteProperty: undefined })).foo === true); | ||||
|     assert(delete (new Proxy({}, { deleteProperty: null })).foo === true); | ||||
|     assert(delete (new Proxy({}, {})).foo === true); | ||||
| 
 | ||||
|     let o = {}; | ||||
|     let p = new Proxy(o, { | ||||
|         deleteProperty(target, property) { | ||||
|             assert(target === o); | ||||
|             assert(property === "foo"); | ||||
|             return true; | ||||
|         } | ||||
| describe("[[Delete]] trap normal behavior", () => { | ||||
|     test("forwarding when not defined in handler", () => { | ||||
|         expect(delete (new Proxy({}, { deleteProperty: undefined })).foo).toBe(true); | ||||
|         expect(delete (new Proxy({}, { deleteProperty: null })).foo).toBe(true); | ||||
|         expect(delete (new Proxy({}, {})).foo).toBe(true); | ||||
|     }); | ||||
| 
 | ||||
|     delete p.foo; | ||||
| 
 | ||||
|     o = { foo: 1, bar: 2 }; | ||||
|     p = new Proxy(o, { | ||||
|         deleteProperty(target, property) { | ||||
|             if (property === "foo") { | ||||
|                 delete target[property]; | ||||
|     test("correct arguments supplied to trap", () => { | ||||
|         let o = {}; | ||||
|         let p = new Proxy(o, { | ||||
|             deleteProperty(target, property) { | ||||
|                 expect(target).toBe(o); | ||||
|                 expect(property).toBe("foo"); | ||||
|                 return true; | ||||
|             } | ||||
|             return false; | ||||
|         } | ||||
|     }); | ||||
|         }); | ||||
| 
 | ||||
|     assert(delete p.foo === true); | ||||
|     assert(delete p.bar === false); | ||||
| 
 | ||||
|     assert(o.foo === undefined); | ||||
|     assert(o.bar === 2); | ||||
| 
 | ||||
|     // Invariants
 | ||||
| 
 | ||||
|     o = {}; | ||||
|     Object.defineProperty(o, "foo", { configurable: false }); | ||||
|     p = new Proxy(o, { | ||||
|         deleteProperty() { | ||||
|             return true; | ||||
|         }, | ||||
|     }); | ||||
| 
 | ||||
|     assertThrowsError(() => { | ||||
|         delete p.foo; | ||||
|     }, { | ||||
|         error: TypeError, | ||||
|         message: "Proxy handler's deleteProperty trap violates invariant: cannot report a non-configurable own property of the target as deleted", | ||||
|     }); | ||||
| 
 | ||||
|     console.log("PASS"); | ||||
| } catch (e) { | ||||
|     console.log("FAIL: " + e); | ||||
| } | ||||
|     test("conditional deletion", () => { | ||||
|         o = { foo: 1, bar: 2 }; | ||||
|         p = new Proxy(o, { | ||||
|             deleteProperty(target, property) { | ||||
|                 if (property === "foo") { | ||||
|                     delete target[property]; | ||||
|                     return true; | ||||
|                 } | ||||
|                 return false; | ||||
|             } | ||||
|         }); | ||||
| 
 | ||||
|         expect(delete p.foo).toBe(true); | ||||
|         expect(delete p.bar).toBe(false); | ||||
| 
 | ||||
|         expect(o.foo).toBe(undefined); | ||||
|         expect(o.bar).toBe(2); | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| 
 | ||||
| describe("[[Delete]] invariants", () => { | ||||
|     test("cannot report a non-configurable own property as deleted", () => { | ||||
|         let o = {}; | ||||
|         Object.defineProperty(o, "foo", { configurable: false }); | ||||
|         let p = new Proxy(o, { | ||||
|             deleteProperty() { | ||||
|                 return true; | ||||
|             }, | ||||
|         }); | ||||
| 
 | ||||
|         expect(() => { | ||||
|             delete p.foo; | ||||
|         }).toThrowWithMessage(TypeError, "Proxy handler's deleteProperty trap violates invariant: cannot report a non-configurable own property of the target as deleted"); | ||||
|     }); | ||||
| }); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Matthew Olsson
						Matthew Olsson