diff options
Diffstat (limited to 'deps/v8/test/mjsunit/harmony/proxies-apply.js')
-rw-r--r-- | deps/v8/test/mjsunit/harmony/proxies-apply.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/harmony/proxies-apply.js b/deps/v8/test/mjsunit/harmony/proxies-apply.js new file mode 100644 index 0000000000..4ddffe73b8 --- /dev/null +++ b/deps/v8/test/mjsunit/harmony/proxies-apply.js @@ -0,0 +1,89 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-proxies --harmony-reflect + +(function testNonCallable() { + var proxy = new Proxy({},{}); + assertThrows(function(){ proxy() }, TypeError); + + var proxy2 = new Proxy(proxy, {}); + assertThrows(function(){ proxy2() }, TypeError); +})(); + +(function testCallProxyFallbackNoArguments() { + var called = false; + var target = function() { + called = true; + } + var proxy = new Proxy(target, {}); + assertFalse(called); + proxy(); + assertTrue(called); + + called = false; + var proxy2 = new Proxy(proxy, {}); + assertFalse(called); + proxy2(); + assertTrue(called); +})(); + +(function testCallProxyFallback1Argument() { + var called = false; + var target = function(a) { + called = true; + assertEquals('1', a); + } + var proxy = new Proxy(target, {}); + assertFalse(called); + proxy('1'); + assertTrue(called); +})(); + +(function testCallProxyFallback2Arguments() { + var called = false; + var target = function(a, b) { + called = true; + assertEquals('1', a); + assertEquals('2', b); + } + var proxy = new Proxy(target, {}); + assertFalse(called); + proxy('1', '2'); + assertTrue(called); +})(); + +(function testCallProxyFallbackChangedReceiver() { + var apply_receiver = {receiver:true}; + var seen_receiver = undefined; + var target = function() { + seen_receiver = this; + } + var proxy = new Proxy(target, {}); + assertEquals(undefined, seen_receiver); + Reflect.apply(proxy, apply_receiver, [1,2,3,4]); + assertSame(apply_receiver, seen_receiver); +})(); + +(function testCallProxyTrap() { + var called_target = false; + var called_handler = false; + var target = function(a, b) { + called_target = true; + assertEquals(1, a); + assertEquals(2, b); + } + var handler = { + apply: function(target, this_arg, args) { + target.apply(this_arg, args); + called_handler = true; + } + } + var proxy = new Proxy(target, handler); + assertFalse(called_target); + assertFalse(called_handler); + Reflect.apply(proxy, {rec:1}, [1,2]); + assertTrue(called_target); + assertTrue(called_handler); +})(); |