Remove UTF8 BOM marker from last commit.
[wine-gecko.git] / content / xbl / test / test_bug372769.xhtml
blob3241d214a695f6dfb243360c37cb8f089eba89b5
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <!--
3 https://bugzilla.mozilla.org/show_bug.cgi?id=372769
4 -->
5 <head>
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">
11 <binding id="test1">
12 <implementation>
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>
20 </implementation>
21 </binding>
23 <binding id="test2">
24 <implementation>
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>
35 </implementation>
36 </binding>
38 <binding id="test3-ancestor">
39 <implementation>
40 <field name="thirteen">"13 ancestor"</field>
41 <field name="fourteen">"14 ancestor"</field>
42 <property name="fifteen" readonly="true" onget="return '15 ancestor'"/>
43 </implementation>
44 </binding>
46 <binding id="test3" extends="#test3-ancestor">
47 <implementation>
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>
57 </implementation>
58 </binding>
60 <binding id="test4">
61 <implementation>
62 <field name="twenty">for (var i in this) ; 20;</field>
63 </implementation>
64 </binding>
66 <binding id="test5">
67 <implementation>
68 <field name="twenty-one">for (var i in this) ; 21;</field>
69 </implementation>
70 </binding>
71 </bindings>
72 </head>
73 <body>
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">
82 </div>
83 <pre id="test">
84 <script class="testbody" type="text/javascript">
85 <![CDATA[
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");
93 d.two = 2;
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");
107 d.four = 9;
108 is(d.four, 9, "Just set it to 9");
110 var found = false;
111 for (var prop in d) {
112 if (prop == "seven") {
113 found = true;
114 break;
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")
123 d = $("display2");
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");
131 var newProto = {};
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");
144 d = $("display3");
145 is(d.thirteen, 13, "descendant should win here");
146 is(d.fourteen, "14 ancestor",
147 "ancestor should win if descendant does nothing")
148 is(d.fifteen, 15,
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");
158 d = $("display4");
159 is(d.twenty, 20, "Should be 20");
161 d = $("display5");
162 found = false;
163 for (var prop2 in d) {
164 if (prop2 == "twenty-one") {
165 found = true;
166 break;
169 is(found, true, "Enumeration is broken");
170 is(d["twenty-one"], 21, "Should be 21");
173 addLoadEvent(SimpleTest.finish);
175 </script>
176 </pre>
177 </body>
178 </html>