dom/tests/mochitest/ajax/scriptaculous/test/unit/ajax_autocompleter_test.html

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

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>

mercurial