summaryrefslogtreecommitdiffstats
path: root/Source/JavaScriptCore/tests/mozilla/ecma_2/Expressions/instanceof-001.js
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/tests/mozilla/ecma_2/Expressions/instanceof-001.js')
-rw-r--r--Source/JavaScriptCore/tests/mozilla/ecma_2/Expressions/instanceof-001.js117
1 files changed, 117 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/tests/mozilla/ecma_2/Expressions/instanceof-001.js b/Source/JavaScriptCore/tests/mozilla/ecma_2/Expressions/instanceof-001.js
new file mode 100644
index 0000000..2e7412a
--- /dev/null
+++ b/Source/JavaScriptCore/tests/mozilla/ecma_2/Expressions/instanceof-001.js
@@ -0,0 +1,117 @@
+/**
+ * File Name: instanceof-001.js
+ * ECMA Section: 11.8.6
+ * Description:
+ *
+ * RelationalExpression instanceof Identifier
+ *
+ * Author: christine@netscape.com
+ * Date: 2 September 1998
+ */
+ var SECTION = "instanceof-001";
+ var VERSION = "ECMA_2";
+ var TITLE = "instanceof"
+
+ startTest();
+ writeHeaderToLog( SECTION + " "+ TITLE);
+
+ var tc = 0;
+ var testcases = new Array();
+
+ function InstanceOf( object_1, object_2, expect ) {
+ result = object_1 instanceof object_2;
+
+ testcases[tc++] = new TestCase(
+ SECTION,
+ "(" + object_1 + ") instanceof " + object_2,
+ expect,
+ result );
+ }
+
+ function Gen3(value) {
+ this.value = value;
+ this.generation = 3;
+ this.toString = new Function ( "return \"(Gen\"+this.generation+\" instance)\"" );
+ }
+ Gen3.name = 3;
+ Gen3.__proto__.toString = new Function( "return \"(\"+this.name+\" object)\"");
+
+ function Gen2(value) {
+ this.value = value;
+ this.generation = 2;
+ }
+ Gen2.name = 2;
+ Gen2.prototype = new Gen3();
+
+ function Gen1(value) {
+ this.value = value;
+ this.generation = 1;
+ }
+ Gen1.name = 1;
+ Gen1.prototype = new Gen2();
+
+ function Gen0(value) {
+ this.value = value;
+ this.generation = 0;
+ }
+ Gen0.name = 0;
+ Gen0.prototype = new Gen1();
+
+
+ function GenA(value) {
+ this.value = value;
+ this.generation = "A";
+ this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" );
+
+ }
+ GenA.prototype = new Gen0();
+ GenA.name = "A";
+
+ function GenB(value) {
+ this.value = value;
+ this.generation = "B";
+ this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" );
+ }
+ GenB.name = "B"
+ GenB.prototype = void 0;
+
+ // RelationalExpression is not an object.
+
+ InstanceOf( true, Boolean, false );
+ InstanceOf( new Boolean(false), Boolean, true );
+
+ // Identifier is not a function
+
+// InstanceOf( true, true, false );
+// InstanceOf( new Boolean(true), false, false );
+
+ // Identifier is a function, prototype of Identifier is not an object
+
+// InstanceOf( new GenB(), GenB, false );
+
+ // __proto__ of RelationalExpression is null. should return false
+ genA = new GenA();
+ genA.__proto__ = null;
+
+ InstanceOf( genA, GenA, false );
+
+ // RelationalExpression.__proto__ == (but not ===) Identifier.prototype
+
+ InstanceOf( new Gen2(), Gen0, false );
+ InstanceOf( new Gen2(), Gen1, false );
+ InstanceOf( new Gen2(), Gen2, true );
+ InstanceOf( new Gen2(), Gen3, true );
+
+ // RelationalExpression.__proto__.__proto__ === Identifier.prototype
+ InstanceOf( new Gen0(), Gen0, true );
+ InstanceOf( new Gen0(), Gen1, true );
+ InstanceOf( new Gen0(), Gen2, true );
+ InstanceOf( new Gen0(), Gen3, true );
+
+ InstanceOf( new Gen0(), Object, true );
+ InstanceOf( new Gen0(), Function, false );
+
+ InstanceOf( Gen0, Function, true );
+ InstanceOf( Gen0, Object, true );
+
+ test(); \ No newline at end of file