| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | describe("[[PreventExtension]] trap normal behavior", () => { | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -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
										 |  |  |   test("correct arguments supplied to trap", () => { | 
					
						
							|  |  |  |     let o = {}; | 
					
						
							|  |  |  |     p = new Proxy(o, { | 
					
						
							|  |  |  |       preventExtensions(target) { | 
					
						
							|  |  |  |         expect(target).toBe(o); | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |       }, | 
					
						
							| 
									
										
										
										
											2020-06-03 14:34:52 -07:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Object.preventExtensions(o); | 
					
						
							|  |  |  |     Object.preventExtensions(p); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe("[[PreventExtensions]] invariants", () => { | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -07:00
										 |  |  |   test("cannot return false", () => { | 
					
						
							|  |  |  |     let p = new Proxy( | 
					
						
							|  |  |  |       {}, | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         preventExtensions() { | 
					
						
							|  |  |  |           return false; | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -07:00
										 |  |  |     expect(() => { | 
					
						
							|  |  |  |       Object.preventExtensions(p); | 
					
						
							|  |  |  |     }).toThrowWithMessage(TypeError, "Object's [[PreventExtensions]] method returned false"); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-06-03 14:34:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -07:00
										 |  |  |   test("cannot return true if the target is extensible", () => { | 
					
						
							|  |  |  |     let o = {}; | 
					
						
							|  |  |  |     let p = new Proxy(o, { | 
					
						
							|  |  |  |       preventExtensions() { | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2020-06-03 14:34:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-05 09:27:00 -07:00
										 |  |  |     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-05 09:27:00 -07:00
										 |  |  |     Object.preventExtensions(o); | 
					
						
							|  |  |  |     expect(Object.preventExtensions(p)).toBe(p); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2020-07-03 22:43:08 -07:00
										 |  |  | }); |