diff options
Diffstat (limited to 'deps/v8/test/mjsunit/compiler/reflect-has.js')
-rw-r--r-- | deps/v8/test/mjsunit/compiler/reflect-has.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/compiler/reflect-has.js b/deps/v8/test/mjsunit/compiler/reflect-has.js new file mode 100644 index 0000000000..2f9ee1b66a --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/reflect-has.js @@ -0,0 +1,67 @@ +// Copyright 2017 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: --allow-natives-syntax + +// Test Reflect.has with wrong (number of) arguments. +(function() { + "use strict"; + function foo() { return Reflect.has(); } + + assertThrows(foo); + assertThrows(foo); + %OptimizeFunctionOnNextCall(foo); + assertThrows(foo); +})(); +(function() { + "use strict"; + function foo(o) { return Reflect.has(o); } + + assertFalse(foo({})); + assertFalse(foo({})); + %OptimizeFunctionOnNextCall(foo); + assertFalse(foo({})); +})(); +(function() { + "use strict"; + function foo(o) { return Reflect.has(o); } + + assertThrows(foo.bind(undefined, 1)); + assertThrows(foo.bind(undefined, undefined)); + %OptimizeFunctionOnNextCall(foo); + assertThrows(foo.bind(undefined, 'o')); +})(); + +// Test Reflect.has within try/catch. +(function() { + "use strict"; + function foo() { + try { + return Reflect.has(); + } catch (e) { + return 1; + } + } + + assertEquals(1, foo()); + assertEquals(1, foo()); + %OptimizeFunctionOnNextCall(foo); + assertEquals(1, foo()); +})(); +(function() { + "use strict"; + const o = {}; + function foo(n) { + try { + return Reflect.has(o, n); + } catch (e) { + return 1; + } + } + + assertEquals(1, foo({[Symbol.toPrimitive]() { throw new Error(); }})); + assertEquals(1, foo({[Symbol.toPrimitive]() { throw new Error(); }})); + %OptimizeFunctionOnNextCall(foo); + assertEquals(1, foo({[Symbol.toPrimitive]() { throw new Error(); }})); +})(); |