2020-07-03 22:43:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								describe ( "[[Has]] trap normal behavior" ,  ( )  =>  {  
						 
					
						
							
								
									
										
										
										
											2020-07-06 07:37:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    test ( "forwarding when not defined in handler" ,  ( )  =>  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( "foo"  in  new  Proxy ( { } ,  {  has :  null  } ) ) . toBeFalse ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( "foo"  in  new  Proxy ( { } ,  {  has :  undefined  } ) ) . toBeFalse ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( "foo"  in  new  Proxy ( { } ,  { } ) ) . toBeFalse ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											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 ( "correct arguments supplied to trap" ,  ( )  =>  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        let  o  =  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        let  p  =  new  Proxy ( o ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            has ( target ,  prop )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                expect ( target ) . toBe ( o ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                expect ( prop ) . toBe ( "foo" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-03 14:34:52 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-06 07:37:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        "foo"  in  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 ( "conditional return" ,  ( )  =>  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        let  o  =  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        let  p  =  new  Proxy ( o ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            has ( target ,  prop )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( target . checkedFoo )  return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( prop  ===  "foo" )  target . checkedFoo  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( "foo"  in  p ) . toBeFalse ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        expect ( "foo"  in  p ) . toBeTrue ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											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 ( "[[Has]] invariants" ,  ( )  =>  {  
						 
					
						
							
								
									
										
										
										
											2020-07-06 07:37:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    test ( "cannot return false if the property exists and is non-configurable" ,  ( )  =>  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        let  o  =  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Object . defineProperty ( o ,  "foo" ,  {  configurable :  false  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-03 14:34:52 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-06 07:37:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        p  =  new  Proxy ( o ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            has ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-03 14:34:52 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-06 07:37:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( ( )  =>  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            "foo"  in  p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) . toThrowWithMessage ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TypeError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            "Proxy handler's has trap violates invariant: a property cannot be reported as non-existent if it exists on the target as a non-configurable property" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-03 22:43:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-06 07:37:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    test ( "cannot return false if the property exists and the target is non-extensible" ,  ( )  =>  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        let  o  =  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Object . defineProperty ( o ,  "foo" ,  {  value :  10 ,  configurable :  true  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-03 22:43:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-06 07:37:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        let  p  =  new  Proxy ( o ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            has ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-05 09:27:00 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-06 07:37:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Object . preventExtensions ( o ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-05 09:27:00 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-06 07:37:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        expect ( ( )  =>  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            "foo"  in  p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) . toThrowWithMessage ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TypeError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            "Proxy handler's has trap violates invariant: a property cannot be reported as non-existent if it exists on the target and the target is non-extensible" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-03 22:43:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ) ;