Index: test/mjsunit/harmony/instanceof-es6.js |
diff --git a/test/mjsunit/harmony/instanceof-es6.js b/test/mjsunit/harmony/instanceof-es6.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..60e7ee2c394f88b79c494e6f69b70a947677f7fb |
--- /dev/null |
+++ b/test/mjsunit/harmony/instanceof-es6.js |
@@ -0,0 +1,50 @@ |
+// Copyright 2016 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-instanceof |
+ |
+// Make sure it's an error if @@hasInstance isn't a function. |
+(function() { |
+ var F = {}; |
+ F[Symbol.hasInstance] = null; |
+ assertThrows(function() { 0 instanceof F; }, TypeError); |
+})(); |
+ |
+// Make sure the result is coerced to boolean. |
+(function() { |
+ var F = {}; |
+ F[Symbol.hasInstance] = function() { return undefined; }; |
+ assertEquals(0 instanceof F, false); |
+ F[Symbol.hasInstance] = function() { return null; }; |
+ assertEquals(0 instanceof F, false); |
+ F[Symbol.hasInstance] = function() { return true; }; |
+ assertEquals(0 instanceof F, true); |
+})(); |
+ |
+// Make sure if @@hasInstance throws, we catch it. |
+(function() { |
+ var F = {}; |
+ F[Symbol.hasInstance] = function() { throw new Error("always throws"); } |
+ try { |
+ 0 instanceof F; |
+ } catch (e) { |
+ assertEquals(e.message, "always throws"); |
+ } |
+})(); |
+ |
+// @@hasInstance works for bound functions. |
+(function() { |
+ var BC = function() {}; |
+ var bc = new BC(); |
+ var bound = BC.bind(); |
+ assertEquals(bound[Symbol.hasInstance](bc), true); |
+ assertEquals(bound[Symbol.hasInstance]([]), false); |
+})(); |
+ |
+// if OrdinaryHasInstance is passed a non-callable receiver, return false. |
+assertEquals(Function.prototype[Symbol.hasInstance].call(Array, []), true); |
+assertEquals(Function.prototype[Symbol.hasInstance].call({}, {}), false); |
+ |
+// OrdinaryHasInstance passed a non-object argument returns false. |
+assertEquals(Function.prototype[Symbol.hasInstance].call(Array, 0), false); |