]>
Commit | Line | Data |
---|---|---|
1 | /** | |
2 | File Name: regexp-enumerate-001.js | |
3 | ECMA V2 Section: | |
4 | Description: Regression Test. | |
5 | ||
6 | If instance Native Object have properties that are enumerable, | |
7 | JavaScript enumerated through the properties twice. This only | |
8 | happened if objects had been instantiated, but their properties | |
9 | had not been enumerated. ie, the object inherited properties | |
10 | from its prototype that are enumerated. | |
11 | ||
12 | In the core JavaScript, this is only a problem with RegExp | |
13 | objects, since the inherited properties of most core JavaScript | |
14 | objects are not enumerated. | |
15 | ||
16 | Author: christine@netscape.com, pschwartau@netscape.com | |
17 | Date: 12 November 1997 | |
18 | Modified: 14 July 2002 | |
19 | Reason: See http://bugzilla.mozilla.org/show_bug.cgi?id=155291 | |
20 | ECMA-262 Ed.3 Sections 15.10.7.1 through 15.10.7.5 | |
21 | RegExp properties should be DontEnum | |
22 | * | |
23 | */ | |
24 | // onerror = err; | |
25 | ||
26 | var SECTION = "regexp-enumerate-001"; | |
27 | var VERSION = "ECMA_2"; | |
28 | var TITLE = "Regression Test for Enumerating Properties"; | |
29 | ||
30 | var BUGNUMBER="339403"; | |
31 | ||
32 | startTest(); | |
33 | writeHeaderToLog( SECTION + " "+ TITLE); | |
34 | ||
35 | var tc = 0; | |
36 | var testcases = new Array(); | |
37 | ||
38 | /* | |
39 | * This test expects RegExp instances to have four enumerated properties: | |
40 | * source, global, ignoreCase, and lastIndex | |
41 | * | |
42 | * 99.01.25: now they also have a multiLine instance property. | |
43 | * | |
44 | */ | |
45 | ||
46 | ||
47 | var r = new RegExp(); | |
48 | ||
49 | var e = new Array(); | |
50 | ||
51 | var t = new TestRegExp(); | |
52 | ||
53 | for ( p in r ) { e[e.length] = { property:p, value:r[p] }; t.addProperty( p, r[p]) }; | |
54 | ||
55 | testcases[testcases.length] = new TestCase( SECTION, | |
56 | "r = new RegExp(); e = new Array(); "+ | |
57 | "for ( p in r ) { e[e.length] = { property:p, value:r[p] }; e.length", | |
58 | 0, | |
59 | e.length ); | |
60 | ||
61 | test(); | |
62 | ||
63 | function TestRegExp() { | |
64 | this.addProperty = addProperty; | |
65 | } | |
66 | function addProperty(name, value) { | |
67 | var pass = false; | |
68 | ||
69 | if ( eval("this."+name) != void 0 ) { | |
70 | pass = true; | |
71 | } else { | |
72 | eval( "this."+ name+" = "+ false ); | |
73 | } | |
74 | ||
75 | testcases[testcases.length] = new TestCase( SECTION, | |
76 | "Property: " + name +" already enumerated?", | |
77 | false, | |
78 | pass ); | |
79 | ||
80 | if ( testcases[ testcases.length-1].passed == false ) { | |
81 | testcases[testcases.length-1].reason = "property already enumerated"; | |
82 | ||
83 | } | |
84 | ||
85 | } | |
86 | function test() { | |
87 | for ( tc=0; tc < testcases.length; tc++ ) { | |
88 | testcases[tc].passed = writeTestCaseResult( | |
89 | testcases[tc].expect, | |
90 | testcases[tc].actual, | |
91 | testcases[tc].description +" = "+ | |
92 | testcases[tc].actual ); | |
93 | ||
94 | testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; | |
95 | } | |
96 | stopTest(); | |
97 | return ( testcases ); | |
98 | } |