headless-squirrel 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. data/README.rdoc +55 -0
  2. data/Rakefile +27 -0
  3. data/bin/jstest +10 -0
  4. data/lib/headless_squirrel.rb +2 -0
  5. data/lib/headless_squirrel/console.rb +24 -0
  6. data/lib/headless_squirrel/runner.rb +70 -0
  7. data/lib/headless_squirrel/test.rb +17 -0
  8. data/lib/headless_squirrel/test_case.rb +158 -0
  9. data/test/fixtures/a_unit_test.html +27 -0
  10. data/test/fixtures/a_unit_test.js +22 -0
  11. data/test/fixtures/syntax_error.html +27 -0
  12. data/test/fixtures/syntax_error.js +5 -0
  13. data/test/fixtures/type_error.html +27 -0
  14. data/test/fixtures/type_error.js +1 -0
  15. data/test/regression/prototype/unit/ajax_test.html +29 -0
  16. data/test/regression/prototype/unit/array_test.html +28 -0
  17. data/test/regression/prototype/unit/assets/prototype.js +4900 -0
  18. data/test/regression/prototype/unit/assets/unittest.css +50 -0
  19. data/test/regression/prototype/unit/assets/unittest.js +615 -0
  20. data/test/regression/prototype/unit/assets/unittest_transport.js +1 -0
  21. data/test/regression/prototype/unit/base_test.html +27 -0
  22. data/test/regression/prototype/unit/class_test.html +27 -0
  23. data/test/regression/prototype/unit/date_test.html +27 -0
  24. data/test/regression/prototype/unit/dom_test.html +304 -0
  25. data/test/regression/prototype/unit/element_mixins_test.html +30 -0
  26. data/test/regression/prototype/unit/enumerable_test.html +35 -0
  27. data/test/regression/prototype/unit/event_test.html +31 -0
  28. data/test/regression/prototype/unit/fixtures/ajax.html +2 -0
  29. data/test/regression/prototype/unit/fixtures/ajax.js +42 -0
  30. data/test/regression/prototype/unit/fixtures/array.html +1 -0
  31. data/test/regression/prototype/unit/fixtures/class.js +83 -0
  32. data/test/regression/prototype/unit/fixtures/content.html +1 -0
  33. data/test/regression/prototype/unit/fixtures/data.json +1 -0
  34. data/test/regression/prototype/unit/fixtures/dom.css +84 -0
  35. data/test/regression/prototype/unit/fixtures/dom.html +278 -0
  36. data/test/regression/prototype/unit/fixtures/dom.js +17 -0
  37. data/test/regression/prototype/unit/fixtures/element_mixins.html +4 -0
  38. data/test/regression/prototype/unit/fixtures/element_mixins.js +2 -0
  39. data/test/regression/prototype/unit/fixtures/empty.html +0 -0
  40. data/test/regression/prototype/unit/fixtures/empty.js +1 -0
  41. data/test/regression/prototype/unit/fixtures/enumerable.html +8 -0
  42. data/test/regression/prototype/unit/fixtures/enumerable.js +23 -0
  43. data/test/regression/prototype/unit/fixtures/event.html +4 -0
  44. data/test/regression/prototype/unit/fixtures/form.html +108 -0
  45. data/test/regression/prototype/unit/fixtures/function.js +13 -0
  46. data/test/regression/prototype/unit/fixtures/hash.js +25 -0
  47. data/test/regression/prototype/unit/fixtures/hello.js +1 -0
  48. data/test/regression/prototype/unit/fixtures/logo.gif +0 -0
  49. data/test/regression/prototype/unit/fixtures/object.html +6 -0
  50. data/test/regression/prototype/unit/fixtures/object.js +7 -0
  51. data/test/regression/prototype/unit/fixtures/position.html +9 -0
  52. data/test/regression/prototype/unit/fixtures/selector.html +71 -0
  53. data/test/regression/prototype/unit/fixtures/string.js +8 -0
  54. data/test/regression/prototype/unit/fixtures/unittest.html +18 -0
  55. data/test/regression/prototype/unit/form_test.html +135 -0
  56. data/test/regression/prototype/unit/function_test.html +27 -0
  57. data/test/regression/prototype/unit/hash_test.html +27 -0
  58. data/test/regression/prototype/unit/number_test.html +27 -0
  59. data/test/regression/prototype/unit/object_test.html +32 -0
  60. data/test/regression/prototype/unit/periodical_executer_test.html +27 -0
  61. data/test/regression/prototype/unit/position_test.html +36 -0
  62. data/test/regression/prototype/unit/prototype_test.html +27 -0
  63. data/test/regression/prototype/unit/range_test.html +27 -0
  64. data/test/regression/prototype/unit/regexp_test.html +27 -0
  65. data/test/regression/prototype/unit/selector_test.html +98 -0
  66. data/test/regression/prototype/unit/string_test.html +27 -0
  67. data/test/regression/prototype/unit/tests/ajax_test.js +379 -0
  68. data/test/regression/prototype/unit/tests/array_test.js +186 -0
  69. data/test/regression/prototype/unit/tests/base_test.js +43 -0
  70. data/test/regression/prototype/unit/tests/class_test.js +136 -0
  71. data/test/regression/prototype/unit/tests/date_test.js +5 -0
  72. data/test/regression/prototype/unit/tests/dom_test.js +1493 -0
  73. data/test/regression/prototype/unit/tests/element_mixins_test.js +32 -0
  74. data/test/regression/prototype/unit/tests/enumerable_test.js +271 -0
  75. data/test/regression/prototype/unit/tests/event_test.js +235 -0
  76. data/test/regression/prototype/unit/tests/form_test.js +382 -0
  77. data/test/regression/prototype/unit/tests/function_test.js +133 -0
  78. data/test/regression/prototype/unit/tests/hash_test.js +178 -0
  79. data/test/regression/prototype/unit/tests/number_test.js +44 -0
  80. data/test/regression/prototype/unit/tests/object_test.js +180 -0
  81. data/test/regression/prototype/unit/tests/periodical_executer_test.js +15 -0
  82. data/test/regression/prototype/unit/tests/position_test.js +44 -0
  83. data/test/regression/prototype/unit/tests/prototype_test.js +43 -0
  84. data/test/regression/prototype/unit/tests/range_test.js +58 -0
  85. data/test/regression/prototype/unit/tests/regexp_test.js +42 -0
  86. data/test/regression/prototype/unit/tests/selector_test.js +408 -0
  87. data/test/regression/prototype/unit/tests/string_test.js +548 -0
  88. data/test/regression/prototype/unit/tests/unittest_test.js +148 -0
  89. data/test/regression/prototype/unit/unittest_test.html +45 -0
  90. data/test/regression/prototype/upstream +1 -0
  91. data/test/regression/scriptaculous/unit/_ajax_inplaceeditor_ipce_alt_text.html +1 -0
  92. data/test/regression/scriptaculous/unit/_ajax_inplaceeditor_ipce_collection.js +1 -0
  93. data/test/regression/scriptaculous/unit/_ajax_inplaceeditor_result.html +1 -0
  94. data/test/regression/scriptaculous/unit/_ajax_inplaceeditor_result2.html +1 -0
  95. data/test/regression/scriptaculous/unit/_ajax_inplaceeditor_tagged.html +1 -0
  96. data/test/regression/scriptaculous/unit/_ajax_inplaceeditor_text.html +1 -0
  97. data/test/regression/scriptaculous/unit/_ajax_updater_result.html +20 -0
  98. data/test/regression/scriptaculous/unit/_autocomplete_result.html +11 -0
  99. data/test/regression/scriptaculous/unit/_autocomplete_result_nobr.html +1 -0
  100. data/test/regression/scriptaculous/unit/ajax_autocompleter_test.html +243 -0
  101. data/test/regression/scriptaculous/unit/ajax_inplaceeditor_test.html +895 -0
  102. data/test/regression/scriptaculous/unit/assets/builder.js +134 -0
  103. data/test/regression/scriptaculous/unit/assets/controls.js +963 -0
  104. data/test/regression/scriptaculous/unit/assets/dragdrop.js +973 -0
  105. data/test/regression/scriptaculous/unit/assets/effects.js +1122 -0
  106. data/test/regression/scriptaculous/unit/assets/javascripttest.rb +203 -0
  107. data/test/regression/scriptaculous/unit/assets/prototype.js +4320 -0
  108. data/test/regression/scriptaculous/unit/assets/scriptaculous.js +66 -0
  109. data/test/regression/scriptaculous/unit/assets/slider.js +273 -0
  110. data/test/regression/scriptaculous/unit/assets/sound.js +57 -0
  111. data/test/regression/scriptaculous/unit/assets/unittest.js +566 -0
  112. data/test/regression/scriptaculous/unit/bdd_test.html +150 -0
  113. data/test/regression/scriptaculous/unit/builder_test.html +262 -0
  114. data/test/regression/scriptaculous/unit/dragdrop_test.html +131 -0
  115. data/test/regression/scriptaculous/unit/effects_test.html +547 -0
  116. data/test/regression/scriptaculous/unit/element_test.html +116 -0
  117. data/test/regression/scriptaculous/unit/icon.png +0 -0
  118. data/test/regression/scriptaculous/unit/index.html +70 -0
  119. data/test/regression/scriptaculous/unit/loading_test.html +41 -0
  120. data/test/regression/scriptaculous/unit/position_clone_test.html +312 -0
  121. data/test/regression/scriptaculous/unit/slider_test.html +437 -0
  122. data/test/regression/scriptaculous/unit/sortable_test.html +205 -0
  123. data/test/regression/scriptaculous/unit/string_test.html +71 -0
  124. data/test/regression/scriptaculous/unit/unittest_test.html +154 -0
  125. data/test/regression/scriptaculous/upstream +1 -0
  126. data/test/test_helper.rb +20 -0
  127. data/test/unit/runner_test.rb +165 -0
  128. data/test/unit/test_case_test.rb +207 -0
  129. data/test/unit/test_test.rb +24 -0
  130. metadata +209 -0
