Tue, 06 Jan 2015 21:39:09 +0100
Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4 <head>
5 <title>script.aculo.us Unit test file</title>
6 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
7 <script src="../../lib/prototype.js" type="text/javascript"></script>
8 <script src="../../src/scriptaculous.js" type="text/javascript"></script>
9 <script src="../../src/unittest.js" type="text/javascript"></script>
10 <link rel="stylesheet" href="../test.css" type="text/css" />
11 <style>
12 .selected { background-color: #888; }
13 </style>
14 </head>
15 <body>
16 <h1>script.aculo.us Unit test file</h1>
17 <p>
18 Tests for Ajax.Autocompleter in controls.js.
19 </p>
21 <!-- Log output -->
22 <div id="testlog"> </div>
24 <input id="ac_input" type="text" autocomplete="off" />
25 <div id="ac_update" style="display:none;border:1px solid black;background-color:white;position:relative;"></div>
27 <input id="ac_input_br" type="text" autocomplete="off" />
28 <div id="ac_update_br" style="display:none;border:1px solid black;background-color:white;position:relative;"></div>
30 <input id="ac2_input" type="text" autocomplete="off" />
31 <div id="ac2_update" style="display:none;border:1px solid black;background-color:white;position:relative;"></div>
33 <input id="actoken_input" type="text" autocomplete="off" />
34 <div id="actoken_update" style="display:none;border:1px solid black;background-color:white;position:relative;"></div>
36 <input id="dummy_element" type="text" autocomplete="off" />
38 <!-- Tests follow -->
39 <script type="text/javascript" language="javascript" charset="utf-8">
40 // <![CDATA[
43 new Test.Unit.Runner({
45 // Integration test, tests the entire cycle
46 testAjaxAutocompleter: function() { with(this) {
47 var ac = new Ajax.Autocompleter('ac_input','ac_update','_autocomplete_result.html',
48 { method: 'get' }); //override so we can use a static for the result
49 assertInstanceOf(Ajax.Autocompleter, ac);
51 // box not visible
52 assertNotVisible('ac_update');
54 // focus, but box not visible
55 Event.simulateMouse('ac_input', 'click');
56 assertNotVisible('ac_update');
58 Event.simulateKeys('ac_input','abcdefg');
59 assertEqual('abcdefg', $('ac_input').value);
61 // check box popping up on input
62 wait(1000, function() { with(this) {
63 assertVisible('ac_update');
64 assertEqual('test1', $('ac_update').firstChild.firstChild.innerHTML);
65 assertEqual('test2', $('ac_update').firstChild.firstChild.nextSibling.innerHTML);
67 // intl. characters return (UTF-8)
68 assertEqual('Here we have some international ©∏Á®Äç†∑rß', $('ac_update').firstChild.lastChild.innerHTML);
70 // first entry should be selected
71 assert(Element.hasClassName($('ac_update').firstChild.firstChild, 'selected'),'Selected item should have a className of: selected');
73 Event.simulateKey('ac_input','keypress',{keyCode:Event.KEY_DOWN});
75 // second entry should be selected
76 assert(!Element.hasClassName($('ac_update').firstChild.firstChild),'Item shouldn\'t have a className of: selected');
77 assert(Element.hasClassName($('ac_update').firstChild.firstChild.nextSibling, 'selected'),'Second entry should have a className of: selected');
79 // check selecting with <TAB>
80 Event.simulateKey('ac_input','keypress',{keyCode:Event.KEY_TAB});
81 assertEqual('test2',$('ac_input').value);
83 // check box going away
84 wait(500, function() { with(this) {
85 assertNotVisible('ac_update');
87 // check selecting with mouse click
88 Event.simulateKeys('ac_input','3');
89 assertEqual('test23', $('ac_input').value);
90 wait(1000, function() { with(this) {
91 assertVisible('ac_update');
92 Event.simulateMouse($('ac_update').firstChild.childNodes[4],'click');
94 wait(1000, function() { with(this) {
95 // tests if removal of 'informal' nodes and HTML escaping works
96 assertEqual('(GET <ME> INSTEAD)',$('ac_input').value);
97 assertNotVisible('ac_update');
99 // check cancelling with <ESC>
100 Event.simulateKeys('ac_input','abcdefg');
102 wait(1000, function() { with(this) {
103 assertVisible('ac_update');
104 assertEqual('(GET <ME> INSTEAD)abcdefg', $('ac_input').value);
106 Event.simulateKey('ac_input','keypress',{keyCode:Event.KEY_DOWN});
107 Event.simulateKey('ac_input','keypress',{keyCode:Event.KEY_ESC});
109 assertEqual('(GET <ME> INSTEAD)abcdefg', $('ac_input').value);
110 }});
111 }});
112 }});
113 }});
114 }});
115 }},
117 testAfterUpdateElement: function() { with(this) {
118 var ac = new Ajax.Autocompleter('ac2_input','ac2_update','_autocomplete_result.html',
119 { method: 'get',
120 afterUpdateElement: function(element,selectedElement) {
121 element.value = 'afterupdate:' + selectedElement.tagName;
122 }
123 });
124 assertInstanceOf(Ajax.Autocompleter, ac);
126 Event.simulateMouse('ac2_input', 'click');
127 Event.simulateKeys('ac2_input','abcdefg');
129 wait(1000, function() { with(this) {
130 assertVisible('ac2_update');
131 Event.simulateKey('ac2_input','keypress',{keyCode:Event.KEY_TAB});
133 assertEqual('afterupdate:LI',$('ac2_input').value);
134 }});
135 }},
137 testTokenizing: function() { with(this) {
138 var actoken = new Ajax.Autocompleter('actoken_input','ac_update','_autocomplete_result.html',
139 { tokens:',', method: 'get' });
140 assertInstanceOf(Ajax.Autocompleter, actoken);
142 Event.simulateKeys('actoken_input','abc');
144 wait(1000, function() { with(this) {
145 Event.simulateKey('actoken_input','keypress',{keyCode:Event.KEY_TAB});
146 assertEqual('test1',$('actoken_input').value);
147 Event.simulateKeys('actoken_input',',abc');
148 wait(1000, function() { with(this) {
149 Event.simulateKey('actoken_input','keypress',{keyCode:Event.KEY_DOWN});
150 Event.simulateKey('actoken_input','keypress',{keyCode:Event.KEY_TAB});
151 assertEqual('test1,test2',$('actoken_input').value);
152 }});
153 }});
154 }},
156 // Same integration test, results has no linebreaks
157 testAjaxAutocompleterNoLinebreaksInResult: function() { with(this) {
158 var ac = new Ajax.Autocompleter('ac_input_br','ac_update_br','_autocomplete_result_nobr.html',
159 { method: 'get' }); //override so we can use a static for the result
160 assertInstanceOf(Ajax.Autocompleter, ac);
162 // box not visible
163 assertNotVisible('ac_update_br');
165 // focus, but box not visible
166 Event.simulateMouse('ac_input_br', 'click');
167 assertNotVisible('ac_update_br');
169 Event.simulateKeys('ac_input_br','abcdefg');
170 assertEqual('abcdefg', $('ac_input_br').value);
172 // check box popping up on input
173 wait(1000, function() { with(this) {
174 assertVisible('ac_update_br');
175 assertEqual('test1', $('ac_update_br').firstChild.firstChild.innerHTML);
176 assertEqual('test2', $('ac_update_br').firstChild.firstChild.nextSibling.innerHTML);
178 // intl. characters return (UTF-8)
179 assertEqual('Here we have some international ©∏Á®Äç†∑rß', $('ac_update_br').firstChild.lastChild.innerHTML);
181 // first entry should be selected
182 assert(Element.hasClassName($('ac_update_br').firstChild.firstChild, 'selected'),'Selected item should have a className of: selected');
184 Event.simulateKey('ac_input_br','keypress',{keyCode:Event.KEY_DOWN});
186 // second entry should be selected
187 assert(!Element.hasClassName($('ac_update_br').firstChild.firstChild),'Item shouldn\'t have a className of: selected');
188 assert(Element.hasClassName($('ac_update_br').firstChild.firstChild.nextSibling, 'selected'),'Second entry should have a className of: selected');
190 // check selecting with <TAB>
191 Event.simulateKey('ac_input_br','keypress',{keyCode:Event.KEY_TAB});
192 assertEqual('test2',$('ac_input_br').value);
194 // check box going away
195 wait(500, function() { with(this) {
196 assertNotVisible('ac_update_br');
198 // check selecting with mouse click
199 Event.simulateKeys('ac_input_br','3');
200 assertEqual('test23', $('ac_input_br').value);
201 wait(1000, function() { with(this) {
202 assertVisible('ac_update_br');
203 Event.simulateMouse($('ac_update_br').firstChild.childNodes[4],'click');
205 wait(1000, function() { with(this) {
206 // tests if removal of 'informal' nodes and HTML escaping works
207 assertEqual('(GET <ME> INSTEAD)',$('ac_input_br').value);
208 assertNotVisible('ac_update_br');
210 // check cancelling with <ESC>
211 Event.simulateKeys('ac_input_br','abcdefg');
213 wait(1000, function() { with(this) {
214 assertVisible('ac_update_br');
215 assertEqual('(GET <ME> INSTEAD)abcdefg', $('ac_input_br').value);
217 Event.simulateKey('ac_input_br','keypress',{keyCode:Event.KEY_DOWN});
218 Event.simulateKey('ac_input_br','keypress',{keyCode:Event.KEY_ESC});
220 assertEqual('(GET <ME> INSTEAD)abcdefg', $('ac_input_br').value);
221 }});
222 }});
223 }});
224 }});
225 }});
226 }}
228 });
229 // ]]>
230 </script>
231 </body>
232 </html>