1 <html xmlns=
"http://www.w3.org/1999/xhtml">
3 https://bugzilla.mozilla.org/show_bug.cgi?id=372769
6 <title>Test for Bug
372769</title>
7 <script type=
"text/javascript" src=
"/MochiKit/packed.js"></script>
8 <script type=
"text/javascript" src=
"/tests/SimpleTest/SimpleTest.js"></script>
9 <link rel=
"stylesheet" type=
"text/css" href=
"/tests/SimpleTest/test.css" />
10 <bindings xmlns=
"http://www.mozilla.org/xbl">
13 <field name=
"one">1</field>
14 <field name=
"two">9</field>
15 <field name=
"three">3</field>
16 <field name=
"four">10</field>
17 <field name=
"five">11</field>
18 <field name=
"six">this.four =
4;
6;
</field>
19 <field name=
"seven">this.five =
5;
7;
</field>
25 <!-- Tests for recursive resolves -->
26 <field name=
"eight">this.eight
</field>
27 <field name=
"nine">this.ten
</field>
28 <field name=
"ten">this.nine
</field>
29 <!-- Tests for non-DOM overrides -->
30 <field name=
"eleven">11</field>
31 <field name=
"twelve">12</field>
32 <!-- Tests for DOM overrides -->
33 <field name=
"parentNode">this.parentNode
</field>
34 <field name=
"ownerDocument">"ownerDocument override"</field>
38 <binding id=
"test3-ancestor">
40 <field name=
"thirteen">"13 ancestor"</field>
41 <field name=
"fourteen">"14 ancestor"</field>
42 <property name=
"fifteen" readonly=
"true" onget=
"return '15 ancestor'"/>
46 <binding id=
"test3" extends=
"#test3-ancestor">
48 <field name=
"thirteen">13</field>
49 <field name=
"fifteen">15</field>
50 <field name=
"sixteen">16</field>
51 <field name=
"sixteen">"16 later"</field>
52 <field name=
"seventeen">17</field>
53 <field name=
"eighteen">"18 field"</field>
54 <property name=
"eighteen" readonly=
"true" onget=
"return 18"/>
55 <property name=
"nineteen" readonly=
"true" onget=
"return 19"/>
56 <field name=
"nineteen">"19 field"</field>
62 <field name=
"twenty">for (var i in this) ;
20;
</field>
68 <field name=
"twenty-one">for (var i in this) ;
21;
</field>
74 <a target=
"_blank" href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=372769">Mozilla Bug
372769</a>
75 <p id=
"display1" style=
"-moz-binding: url(#test1)"></p>
76 <p id=
"display2" style=
"-moz-binding: url(#test2)"></p>
77 <p id=
"display3" style=
"-moz-binding: url(#test3)"></p>
78 <p id=
"display4" style=
"-moz-binding: url(#test4)"></p>
79 <p id=
"display5" style=
"-moz-binding: url(#test5)"></p>
80 <div id=
"content" style=
"display: none">
84 <script class=
"testbody" type=
"text/javascript">
87 /** Test for Bug
372769 **/
88 SimpleTest.waitForExplicitFinish();
89 addLoadEvent(function() {
90 var d = $(
"display1");
91 is(d.one,
1,
"Should be able to read field");
94 is(d.two,
2,
"Should be able to write field");
96 is(
"three" in d, true, 'Should have a property named
"three"');
97 is(d.three,
3,
"Should be 3");
99 is(d.four,
10,
"Unexpected value so far");
101 // Save
"five" for now
103 is(d.six,
6,
"Should be 6");
105 is(d.four,
4,
"Now should be 4");
108 is(d.four,
9,
"Just set it to 9");
111 for (var prop in d) {
112 if (prop ==
"seven") {
117 is(found, true,
"Enumeration is broken");
119 is(d.four,
9,
"Shouldn't have rerun field six");
120 is(d.five,
5,
"Should have run field 7");
121 is(d.seven,
7,
"Should be 7")
124 is(typeof(d.eight),
"undefined",
"Recursive resolve should bail out");
125 is(typeof(d.nine),
"undefined",
"Recursive double resolve should bail out");
126 is(typeof(d.ten),
"undefined",
127 "This recursive double resolve should bail out too");
129 // Get .eleven so it's resolved now
130 is(d.eleven,
11,
"Unexpected value for .eleven");
132 newProto.eleven =
"Proto 11";
133 newProto.twelve =
"Proto 12";
134 newProto.__proto__ = d.__proto__;
135 d.__proto__ = newProto;
136 is(d.eleven,
11,
"Proto should not have affected this");
137 is(d.twelve,
"Proto 12",
"Proto should have overridden 'twelve'");
139 is(d.parentNode, undefined,
"We overrode this, yes we did");
140 is(typeof(d.parentNode),
"undefined",
"This is a recursive resolve too");
141 is(d.ownerDocument,
"ownerDocument override",
142 "Should have overridden ownerDocument");
145 is(d.thirteen,
13,
"descendant should win here");
146 is(d.fourteen,
"14 ancestor",
147 "ancestor should win if descendant does nothing")
149 "Field beats ancestor's property, since the latter lives on higher proto")
150 is(d.sixteen,
16,
"First field wins");
151 is(d.__proto__.seventeen, undefined,
"Shouldn't have this on proto");
152 is(typeof(d.__proto__.seventeen),
"undefined",
153 "Really, should be undefined");
154 is(d.seventeen,
17,
"Should have this prop on the node itself, though");
155 is(d.eighteen,
18,
"Property beats field");
156 is(d.nineteen,
19,
"Property still beats field");
159 is(d.twenty,
20,
"Should be 20");
163 for (var prop2 in d) {
164 if (prop2 ==
"twenty-one") {
169 is(found, true,
"Enumeration is broken");
170 is(d[
"twenty-one"],
21,
"Should be 21");
173 addLoadEvent(SimpleTest.finish);