1/** 2 * File Name: instanceof-001.js 3 * ECMA Section: 11.8.6 4 * Description: 5 * 6 * RelationalExpression instanceof Identifier 7 * 8 * Author: christine@netscape.com 9 * Date: 2 September 1998 10 */ 11 var SECTION = "instanceof-001"; 12 var VERSION = "ECMA_2"; 13 var TITLE = "instanceof" 14 15 startTest(); 16 writeHeaderToLog( SECTION + " "+ TITLE); 17 18 var tc = 0; 19 var testcases = new Array(); 20 21 function InstanceOf( object_1, object_2, expect ) { 22 result = object_1 instanceof object_2; 23 24 testcases[tc++] = new TestCase( 25 SECTION, 26 "(" + object_1 + ") instanceof " + object_2, 27 expect, 28 result ); 29 } 30 31 function Gen3(value) { 32 this.value = value; 33 this.generation = 3; 34 this.toString = new Function ( "return \"(Gen\"+this.generation+\" instance)\"" ); 35 } 36 Gen3.name = 3; 37 Gen3.__proto__.toString = new Function( "return \"(\"+this.name+\" object)\""); 38 39 function Gen2(value) { 40 this.value = value; 41 this.generation = 2; 42 } 43 Gen2.name = 2; 44 Gen2.prototype = new Gen3(); 45 46 function Gen1(value) { 47 this.value = value; 48 this.generation = 1; 49 } 50 Gen1.name = 1; 51 Gen1.prototype = new Gen2(); 52 53 function Gen0(value) { 54 this.value = value; 55 this.generation = 0; 56 } 57 Gen0.name = 0; 58 Gen0.prototype = new Gen1(); 59 60 61 function GenA(value) { 62 this.value = value; 63 this.generation = "A"; 64 this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" ); 65 66 } 67 GenA.prototype = new Gen0(); 68 GenA.name = "A"; 69 70 function GenB(value) { 71 this.value = value; 72 this.generation = "B"; 73 this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" ); 74 } 75 GenB.name = "B" 76 GenB.prototype = void 0; 77 78 // RelationalExpression is not an object. 79 80 InstanceOf( true, Boolean, false ); 81 InstanceOf( new Boolean(false), Boolean, true ); 82 83 // Identifier is not a function 84 85// InstanceOf( true, true, false ); 86// InstanceOf( new Boolean(true), false, false ); 87 88 // Identifier is a function, prototype of Identifier is not an object 89 90// InstanceOf( new GenB(), GenB, false ); 91 92 // __proto__ of RelationalExpression is null. should return false 93 genA = new GenA(); 94 genA.__proto__ = null; 95 96 InstanceOf( genA, GenA, false ); 97 98 // RelationalExpression.__proto__ == (but not ===) Identifier.prototype 99 100 InstanceOf( new Gen2(), Gen0, false ); 101 InstanceOf( new Gen2(), Gen1, false ); 102 InstanceOf( new Gen2(), Gen2, true ); 103 InstanceOf( new Gen2(), Gen3, true ); 104 105 // RelationalExpression.__proto__.__proto__ === Identifier.prototype 106 InstanceOf( new Gen0(), Gen0, true ); 107 InstanceOf( new Gen0(), Gen1, true ); 108 InstanceOf( new Gen0(), Gen2, true ); 109 InstanceOf( new Gen0(), Gen3, true ); 110 111 InstanceOf( new Gen0(), Object, true ); 112 InstanceOf( new Gen0(), Function, false ); 113 114 InstanceOf( Gen0, Function, true ); 115 InstanceOf( Gen0, Object, true ); 116 117 test();