summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/ajax/scriptaculous/test/unit/sortable_test.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/tests/mochitest/ajax/scriptaculous/test/unit/sortable_test.html')
-rw-r--r--dom/tests/mochitest/ajax/scriptaculous/test/unit/sortable_test.html205
1 files changed, 205 insertions, 0 deletions
diff --git a/dom/tests/mochitest/ajax/scriptaculous/test/unit/sortable_test.html b/dom/tests/mochitest/ajax/scriptaculous/test/unit/sortable_test.html
new file mode 100644
index 0000000000..c2bafd0b9d
--- /dev/null
+++ b/dom/tests/mochitest/ajax/scriptaculous/test/unit/sortable_test.html
@@ -0,0 +1,205 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>script.aculo.us Unit test file</title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <script src="../../lib/prototype.js" type="text/javascript"></script>
+ <script src="../../src/scriptaculous.js" type="text/javascript"></script>
+ <script src="../../src/unittest.js" type="text/javascript"></script>
+ <link rel="stylesheet" href="../test.css" type="text/css" />
+</head>
+<body>
+<h1>script.aculo.us Unit test file</h1>
+<p>
+ Test of sortable functions in dragdrop.js
+</p>
+
+<!-- Log output -->
+<div id="testlog"> </div>
+
+
+<ul id="sortable1">
+ <li id="item_1" class="a">item 1</li>
+ <li id="item_2" class="c b">item 1<ul><li id="item_99">!!!</li></ul></li>
+ <li id="item_3" class="b">item 1</li>
+ <li id="item_xy" class="x y">item 1</li>
+ <!-- a comment -->
+</ul>
+
+<div id="sortable2">
+ <div id="item_4">item 4</div> <div id="item_5">item 5</div>
+ <img src="icon.png" alt="img"/>
+ <!-- a comment -->
+</div>
+
+<div id="sortable3">
+
+</div>
+
+<!--
+ By default, _ is the only valid seperator
+ for the DOM ids. Complex element ids as in
+ the form of "some_element_id_1" should also
+ be parsed correctly (only the last part should
+ be serialized)
+-->
+<ul id="sortable_complex">
+ <li id="a_b_item_1" class="a">item 1</li>
+ <li id="ab_item_2" class="c b">item 1
+ <ul>
+ <li id="item_99">!!!</li>
+ </ul>
+ </li>
+ <li id="a-b-item_3z_33" class="b">item 1</li>
+ <li id="a-item-xy" class="x y">item 1</li>
+ <!-- a comment -->
+</ul>
+
+
+<ul id="sortable_specialcreate">
+ <li id="y1item">item 1</li>
+ <li id="y2item">item 1<ul><li id="yyyy9928282hjhd">!!!</li></ul></li>
+</ul>
+
+<ul id="sortable_specialformat">
+ <li id="x1item">item 1</li>
+ <li id="x2item">item 1<ul><li id="xxxxx88888item">!!!</li></ul></li>
+</ul>
+
+<!-- Tests follow -->
+<script type="text/javascript" language="javascript" charset="utf-8">
+// <![CDATA[
+
+ new Test.Unit.Runner({
+
+ setup: function() { with(this) {
+ Sortable.create('sortable1',{only:['a','b']});
+ Sortable.create('sortable2',{tag:'div'});
+ Sortable.create('sortable3');
+ Sortable.create('sortable_specialcreate',{ format:/(\d+)/ });
+ Sortable.create('sortable_specialformat');
+ Sortable.create('sortable_complex');
+ }},
+
+ teardown: function() { with(this) {
+ Sortable.destroy('sortable1');
+ Sortable.destroy('sortable2');
+ Sortable.destroy('sortable3');
+ Sortable.destroy('sortable_specialformat');
+ Sortable.destroy('sortable_specialcreate');
+ Sortable.destroy('sortable_complex');
+ }},
+
+ testSortableSerializeSequenceBasics: function() { with(this) {
+ assertEqual('sortable1[]=1&sortable1[]=2&sortable1[]=3', Sortable.serialize('sortable1'));
+
+ // test empty sortable
+ assertEqual('', Sortable.serialize('sortable3'));
+ assertEnumEqual([], Sortable.sequence('sortable3'));
+
+ Element.remove('item_4');
+ assertEqual('sortable2[]=5', Sortable.serialize('sortable2'));
+ assertEnumEqual(['5'], Sortable.sequence('sortable2'));
+ }},
+
+ testSortableSerializeFormat: function() { with(this) {
+ // should correctly serialize from option given to Sortable.create()
+ assertEqual('sortable_specialcreate[]=1&sortable_specialcreate[]=2',
+ Sortable.serialize('sortable_specialcreate'));
+
+ benchmark(function(){
+ Sortable.serialize('sortable_specialcreate')
+ },1,'Sortable.serialize');
+
+ // test special format given explicitly
+ assertEqual('sortable_specialformat[]=1&sortable_specialformat[]=2',
+ Sortable.serialize('sortable_specialformat', {format:/(\d+)/}));
+
+ // return full id
+ assertEqual('sortable_specialformat[]=x1item&sortable_specialformat[]=x2item',
+ Sortable.serialize('sortable_specialformat', {format:/(.*)/}));
+
+ // test default format given explicitly
+ assertEqual('sortable1[]=1&sortable1[]=2&sortable1[]=3',
+ Sortable.serialize('sortable1',{format:/^[^_]*_(.*)$/}));
+
+ // Ensure default options.format handles longer, more complex list
+ // item IDs
+ assertEqual('sortable_complex[]=1&sortable_complex[]=2&sortable_complex[]=33&sortable_complex[]=',
+ Sortable.serialize('sortable_complex'));
+ }},
+
+ testSortableSerializeRule: function() { with(this) {
+ var ids = ['x','x-y','test_test','x_y_z','x_y-x_z'];
+ ids.each(function(id){
+ assertEqual('1',
+ (id+'_1').match(Sortable.SERIALIZE_RULE)[1]);
+ });
+
+ assertNull('x'.match(Sortable.SERIALIZE_RULE));
+ }},
+
+ testSortableSerializeName: function() { with(this) {
+ assertEqual('dumdidu[]=1&dumdidu[]=2',
+ Sortable.serialize('sortable_specialcreate',{name:'dumdidu'}));
+ }},
+
+ testSortableSequenceFormat: function() { with(this) {
+ // shauld correctly serialize from option given to Sortable.create()
+ assertEnumEqual(['1','2'],
+ Sortable.sequence('sortable_specialcreate'));
+
+ // test special format given explicitly
+ assertEnumEqual(['1','2'],
+ Sortable.sequence('sortable_specialformat', {format:/(\d+)/}));
+
+ // return full id
+ assertEnumEqual(['x1item','x2item'],
+ Sortable.sequence('sortable_specialformat', {format:/(.*)/}));
+
+ // test default format given explicitly
+ assertEnumEqual(['1','2','3'],
+ Sortable.sequence('sortable1',{format:/^[^_]*_(.*)$/}));
+ }},
+
+ testSortableFindElements: function() { with(this) {
+ assertEqual(3, Sortable.findElements($('sortable1'),{tag:'li',only:['a','b']}).length);
+ benchmark(function(){
+ Sortable.findElements($('sortable1'),{tag:'li',only:['a','b']})
+ },1,'Sortable.findElements/1');
+
+ assertEqual(1, Sortable.findElements($('sortable1'),{tag:'li',only:['x']}).length);
+ assertEqual(1, Sortable.findElements($('sortable1'),{tag:'li',only:'a'}).length);
+ assertEqual(2, Sortable.findElements($('sortable1'),{tag:'li',only:'b'}).length);
+ assertEqual(4, Sortable.findElements($('sortable1'),{tag:'li',only:['a','b','x']}).length);
+ }},
+
+ testSortableSetSequence: function() { with(this) {
+ // make sure assigning current sequence is a no-op
+ var o = Sortable.sequence('sortable1');
+ Sortable.setSequence('sortable1', ['1','2','3']);
+ assertEnumEqual(o, Sortable.sequence('sortable1'));
+
+ // check new sequence
+ Sortable.setSequence('sortable1', ['3','2','1']);
+ assertEnumEqual(['3','2','1'], Sortable.sequence('sortable1'));
+
+ // non-default format
+ Sortable.setSequence('sortable_specialformat', ['2','1'], { format:/(\d+)/ });
+ assertEnumEqual(['2','1'], Sortable.sequence('sortable_specialformat'));
+
+ // invalid sequence ids should be ignored
+ Sortable.setSequence('sortable1', ['x', '1', 'y', '2', '3', 'z']);
+ assertEnumEqual(['1', '2', '3'], Sortable.sequence('sortable1'));
+
+ // elements omitted in new sequence should be cropped
+ Sortable.setSequence('sortable1', ['1', '3']);
+ assertEnumEqual(['1', '3'], Sortable.sequence('sortable1'));
+ }}
+
+ }, "testlog");
+// ]]>
+</script>
+</body>
+</html>