File: instanceof-001.js

package info (click to toggle)
qtwebkit-opensource-src 5.3.2%2Bdfsg-2~bpo70%2B1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy-backports
  • size: 291,472 kB
  • sloc: cpp: 1,358,084; python: 70,286; ansic: 42,964; perl: 35,474; ruby: 12,229; objc: 9,465; xml: 8,396; asm: 3,866; yacc: 2,397; sh: 1,647; makefile: 644; lex: 644; java: 110
file content (117 lines) | stat: -rw-r--r-- 3,137 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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();