Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 /**
8 File Name: proto_10.js
9 Section:
10 Description: Determining Instance Relationships
12 This tests Object Hierarchy and Inheritance, as described in the document
13 Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97
14 15:19:34 on http://devedge.netscape.com/. Current URL:
15 http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm
17 This tests the syntax ObjectName.prototype = new PrototypeObject using the
18 Employee example in the document referenced above.
20 Author: christine@netscape.com
21 Date: 12 november 1997
22 */
24 var SECTION = "proto_10";
25 var VERSION = "JS1_3";
26 var TITLE = "Determining Instance Relationships";
28 startTest();
29 writeHeaderToLog( SECTION + " "+ TITLE);
31 function InstanceOf( object, constructor ) {
32 while ( object != null ) {
33 if ( object == constructor.prototype ) {
34 return true;
35 }
36 object = object.__proto__;
37 }
38 return false;
39 }
40 function Employee ( name, dept ) {
41 this.name = name || "";
42 this.dept = dept || "general";
43 }
45 function Manager () {
46 this.reports = [];
47 }
48 Manager.prototype = new Employee();
50 function WorkerBee ( name, dept, projs ) {
51 this.base = Employee;
52 this.base( name, dept)
53 this.projects = projs || new Array();
54 }
55 WorkerBee.prototype = new Employee();
57 function SalesPerson () {
58 this.dept = "sales";
59 this.quota = 100;
60 }
61 SalesPerson.prototype = new WorkerBee();
63 function Engineer ( name, projs, machine ) {
64 this.base = WorkerBee;
65 this.base( name, "engineering", projs )
66 this.machine = machine || "";
67 }
68 Engineer.prototype = new WorkerBee();
70 var pat = new Engineer();
72 new TestCase( SECTION,
73 "pat.__proto__ == Engineer.prototype",
74 true,
75 pat.__proto__ == Engineer.prototype );
77 new TestCase( SECTION,
78 "pat.__proto__.__proto__ == WorkerBee.prototype",
79 true,
80 pat.__proto__.__proto__ == WorkerBee.prototype );
82 new TestCase( SECTION,
83 "pat.__proto__.__proto__.__proto__ == Employee.prototype",
84 true,
85 pat.__proto__.__proto__.__proto__ == Employee.prototype );
87 new TestCase( SECTION,
88 "pat.__proto__.__proto__.__proto__.__proto__ == Object.prototype",
89 true,
90 pat.__proto__.__proto__.__proto__.__proto__ == Object.prototype );
92 new TestCase( SECTION,
93 "pat.__proto__.__proto__.__proto__.__proto__.__proto__ == null",
94 true,
95 pat.__proto__.__proto__.__proto__.__proto__.__proto__ == null );
98 new TestCase( SECTION,
99 "InstanceOf( pat, Engineer )",
100 true,
101 InstanceOf( pat, Engineer ) );
103 new TestCase( SECTION,
104 "InstanceOf( pat, WorkerBee )",
105 true,
106 InstanceOf( pat, WorkerBee ) );
108 new TestCase( SECTION,
109 "InstanceOf( pat, Employee )",
110 true,
111 InstanceOf( pat, Employee ) );
113 new TestCase( SECTION,
114 "InstanceOf( pat, Object )",
115 true,
116 InstanceOf( pat, Object ) );
118 new TestCase( SECTION,
119 "InstanceOf( pat, SalesPerson )",
120 false,
121 InstanceOf ( pat, SalesPerson ) );
122 test();