| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | describe("[[Delete]] trap normal behavior", () => { | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |     test("forwarding when not defined in handler", () => { | 
					
						
							|  |  |  |         expect(delete new Proxy({}, { deleteProperty: undefined }).foo).toBeTrue(); | 
					
						
							|  |  |  |         expect(delete new Proxy({}, { deleteProperty: null }).foo).toBeTrue(); | 
					
						
							|  |  |  |         expect(delete new Proxy({}, {}).foo).toBeTrue(); | 
					
						
							| 
									
										
										
										
											2020-06-03 14:34:52 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |     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; | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |         delete p.foo; | 
					
						
							| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-06-03 14:34:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |     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).toBeTrue(); | 
					
						
							|  |  |  |         expect(delete p.bar).toBeFalse(); | 
					
						
							| 
									
										
										
										
											2020-06-03 14:34:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |         expect(o.foo).toBeUndefined(); | 
					
						
							|  |  |  |         expect(o.bar).toBe(2); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | }); | 
					
						
							| 
									
										
										
										
											2020-06-03 14:34:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | describe("[[Delete]] invariants", () => { | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |     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; | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |         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" | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | }); |