| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | describe("[[PreventExtension]] trap normal behavior", () => { | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |     test("forwarding when not defined in handler", () => { | 
					
						
							|  |  |  |         let p = new Proxy({}, { preventExtensions: null }); | 
					
						
							|  |  |  |         expect(Object.preventExtensions(p)).toBe(p); | 
					
						
							|  |  |  |         p = new Proxy({}, { preventExtensions: undefined }); | 
					
						
							|  |  |  |         expect(Object.preventExtensions(p)).toBe(p); | 
					
						
							|  |  |  |         p = new Proxy({}, {}); | 
					
						
							|  |  |  |         expect(Object.preventExtensions(p)).toBe(p); | 
					
						
							| 
									
										
										
										
											2020-06-03 14:34:52 -07:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |     test("correct arguments supplied to trap", () => { | 
					
						
							|  |  |  |         let o = {}; | 
					
						
							|  |  |  |         p = new Proxy(o, { | 
					
						
							|  |  |  |             preventExtensions(target) { | 
					
						
							|  |  |  |                 expect(target).toBe(o); | 
					
						
							|  |  |  |                 return true; | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Object.preventExtensions(o); | 
					
						
							|  |  |  |         Object.preventExtensions(p); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe("[[PreventExtensions]] invariants", () => { | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |     test("cannot return false", () => { | 
					
						
							|  |  |  |         let p = new Proxy( | 
					
						
							|  |  |  |             {}, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 preventExtensions() { | 
					
						
							|  |  |  |                     return false; | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |         expect(() => { | 
					
						
							|  |  |  |             Object.preventExtensions(p); | 
					
						
							|  |  |  |         }).toThrowWithMessage(TypeError, "Object's [[PreventExtensions]] method returned false"); | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -07:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-06-03 14:34:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |     test("cannot return true if the target is extensible", () => { | 
					
						
							|  |  |  |         let o = {}; | 
					
						
							|  |  |  |         let p = new Proxy(o, { | 
					
						
							|  |  |  |             preventExtensions() { | 
					
						
							|  |  |  |                 return true; | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect(() => { | 
					
						
							|  |  |  |             Object.preventExtensions(p); | 
					
						
							|  |  |  |         }).toThrowWithMessage( | 
					
						
							|  |  |  |             TypeError, | 
					
						
							|  |  |  |             "Proxy handler's preventExtensions trap violates invariant: cannot return true if the target object is extensible" | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-06 07:37:45 -07:00
										 |  |  |         Object.preventExtensions(o); | 
					
						
							|  |  |  |         expect(Object.preventExtensions(p)).toBe(p); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | }); |