diff --git a/test/built-ins/Object/prototype/toString/proxy.js b/test/built-ins/Object/prototype/toString/proxy.js index 366607adfeaad6541c54f03bc6d072d967b3fa41..670bf12f86928894e07e042a04d96f145f8ebdf8 100644 --- a/test/built-ins/Object/prototype/toString/proxy.js +++ b/test/built-ins/Object/prototype/toString/proxy.js @@ -1,9 +1,10 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. +// Copyright (C) 2016 the Apple Inc. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-object.prototype.tostring es6id: 19.1.3.6 -description: Proxy of an array is treated as an array +description: Proxy of an array/function is treated as an array/function info: | [...] 3. Let O be ToObject(this value). @@ -20,6 +21,14 @@ info: | b. Let target be the value of the [[ProxyTarget]] internal slot of argument. c. Return ? IsArray(target). + + 9.5.14 ProxyCreate(target, handler) + + [...] + 7. If IsCallable(target) is true, then + a. Set the [[Call]] internal method of P as specified in 9.5.12. + [...] + features: [Proxy] ---*/ @@ -38,3 +47,50 @@ assert.sameValue( '[object Array]', 'proxy for array proxy' ); + +var functionProxy = new Proxy(function() { }, {}); +var functionProxyProxy = new Proxy(functionProxy, {}); + +assert.sameValue( + Object.prototype.toString.call(functionProxy), '[object Function]', 'function proxy' +); +assert.sameValue( + Object.prototype.toString.call(functionProxyProxy), + '[object Function]', + 'proxy for function proxy' +); + +var arrowProxy = new Proxy(() => { }, {}); +var arrowProxyProxy = new Proxy(arrowProxy, {}); + +assert.sameValue( + Object.prototype.toString.call(arrowProxy), '[object Function]', 'arrow function proxy' +); +assert.sameValue( + Object.prototype.toString.call(arrowProxyProxy), + '[object Function]', + 'proxy for arrow function proxy' +); + +var generatorProxy = new Proxy(function*() { }, {}); +var generatorProxyProxy = new Proxy(generatorProxy, {}); + +assert.sameValue( + Object.prototype.toString.call(generatorProxy), '[object GeneratorFunction]', 'generator function proxy' +); +assert.sameValue( + Object.prototype.toString.call(generatorProxyProxy), + '[object GeneratorFunction]', + 'proxy for generator function proxy' +); + +delete generatorProxy.__proto__[Symbol.toStringTag]; + +assert.sameValue( + Object.prototype.toString.call(generatorProxy), '[object Function]', 'generator function proxy without Symbol.toStringTag' +); +assert.sameValue( + Object.prototype.toString.call(generatorProxyProxy), + '[object Function]', + 'proxy for generator function proxy without Symbol.toStringTag' +);