| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | describe("[[Delete]] trap normal behavior", () => { | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -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(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   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-06-03 14:34:52 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -07:00
										 |  |  |     delete p.foo; | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   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; | 
					
						
							|  |  |  |       }, | 
					
						
							| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-06-03 14:34:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -07:00
										 |  |  |     expect(delete p.foo).toBeTrue(); | 
					
						
							|  |  |  |     expect(delete p.bar).toBeFalse(); | 
					
						
							| 
									
										
										
										
											2020-06-03 14:34:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -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-05 09:27:00 -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-03 22:43:08 -07:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -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
										 |  |  | }); |