/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /** * 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); function InstanceOf( object_1, object_2, expect ) { result = object_1 instanceof object_2; 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 ); // __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();