@@ -0,0 +1,150 @@
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="assets/prototype.js" type="text/javascript"></script>
8
+ <script src="assets/scriptaculous.js" type="text/javascript"></script>
9
+ <script src="assets/unittest.js" type="text/javascript"></script>
10
+ <link rel="stylesheet" href="../test.css" type="text/css" />
11
+ </head>
12
+ <body>
13
+ <h1>script.aculo.us Unit test file</h1>
14
+
15
+ <!-- Log output -->
16
+ <div id="testlog"> </div>
17
+
18
+ <div id="d">initial</div>
19
+
20
+ <!-- Tests follow -->
21
+ <script type="text/javascript" language="javascript" charset="utf-8">
22
+ // <![CDATA[
23
+ var moo = 0;
24
+
25
+ var assertMethods = [];
26
+ for(method in Test.Unit.Assertions.prototype) {
27
+ if(/^assert/.test(method)) assertMethods.push(method);
28
+ }
29
+
30
+ var testObj = {
31
+ isNice: function(){
32
+ return true;
33
+ },
34
+ isBroken: function(){
35
+ return false;
36
+ }
37
+ }
38
+
39
+ Test.context("BDD-style testing",{
40
+
41
+ setup: function() {
42
+ $('d').update('setup!');
43
+ moo++;
44
+ },
45
+
46
+ teardown: function() {
47
+ moo--;
48
+ },
49
+
50
+ 'should run setup before each specification': function(){
51
+ assert($('d').innerHTML == 'setup!');
52
+ assert(moo == 1);
53
+ },
54
+
55
+ 'should run teardown after each specification': function(){
56
+ assert(moo == 1);
57
+ },
58
+
59
+ 'should provide extensions to tie in isSomething and respondsTo object methods': function(){
60
+ Object.extend(testObj, Test.BDDMethods);
61
+
62
+ testObj.shouldBe('nice');
63
+ testObj.shouldNotBe('broken');
64
+
65
+ testObj.shouldRespondTo('isNice');
66
+ testObj.shouldRespondTo('isBroken');
67
+ },
68
+
69
+ 'should automatically add extensions to strings': function(){
70
+ 'a'.shouldEqual('a');
71
+ 'a'.shouldNotEqual('b');
72
+ 'a'.shouldNotBeNull();
73
+ 'a'.shouldBeA(String);
74
+
75
+ var aString = 'boo!';
76
+ aString.shouldEqual('boo!');
77
+ aString.shouldBeA(String);
78
+ aString.shouldNotBeA(Number);
79
+ },
80
+
81
+ 'should automatically add extensions to numbers': function(){
82
+ var n = 123;
83
+ n.shouldEqual(123);
84
+ n.shouldNotEqual(4);
85
+
86
+ n.shouldBeA(Number);
87
+ n.shouldNotBeA(Test);
88
+ },
89
+
90
+ 'should automatically add extensions to arrays': function(){
91
+ ['a'].shouldNotBeA(String);
92
+ [1,2,3].shouldBeAn(Array);
93
+ [1,2,3].shouldEqualEnum([1,2,3]);
94
+ },
95
+
96
+ 'should automatically add extensions to booleans': function(){
97
+ var theTruth = true;
98
+ var lies = false;
99
+
100
+ theTruth.shouldNotBeA(String);
101
+ lies.shouldBeA(Boolean);
102
+ 'false'.shouldNotBeA(Boolean);
103
+
104
+ theTruth.shouldEqual(true);
105
+ lies.shouldNotEqual(true);
106
+ },
107
+
108
+ 'should support the eval() method': function(){
109
+ eval('2*2').shouldEqual(4);
110
+ },
111
+
112
+ 'should support equality assertion': function(){
113
+ assertEqual(1, 1);
114
+ assertEqual('a', 'a');
115
+ assertEqual(1, '1');
116
+
117
+ var x = 1;
118
+ var y = 1;
119
+ assertEqual(1, x)
120
+ assertEqual(x, y);
121
+ },
122
+
123
+ 'should provide all assertions': function(){
124
+ assertMethods.each(function(m){
125
+ assert(typeof this[m] == 'function');
126
+ }.bind(this));
127
+ },
128
+
129
+ 'should support deferred execution': function(){
130
+ wait(10,function(){
131
+ 'a'.shouldEqual('a');
132
+ });
133
+
134
+ wait(10,function(){
135
+ 'a'.shouldEqual('a');
136
+ wait(10,function(){
137
+ 'a'.shouldEqual('a');
138
+ wait(10,function(){
139
+ 'a'.shouldEqual('a');
140
+ });
141
+ });
142
+ });
143
+ }
144
+
145
+ });
146
+
147
+ // ]]>
148
+ </script>
149
+ </body>
150
+ </html>
@@ -0,0 +1,262 @@
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="assets/prototype.js" type="text/javascript"></script>
8
+ <script src="assets/scriptaculous.js" type="text/javascript"></script>
9
+ <script src="assets/unittest.js" type="text/javascript"></script>
10
+ <link rel="stylesheet" href="../test.css" type="text/css" />
11
+ </head>
12
+ <body>
13
+ <h1>script.aculo.us Unit test file</h1>
14
+ <p>
15
+ Tests for builder.js
16
+ </p>
17
+
18
+ <!-- Log output -->
19
+ <div id="testlog"> </div>
20
+
21
+ <div id="result"></div>
22
+
23
+ <!-- Tests follow -->
24
+ <script type="text/javascript" language="javascript" charset="utf-8">
25
+ // <![CDATA[
26
+
27
+ // Serializes a node and it's contents to plain old HTML
28
+ // IMPORTANT: style attributes can't be correctly serialized cross-browser wise,
29
+ // so the contents of style attributes must match what IE thinks is correct
30
+ function serializeNode(node){
31
+ if(node.nodeType == 3) return node.nodeValue;
32
+ node = $(node);
33
+ var tag = node.tagName.toLowerCase();
34
+ return '<' + ([tag].concat($A(node.attributes).map(function(attr){
35
+ // Filter out stuff that we don't need
36
+ if(attr.nodeName == '_extended' || attr.nodeName == '_counted' ||
37
+ typeof attr.nodeValue == 'function' ||!Element.hasAttribute(node, attr.nodeName)) return;
38
+ // remove trailing ; in style attributes on Firefox
39
+ var value = node.readAttribute(attr.nodeName);
40
+ if(attr.nodeName == 'style' && value.endsWith(';'))
41
+ value = value.substr(0, value.length-1);
42
+ return attr.nodeName + '="' + value + '"'
43
+ }).compact().sort())).join(' ') + '>' + $A(node.childNodes).map(serializeNode).join('') +
44
+ '</' + tag + '>';
45
+ }
46
+
47
+ new Test.Unit.Runner({
48
+
49
+ setup: function() {
50
+ $('result').innerHTML = '';
51
+ },
52
+
53
+ testBuilderBasics: function() { with(this) {
54
+ var element = Builder.node('div');
55
+ assertEqual('DIV', element.nodeName);
56
+
57
+ var element = Builder.node('div',{id:'mydiv'})
58
+ assertEqual('mydiv', element.id);
59
+
60
+ var element = Builder.node('div',{id:'mydiv',className:'one two'})
61
+ assertEqual('mydiv', element.id);
62
+ assertEqual('one two', element.className);
63
+
64
+ var element = Builder.node('span','text 123 <blah>');
65
+ assertEqual('SPAN', element.nodeName);
66
+ assertEqual('text 123 &lt;blah&gt;', element.innerHTML);
67
+
68
+ var element = Builder.node('span',123);
69
+ assertEqual('SPAN', element.nodeName);
70
+ assertEqual('123', element.innerHTML);
71
+
72
+ var element = Builder.node('span',['test']);
73
+ assertEqual('SPAN', element.nodeName);
74
+ assertEqual('test', element.innerHTML);
75
+
76
+ var element = Builder.node('span',['test',123]);
77
+ assertEqual('SPAN', element.nodeName);
78
+ assertEqual('test123', element.innerHTML);
79
+
80
+ var element = Builder.node('span',{},['test',123]);
81
+ assertEqual('SPAN', element.nodeName);
82
+ assertEqual('test123', element.innerHTML);
83
+
84
+ var element = Builder.node('span',{id:'myspan'},['test',123]);
85
+ assertEqual('SPAN', element.nodeName);
86
+ assertEqual('myspan', element.id);
87
+ assertEqual('test123', element.innerHTML);
88
+
89
+ var element = Builder.node('div',[1,2,[3],[[[4],5],6],7,8,[[[[9]]],0]]);
90
+ assertEqual('1234567890',element.innerHTML);
91
+
92
+ var element = Builder.node('div',[1,'2',['3'],[[[4],'5'],6],7,'8',[[[['9']]],0]]);
93
+ assertEqual('1234567890',element.innerHTML);
94
+
95
+ var element = Builder.node('div',{id:'mydiv'},[1,2,[3],[[[4],5],6],7,8,[[[[9]]],0]]);
96
+ assertEqual('1234567890',element.innerHTML);
97
+
98
+ var element = Builder.node('div',{id:'mydiv'},[1,'2',['3'],[[[4],'5'],6],7,'8',[[[['9']]],0]]);
99
+ assertEqual('1234567890',element.innerHTML);
100
+ assertEqual(10, element.childNodes.length);
101
+
102
+ var element = Builder.node('div', Builder.node('span'));
103
+ assertEqual(1, element.childNodes.length);
104
+ assertEqual('SPAN', element.childNodes[0].tagName);
105
+
106
+ var element = Builder.node('div', {id:'mydiv'}, Builder.node('span'));
107
+ assertEqual(1, element.childNodes.length);
108
+ assertEqual('mydiv', element.id);
109
+ assertEqual('SPAN', element.childNodes[0].tagName);
110
+ }},
111
+
112
+ testBuilderClassAndFor: function() { with(this) {
113
+ var elt = Builder.node('div', { className: 'demoClass' });
114
+ assertEqual('demoClass', elt.className);
115
+ var elt = Builder.node('label', { htmlFor: 'mydiv' });
116
+ assertEqual('mydiv', elt.htmlFor);
117
+ }},
118
+
119
+ testBuilderExtendsElement: function() { with(this) {
120
+ assertRespondsTo('hide', Builder.node('div'));
121
+ }},
122
+
123
+ testBuilderAllXHTMLTags: function() { with(this) {
124
+ var XHTML_TAGS = [
125
+ 'a','abbr','acronym','address','applet','area',
126
+ 'b','bdo','big','blockquote','br','button',
127
+ 'caption','cite','code','col','colgroup',
128
+ 'dd','del','dfn','div','dl','dt',
129
+ 'em',
130
+ 'fieldset','form',
131
+ 'h1','h2','h3','h4','h5','h6','hr',
132
+ 'i','iframe','img','input','ins',
133
+ 'kbd',
134
+ 'label','legend','li',
135
+ 'map',
136
+ 'object','ol','optgroup','option',
137
+ 'p','param','pre',
138
+ 'q',
139
+ 'samp','script','select','small','span','strong','style','sub','sup',
140
+ 'table','tbody','td','textarea','tfoot','th','thead','tr','tt',
141
+ 'ul','var']
142
+
143
+ XHTML_TAGS.each(function(tag) {
144
+ try {
145
+ var element = Builder.node(tag);
146
+ assertNotNull(element, 'Tag "'+tag+'" expected, but was null.');
147
+ assertEqual(tag.toUpperCase(), element.nodeName);
148
+
149
+ var element = Builder.node(tag,{id:'tag_'+tag+'_test_id'});
150
+ assertEqual(tag.toUpperCase(), element.nodeName);
151
+ assertEqual('tag_'+tag+'_test_id', element.id, 'Setting id attribute for "'+tag+'" failed!');
152
+ } catch(e) {
153
+ assert(false, 'Error while creating node of type '+tag+'. Note: Firefox bug in 1.0.X on option and optgroup, fixed in 1.5b1. Internet Explorer 6 doesn\'t support the ABBR tag and has no standard DOM implementation for tables.');
154
+ }
155
+ });
156
+ }},
157
+
158
+ // special case, because requires workarounds on IE and Firefox < 1.5
159
+ testBuilderOptionTag: function() { with(this) {
160
+ assertEqual('', Builder.node('option').innerHTML);
161
+ assertEqual('test', Builder.node('option','test').innerHTML);
162
+ assertEqual('', Builder.node('option',{className:'test'}).innerHTML);
163
+ assertEqual('test', Builder.node('option',{className:'test'},'test').innerHTML);
164
+ assertEqual('test', Builder.node('option',{},'test').innerHTML);
165
+
166
+ var selectElement = Builder.node('select');
167
+ var optionElement = Builder.node('option',{className:'test',id:'option_123'},123);
168
+ selectElement.appendChild(optionElement);
169
+ document.body.appendChild(selectElement);
170
+ assertEqual('123', $('option_123').innerHTML);
171
+ }},
172
+
173
+ testBuilderContatenation: function() { with(this) {
174
+ var element = Builder.node('div', [Builder.node('span')]);
175
+ assertEqual('DIV', element.nodeName);
176
+ assertEqual(1, element.childNodes.length);
177
+ assertEqual('SPAN', element.firstChild.nodeName);
178
+
179
+ var element = Builder.node('div', [Builder.node('span'),'text']);
180
+ assertEqual(2, element.childNodes.length);
181
+ assertEqual(0, element.firstChild.childNodes.length);
182
+ assertEqual('DIV', element.nodeName);
183
+ assertEqual('SPAN', element.firstChild.nodeName);
184
+ assertEqual(3, element.firstChild.nextSibling.nodeType);
185
+
186
+ var element = Builder.node('div', [Builder.node('span',[Builder.node('strong','blah')]),'text']);
187
+ assertEqual(2, element.childNodes.length);
188
+ assertEqual(1, element.firstChild.childNodes.length);
189
+ assertEqual('DIV', element.nodeName);
190
+ assertEqual('SPAN', element.firstChild.nodeName);
191
+ assertEqual('STRONG', element.firstChild.firstChild.nodeName);
192
+ assertEqual('blah', element.firstChild.firstChild.innerHTML);
193
+ assertEqual(3, element.firstChild.nextSibling.nodeType);
194
+ }},
195
+
196
+ testBuilderComplexExample: function() { with(this) {
197
+ var element = Builder.node('div',{id:'ghosttrain'},[
198
+ Builder.node('div',{style:'font-weight: bold; font-size: 11px'},[
199
+ Builder.node('h1','Ghost Train'),
200
+ "testtext", 2, 3, 4,
201
+ Builder.node('ul',[
202
+ Builder.node('li',{onclick:'alert(\'test\')'},'click me')
203
+ ]),
204
+ ]),
205
+ ]);
206
+ assertEqual('DIV', element.nodeName);
207
+
208
+ $('result').appendChild(element);
209
+
210
+ // browsers aren't sure about upper and lower case on elements
211
+ assertEqual(
212
+ '<div id="ghosttrain"><div style="font-weight: bold; font-size: 11px">' +
213
+ '<h1>Ghost Train</h1>testtext234<ul><li onclick="alert(\'test\')">click me</li></ul></div></div>',
214
+ serializeNode($('result').childNodes[0]));
215
+ }},
216
+
217
+ testBuilderShortcuts: function() { with(this) {
218
+ Builder.dump();
219
+
220
+ var element = DIV(SPAN());
221
+ assertEqual('SPAN', element.childNodes[0].tagName);
222
+
223
+ var element = DIV({id:'test'},SPAN());
224
+ assertEqual('SPAN', element.childNodes[0].tagName);
225
+
226
+ var element = DIV({id:'ghosttrain'},[
227
+ DIV({style:'font-weight: bold; font-size: 11px'},[
228
+ H1('Ghost Train'),
229
+ "testtext", 2, 3, 4,
230
+ UL([
231
+ LI({onclick:'alert(\'test\')'},'click me')
232
+ ]),
233
+ ]),
234
+ ]);
235
+ assertEqual('DIV', element.nodeName);
236
+
237
+ $('result').appendChild(element);
238
+
239
+ assertEqual(
240
+ '<div id="ghosttrain"><div style="font-weight: bold; font-size: 11px">' +
241
+ '<h1>Ghost Train</h1>testtext234<ul><li onclick="alert(\'test\')">click me</li></ul></div></div>',
242
+ serializeNode($('result').childNodes[0]));
243
+ }},
244
+
245
+ testBuilderBuild: function() { with(this) {
246
+ ['<span>this is <b>neat!</b></span>',' \n<span>this is <b>neat!</b></span>\n '].each(
247
+ function(html){
248
+ var node = Builder.build(html);
249
+ assertEqual('<span>this is <b>neat!</b></span>', serializeNode(node));
250
+ });
251
+ }},
252
+
253
+ testBuilderAttributeEscaping: function() { with(this) {
254
+ var element = Builder.node('div',{blah:"<foo'bar&baz\"bat>"});
255
+ assertEqual("<foo'bar&baz\"bat>", $(element).readAttribute('blah'));
256
+ }}
257
+
258
+ });
259
+ // ]]>
260
+ </script>
261
+ </body>
262
+ </html>
@@ -0,0 +1,131 @@
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="assets/prototype.js" type="text/javascript"></script>
8
+ <script src="assets/scriptaculous.js" type="text/javascript"></script>
9
+ <script src="assets/unittest.js" type="text/javascript"></script>
10
+ <link rel="stylesheet" href="../test.css" type="text/css" />
11
+ <style type="text/css" media="screen">
12
+ /* <![CDATA[ */
13
+ #div_absolute_test { position: absolute }
14
+ /* ]]> */
15
+ </style>
16
+
17
+ </head>
18
+ <body>
19
+ <h1>script.aculo.us Unit test file</h1>
20
+ <p>
21
+ Test of drag &amp; drop functions in dragdrop.js
22
+ </p>
23
+
24
+ <!-- Log output -->
25
+ <div id="testlog"> </div>
26
+
27
+ <p id="p_test">p_test</p>
28
+ <p id="p_test2">p_test2</p>
29
+ <p id="p_test3">p_test3</p>
30
+ <img id="img_test" src="icon.png" alt="img_text"/>
31
+ <div id="droppable_test">droppable_test</div>
32
+
33
+ <div id="div_test">div_test</div>
34
+ <div id="div_absolute_test">div_absolute_test</div>
35
+ <div id="div_absolute_inline_test" style="position:absolute">div_absolute_inline_test</div>
36
+
37
+ <div id="droppable_container">
38
+ <div id="d1">droppable_test</div>
39
+ <div id="d2">droppable_test</div>
40
+ </div>
41
+
42
+ <div id="droppable_container_2">
43
+ <div id="d3">droppable_test</div>
44
+ </div>
45
+
46
+ <!-- Tests follow -->
47
+ <script type="text/javascript" language="javascript" charset="utf-8">
48
+ // <![CDATA[
49
+
50
+ new Test.Unit.Runner({
51
+
52
+ testDraggableBasics: function() { with(this) {
53
+ var d = new Draggable('p_test');
54
+ assertInstanceOf(Draggable, d);
55
+ }},
56
+
57
+ testDraggableStartEffect: function() { with(this) {
58
+ var d = new Draggable('p_test2');
59
+ assert(d.options.starteffect, 'There should be a default start effect.');
60
+ d = new Draggable('p_test3', { endeffect: Prototype.EmptyFunction });
61
+ assert(undefined === d.options.startEffect, 'There should be no default start effect.');
62
+ }},
63
+
64
+ testAutoPositioning: function() { with(this) {
65
+ assertEqual('static', Element.getStyle('div_test','position'));
66
+ new Draggable('div_test');
67
+ new Draggable('div_absolute_test');
68
+ new Draggable('div_absolute_inline_test');
69
+ assertEqual('relative', Element.getStyle('div_test','position'));
70
+ assertEqual('absolute', Element.getStyle('div_absolute_test','position'));
71
+ assertEqual('absolute', Element.getStyle('div_absolute_inline_test','position'));
72
+ }},
73
+
74
+ testDroppbalesBasics: function() { with(this) {
75
+ assertEqual(0, Droppables.drops.length);
76
+ assertEqual('static', Element.getStyle('droppable_test','position'));
77
+
78
+ Droppables.add('droppable_test');
79
+ assertEqual(1, Droppables.drops.length);
80
+ assertEqual('relative', Element.getStyle('droppable_test','position'));
81
+
82
+ Droppables.remove('droppable_test');
83
+ assertEqual(0, Droppables.drops.length);
84
+
85
+ // accept option should take strings or array of strings
86
+ Droppables.add('droppable_test',{accept:'document'});
87
+ assertEqual(['document'].inspect(), Droppables.drops[0].accept.inspect());
88
+ Droppables.remove('droppable_test');
89
+
90
+ Droppables.add('droppable_test',{accept:['document','image']});
91
+ assertEqual(['document','image'].inspect(), Droppables.drops[0].accept.inspect());
92
+ Droppables.remove('droppable_test');
93
+ }},
94
+
95
+ testDroppableContainment: function() { with(this) {
96
+ // Droppable containers should be cached
97
+ Droppables.add('droppable_test', {
98
+ containment:'droppable_container' });
99
+ assertEqual(1, Droppables.drops[0]._containers.length);
100
+ assertEqual($('droppable_container'), Droppables.drops[0]._containers[0]);
101
+ assert(Droppables.isContained($('d1'), Droppables.drops[0]));
102
+ assert(Droppables.isContained($('d2'), Droppables.drops[0]));
103
+ assert(!Droppables.isContained($('d3'), Droppables.drops[0]));
104
+ Droppables.remove('droppable_test');
105
+
106
+ Droppables.add('droppable_test', {
107
+ containment:['droppable_container','droppable_container_2'] });
108
+ assertEqual(2, Droppables.drops[0]._containers.length);
109
+ assertEqual($('droppable_container'), Droppables.drops[0]._containers[0]);
110
+ assertEqual($('droppable_container_2'), Droppables.drops[0]._containers[1]);
111
+ assert(Droppables.isContained($('d1'), Droppables.drops[0]));
112
+ assert(Droppables.isContained($('d2'), Droppables.drops[0]));
113
+ assert(Droppables.isContained($('d3'), Droppables.drops[0]));
114
+ Droppables.remove('droppable_test');
115
+ }},
116
+
117
+ testDroppablesIsAffected: function() { with(this) {
118
+ Droppables.add('droppable_test');
119
+
120
+ Position.prepare();
121
+ assert(!Droppables.isAffected([-10, -10], null, Droppables.drops[0]));
122
+
123
+ var p = Position.page($('droppable_test'));
124
+ assert(Droppables.isAffected(p, null, Droppables.drops[0]));
125
+ }}
126
+
127
+ }, "testlog");
128
+ // ]]>
129
+ </script>
130
+ </body>
131
+ </html>