Home | History | Annotate | Download | only in harmony
      1 // Copyright 2015 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Flags: --harmony-proxies --harmony-reflect
      6 
      7 (function testNonCallable() {
      8   var proxy = new Proxy({},{});
      9   assertThrows(function(){ proxy() }, TypeError);
     10 
     11   var proxy2 = new Proxy(proxy, {});
     12   assertThrows(function(){ proxy2() }, TypeError);
     13 })();
     14 
     15 (function testCallProxyFallbackNoArguments() {
     16   var called = false;
     17   var target = function() {
     18     called = true;
     19   }
     20   var proxy = new Proxy(target, {});
     21   assertFalse(called);
     22   proxy();
     23   assertTrue(called);
     24 
     25   called = false;
     26   var proxy2 = new Proxy(proxy, {});
     27   assertFalse(called);
     28   proxy2();
     29   assertTrue(called);
     30 })();
     31 
     32 (function testCallProxyFallback1Argument() {
     33   var called = false;
     34   var target = function(a) {
     35     called = true;
     36     assertEquals('1', a);
     37   }
     38   var proxy = new Proxy(target, {});
     39   assertFalse(called);
     40   proxy('1');
     41   assertTrue(called);
     42 })();
     43 
     44 (function testCallProxyFallback2Arguments() {
     45   var called = false;
     46   var target = function(a, b) {
     47     called = true;
     48     assertEquals('1', a);
     49     assertEquals('2', b);
     50   }
     51   var proxy = new Proxy(target, {});
     52   assertFalse(called);
     53   proxy('1', '2');
     54   assertTrue(called);
     55 })();
     56 
     57 (function testCallProxyFallbackChangedReceiver() {
     58   var apply_receiver = {receiver:true};
     59   var seen_receiver = undefined;
     60   var target = function() {
     61     seen_receiver = this;
     62   }
     63   var proxy = new Proxy(target, {});
     64   assertEquals(undefined, seen_receiver);
     65   Reflect.apply(proxy, apply_receiver, [1,2,3,4]);
     66   assertSame(apply_receiver, seen_receiver);
     67 })();
     68 
     69 (function testCallProxyTrap() {
     70   var called_target = false;
     71   var called_handler = false;
     72   var target = function(a, b) {
     73     called_target = true;
     74     assertEquals(1, a);
     75     assertEquals(2, b);
     76   }
     77   var handler = {
     78     apply: function(target, this_arg, args) {
     79       target.apply(this_arg, args);
     80       called_handler = true;
     81     }
     82   }
     83   var proxy = new Proxy(target, handler);
     84   assertFalse(called_target);
     85   assertFalse(called_handler);
     86   Reflect.apply(proxy, {rec:1}, [1,2]);
     87   assertTrue(called_target);
     88   assertTrue(called_handler);
     89 })();
     90