headless-squirrel 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,895 @@
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 <code>Ajax.InPlaceEditor</code> and <code>Ajax.InPlaceCollectionEditor</code> in controls.js
16
+ </p>
17
+
18
+ <!-- Log output -->
19
+ <div id="testlog"> </div>
20
+
21
+ <h1 id="tobeedited">To be edited</h1>
22
+ <a id="tobeeditedEditControl" href="#">edit</a>
23
+
24
+ <p id="newtbe">New to be edited</p>
25
+ <p id="newtbe_external">External control for it</p>
26
+
27
+ <p id="contains_ampersand">Me & Myself</p>
28
+
29
+ <div id="tobeeditedMultiLine">First line<br/>
30
+ Second line<br/>
31
+ Third line</div>
32
+
33
+ <!-- Tests follow -->
34
+ <script type="text/javascript" language="javascript" charset="utf-8">
35
+ // <![CDATA[
36
+
37
+ var IPCE_COLLECTION = [
38
+ ['tbe', 'To be edited'],
39
+ ['ntbe', 'New to be edited'],
40
+ ['ntbe2', 'New to be edited 2'],
41
+ ['ntbe3', 'New to be edited 3']
42
+ ];
43
+
44
+ new Test.Unit.Runner({
45
+
46
+ setup: function() { with(this) {
47
+ inPlaceEditor = new Ajax.InPlaceEditor($('tobeedited'), '_ajax_inplaceeditor_result.html', {
48
+ externalControl: $('tobeeditedEditControl'),
49
+ ajaxOptions: {method: 'get'} //override so we can use a static for the result
50
+ });
51
+ inPlaceEditorMultiLine = new Ajax.InPlaceEditor($('tobeeditedMultiLine'), '_ajax_inplaceeditor_result.html', {
52
+ ajaxOptions: {method: 'get'} //override so we can use a static for the result
53
+ });
54
+ }},
55
+
56
+ teardown: function() { with(this) {
57
+ inPlaceEditor.dispose();
58
+ inPlaceEditorMultiLine.dispose();
59
+ }},
60
+
61
+ // Original-version tests, still pass thx to backward compatibility
62
+
63
+ // Integration test, tests the entire cycle
64
+ testInPlaceEditor: function() { with(this) {
65
+ Event.simulateMouse('tobeedited','click');
66
+ assertHidden($('tobeedited'));
67
+ assertNotNull(document.forms[0]);
68
+ assertEqual("cancel", document.forms[0].lastChild.innerHTML);
69
+ assertVisible(document.forms[0]);
70
+
71
+ Event.simulateMouse(document.forms[0].lastChild,'click');
72
+ assertNull(document.forms[0]);
73
+ assertVisible($('tobeedited'));
74
+ assertEqual("transparent", Element.getStyle('tobeedited','background-color'));
75
+ Event.simulateMouse('tobeedited','mouseover');
76
+ Event.simulateMouse('tobeedited','click');
77
+
78
+ assertEqual("INPUT", document.forms[0].firstChild.tagName);
79
+ assertEqual("To be edited", document.forms[0].firstChild.value);
80
+ assertEqual("INPUT", document.forms[0].childNodes[1].tagName);
81
+ assertEqual("submit", document.forms[0].childNodes[1].type);
82
+ assertEqual("To be edited", document.forms[0].firstChild.value);
83
+ assert(Element.hasClassName(document.forms[0], 'inplaceeditor-form'),
84
+ "form doesn't have proper class: " + document.forms[0].className);
85
+
86
+ Event.simulateMouse(document.forms[0].childNodes[1],'click');
87
+
88
+ assertVisible($('tobeedited'));
89
+ assertEqual("Saving...", $('tobeedited').innerHTML);
90
+ assertEqual("transparent", Element.getStyle('tobeedited','background-color'));
91
+ assert(Element.hasClassName($('tobeedited'), 'inplaceeditor-saving'),
92
+ "doesn't have saving class");
93
+
94
+ wait(1000, function() {
95
+ assertEqual("Server received: To be edited", $('tobeedited').innerHTML);
96
+ assertNull(document.forms[0]);
97
+ assertVisible($('tobeedited'));
98
+ assert(!Element.hasClassName($('tobeedited'), 'inplaceeditor-saving'));
99
+ });
100
+ }},
101
+
102
+ testHovering: function() { with(this) {
103
+ Event.simulateMouse('tobeedited','mouseover');
104
+ assertEqual("rgb(255, 255, 153)", Element.getStyle('tobeedited','background-color'));
105
+
106
+ Event.simulateMouse('tobeedited','mouseout');
107
+ wait(1100, function() {
108
+ assertEqual("transparent", Element.getStyle('tobeedited','background-color'),
109
+ "should be transparent after mouse leaves element");
110
+
111
+ Event.simulateMouse('tobeedited','click');
112
+ })
113
+ }},
114
+
115
+ testLoadsTextFromServer: function() { with(this) {
116
+ inPlaceEditor.options.loadTextURL = '_ajax_inplaceeditor_text.html';
117
+ inPlaceEditor.enterEditMode();
118
+ assertEqual('Loading...', inPlaceEditor._form.value.value);
119
+ assert(inPlaceEditor._form.value.disabled);
120
+ assert(Element.hasClassName(inPlaceEditor._form, 'inplaceeditor-loading'));
121
+ wait(1000, function() {
122
+ assertEqual('Text from server', inPlaceEditor._form.value.value);
123
+ assert(!inPlaceEditor._form.value.disabled);
124
+ });
125
+ }},
126
+
127
+ testDisposesProperly: function() { with(this) {
128
+ assertEqual("transparent", Element.getStyle('tobeedited','background-color'));
129
+ inPlaceEditor.dispose();
130
+ assertEqual("transparent", Element.getStyle('tobeedited','background-color'));
131
+ assertVisible($('tobeedited'));
132
+ Event.simulateMouse('tobeedited','click');
133
+ assertVisible($('tobeedited'));
134
+ }},
135
+
136
+ testUsesTextAreaWhenMoreThanOneRows: function() { with(this) {
137
+ inPlaceEditor.options.rows = 5;
138
+ inPlaceEditor.enterEditMode();
139
+ assertEqual("TEXTAREA", document.forms[0].firstChild.tagName);
140
+ assertEqual("BR", document.forms[0].childNodes[1].tagName);
141
+ }},
142
+
143
+ testCanSpecifyAllTextsThroughOptions: function() { with(this) {
144
+ // swedish translation ;-)
145
+ inPlaceEditor.options.okText = "spara";
146
+ inPlaceEditor.options.cancelText = "avbryt";
147
+ inPlaceEditor.options.savingText = "Sparar...";
148
+ inPlaceEditor.enterEditMode();
149
+ assertEqual("spara", document.forms[0].lastChild.previousSibling.value);
150
+ assertEqual("avbryt", document.forms[0].lastChild.innerHTML);
151
+ inPlaceEditor.showSaving();
152
+ assertEqual("Sparar...", $('tobeedited').innerHTML);
153
+ }},
154
+
155
+ testCanSpecifyFormIdThroughOptions: function() { with(this) {
156
+ inPlaceEditor.enterEditMode();
157
+ // default form id
158
+ assertEqual("tobeedited-inplaceeditor", document.forms[0].id);
159
+ inPlaceEditor.leaveEditMode();
160
+ inPlaceEditor.options.formId = "myFormId";
161
+ inPlaceEditor.enterEditMode();
162
+ assertEqual("myFormId", document.forms[0].id);
163
+ }},
164
+
165
+ testCantEditWhileSaving: function() { with(this) {
166
+ inPlaceEditor.prepareSubmission();
167
+ Event.simulateMouse('tobeedited','mouseover');
168
+ assertEqual("transparent", Element.getStyle('tobeedited','background-color'));
169
+ Event.simulateMouse('tobeedited','click');
170
+ assertVisible($('tobeedited'));
171
+ }},
172
+
173
+ testCallbackFunctionGetsCalled: function() { with(this) {
174
+ var called = false;
175
+ inPlaceEditor.options.callback = function(form) {
176
+ called = true;
177
+ }
178
+ Event.simulateMouse('tobeedited','click');
179
+ Event.simulateMouse(document.forms[0].childNodes[1],'click');
180
+ assert(called, "callback was not called");
181
+ }},
182
+
183
+ testCanUseExternalElementToGoIntoEditMode: function() { with(this) {
184
+ Event.simulateMouse('tobeeditedEditControl','click');
185
+ assertNotNull(document.forms[0], "external control didn't work");
186
+ // doesn't work if you click it again while in edit mode
187
+ Event.simulateMouse('tobeeditedEditControl','click');
188
+ assertNull(document.forms[1], "external control created two forms");
189
+ assertNotVisible($('tobeeditedEditControl'));
190
+ Event.simulateMouse(document.forms[0].childNodes[2],'click');
191
+ assertVisible($('tobeeditedEditControl'));
192
+ }},
193
+
194
+ // Rewritten-version tests
195
+ testControlOptions: function() {with(this) {
196
+ // Default, then explicit default-equivalent, settings
197
+ [{}, { okControl: 'button', cancelControl: 'link' }].each(function(opts) {
198
+ var ipe = new Ajax.InPlaceEditor('newtbe', '', opts);
199
+ Event.simulateMouse('newtbe', 'click');
200
+ var submits = $('newtbe-inplaceeditor').getInputs('submit');
201
+ assertEqual(1, submits.length, 'Not just one submit');
202
+ assertEqual(Ajax.InPlaceEditor.DefaultOptions.okText, submits[0].value, 'Incorrect button label');
203
+ assert(submits[0].hasClassName('editor_ok_button'), 'Missing class name on ok button');
204
+ var links = $$('#newtbe-inplaceeditor a');
205
+ assertEqual(1, links.length, 'Not just one link');
206
+ assertEqual(Ajax.InPlaceEditor.DefaultOptions.cancelText, links[0].firstChild.nodeValue, 'Incorrect cancel link text');
207
+ assert(links[0].href.endsWith('#'), 'Incorrect cancel link href');
208
+ assert(links[0].hasClassName('editor_cancel_link'), 'Missing class name on cancel link');
209
+ ipe.dispose();
210
+ });
211
+ // Reverse: ok link, cancel button
212
+ var ipe = new Ajax.InPlaceEditor('newtbe', '', { okControl: 'link', cancelControl: 'button' });
213
+ Event.simulateMouse('newtbe', 'click');
214
+ var links = $$('#newtbe-inplaceeditor a');
215
+ assertEqual(1, links.length, 'Not just one link');
216
+ assertEqual(Ajax.InPlaceEditor.DefaultOptions.okText, links[0].firstChild.nodeValue, 'Incorrect ok link text');
217
+ assert(links[0].href.endsWith('#'), 'Incorrect ok link href');
218
+ assert(links[0].hasClassName('editor_ok_link'), 'Missing class name on ok link');
219
+ var submits = $('newtbe-inplaceeditor').getInputs('submit');
220
+ assertEqual(1, submits.length, 'Not just one submit');
221
+ assertEqual(Ajax.InPlaceEditor.DefaultOptions.cancelText, submits[0].value, 'Incorrect button label');
222
+ assert(submits[0].hasClassName('editor_cancel_button'), 'Missing class name on cancel button');
223
+ ipe.dispose();
224
+ // Full links
225
+ ipe = new Ajax.InPlaceEditor('newtbe', '', { okControl: 'link' });
226
+ Event.simulateMouse('newtbe', 'click');
227
+ var links = $$('#newtbe-inplaceeditor a');
228
+ assertEqual(2, links.length, 'There should be two links');
229
+ assertEqual(Ajax.InPlaceEditor.DefaultOptions.okText, links[0].firstChild.nodeValue, 'Incorrect ok link text');
230
+ assertEqual(Ajax.InPlaceEditor.DefaultOptions.cancelText, links[1].firstChild.nodeValue, 'Incorrect cancel link text');
231
+ assert(links[0].href.endsWith('#'), 'Incorrect ok link href');
232
+ assert(links[1].href.endsWith('#'), 'Incorrect cancel link href');
233
+ assert(links[0].hasClassName('editor_ok_link'), 'Missing class name on ok link');
234
+ assert(links[1].hasClassName('editor_cancel_link'), 'Missing class name on cancel link');
235
+ var submits = $('newtbe-inplaceeditor').getInputs('submit');
236
+ assertEqual(0, submits.length, 'There should be no submit');
237
+ ipe.dispose();
238
+ // Full buttons
239
+ ipe = new Ajax.InPlaceEditor('newtbe', '', { cancelControl: 'button' });
240
+ Event.simulateMouse('newtbe', 'click');
241
+ var submits = $('newtbe-inplaceeditor').getInputs('submit');
242
+ assertEqual(2, submits.length, 'There should be two submits');
243
+ assertEqual(Ajax.InPlaceEditor.DefaultOptions.okText, submits[0].value, 'Incorrect ok button text');
244
+ assertEqual(Ajax.InPlaceEditor.DefaultOptions.cancelText, submits[1].value, 'Incorrect cancel button text');
245
+ assert(submits[0].hasClassName('editor_ok_button'), 'Missing class name on ok button');
246
+ assert(submits[1].hasClassName('editor_cancel_button'), 'Missing class name on cancel button');
247
+ var links = $$('#newtbe-inplaceeditor a');
248
+ assertEqual(0, links.length, 'There should be no link');
249
+ ipe.dispose();
250
+ // No cancel
251
+ ipe = new Ajax.InPlaceEditor('newtbe', '', { cancelControl: false });
252
+ Event.simulateMouse('newtbe', 'click');
253
+ var submits = $('newtbe-inplaceeditor').getInputs('submit');
254
+ assertEqual(1, submits.length, 'Not just one submit');
255
+ var links = $$('#newtbe-inplaceeditor a');
256
+ assertEqual(0, links.length, 'There should be no link');
257
+ ipe.dispose();
258
+ // No OK
259
+ ipe = new Ajax.InPlaceEditor('newtbe', '', { okControl: false });
260
+ Event.simulateMouse('newtbe', 'click');
261
+ var submits = $('newtbe-inplaceeditor').getInputs('submit');
262
+ assertEqual(0, submits.length, 'There should be no submit');
263
+ var links = $$('#newtbe-inplaceeditor a');
264
+ assertEqual(1, links.length, 'Not just one link');
265
+ ipe.dispose();
266
+ // Nothing
267
+ ipe = new Ajax.InPlaceEditor('newtbe', '', { okControl: false, cancelControl: false });
268
+ Event.simulateMouse('newtbe', 'click');
269
+ var submits = $('newtbe-inplaceeditor').getInputs('submit');
270
+ assertEqual(0, submits.length, 'There should be no submit');
271
+ var links = $$('#newtbe-inplaceeditor a');
272
+ assertEqual(0, links.length, 'There should be no link');
273
+ ipe.dispose();
274
+ // Texts: default mode
275
+ ipe = new Ajax.InPlaceEditor('newtbe', '', { okControl: false, cancelControl: false });
276
+ Event.simulateMouse('newtbe', 'click');
277
+ var submits = $('newtbe-inplaceeditor').getInputs('submit');
278
+ assertEqual(0, submits.length, 'There should be no submit');
279
+ var links = $$('#newtbe-inplaceeditor a');
280
+ assertEqual(0, links.length, 'There should be no link');
281
+ ipe.dispose();
282
+ // Texts: before w/ controls
283
+ ipe = new Ajax.InPlaceEditor('newtbe', '', { textBeforeControls: '[' });
284
+ Event.simulateMouse('newtbe', 'click');
285
+ var text = $('newtbe-inplaceeditor').childNodes[1];
286
+ assertEqual(3, text.nodeType, 'Missing/misplaced initial text');
287
+ assertEqual('[', text.nodeValue, 'Incorrect text');
288
+ ipe.dispose();
289
+ // Texts: after w/ controls
290
+ ipe = new Ajax.InPlaceEditor('newtbe', '', { textAfterControls: ']' });
291
+ Event.simulateMouse('newtbe', 'click');
292
+ var text = $('newtbe-inplaceeditor').childNodes[3];
293
+ assertEqual(3, text.nodeType, 'Missing/misplaced final text');
294
+ assertEqual(']', text.nodeValue, 'Incorrect text');
295
+ ipe.dispose();
296
+ // Texts: between w/ controls
297
+ ipe = new Ajax.InPlaceEditor('newtbe', '', { textBetweenControls: ' ' });
298
+ Event.simulateMouse('newtbe', 'click');
299
+ var text = $('newtbe-inplaceeditor').childNodes[2];
300
+ assertEqual(3, text.nodeType, 'Missing/misplaced middle text');
301
+ assertEqual(' ', text.nodeValue, 'Incorrect text');
302
+ ipe.dispose();
303
+ // Texts: before w/ no control
304
+ ipe = new Ajax.InPlaceEditor('newtbe', '', { textBeforeControls: '[', okControl: false, cancelControl: false });
305
+ Event.simulateMouse('newtbe', 'click');
306
+ var nodes = $('newtbe-inplaceeditor').childNodes;
307
+ assertEqual(1, nodes.length, 'Too many nodes in the form.');
308
+ ipe.dispose();
309
+ // Texts: after w/ no control
310
+ ipe = new Ajax.InPlaceEditor('newtbe', '', { textAfterControls: ']', okControl: false, cancelControl: false });
311
+ Event.simulateMouse('newtbe', 'click');
312
+ var nodes = $('newtbe-inplaceeditor').childNodes;
313
+ assertEqual(1, nodes.length, 'Too many nodes in the form.');
314
+ ipe.dispose();
315
+ // Texts: between w/ less than two controls
316
+ ipe = new Ajax.InPlaceEditor('newtbe', '', { textBetweenControls: ' ', okControl: false });
317
+ Event.simulateMouse('newtbe', 'click');
318
+ var nodes = $('newtbe-inplaceeditor').childNodes;
319
+ assertEqual(2, nodes.length, 'The form should have only two nodes (edit+cancel)');
320
+ assertEnumEqual(['input', 'a'], $A(nodes).pluck('tagName').invoke('toLowerCase'), 'Incorrect nodes');
321
+ ipe.dispose();
322
+ }},
323
+
324
+ testExternalControlOnly: function() {with(this) {
325
+ var ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', {
326
+ externalControl: 'newtbe_external'
327
+ });
328
+ Event.simulateMouse('newtbe', 'click');
329
+ assert(ipe._editing, 'Clicking on the element should turn editable.');
330
+ ipe.leaveEditMode();
331
+ Event.simulateMouse('newtbe_external', 'click');
332
+ assert(ipe._editing, 'Clicking on the external control should turn editable.');
333
+ ipe.dispose();
334
+ ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', {
335
+ externalControl: 'newtbe_external', externalControlOnly: true
336
+ });
337
+ Event.simulateMouse('newtbe', 'click');
338
+ assert(!ipe._editing, 'Clicking on the element should not turn editable.');
339
+ Event.simulateMouse('newtbe_external', 'click');
340
+ assert(ipe._editing, 'Clicking on the external control should turn editable.');
341
+ ipe.dispose();
342
+ }},
343
+
344
+ testNewCallbacks: function() {with(this) {
345
+ var called = [];
346
+ var opts = {
347
+ onEnterHover: function() { called.push('onEnterHover') },
348
+ onEnterEditMode: function() { called.push('onEnterEditMode') },
349
+ onLeaveEditMode: function() { called.push('onLeaveEditMode') },
350
+ callback: function(form) {
351
+ called.push('callback');
352
+ return form.serialize();
353
+ },
354
+ onFailure: function() { called.push('onFailure') },
355
+ onComplete: function() { called.push('onComplete') },
356
+ onLeaveEditMode: function() { called.push('onLeaveEditMode') }
357
+ }
358
+ // Proper success
359
+ $('newtbe').update('New to be edited');
360
+ var ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', opts);
361
+ Event.simulateMouse('newtbe', 'mouseover');
362
+ Event.simulateMouse('newtbe', 'click');
363
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
364
+ var postUpdateHTML;
365
+ wait(1000, function() {
366
+ assertEnumEqual(['onEnterHover', 'onEnterEditMode', 'callback', 'onLeaveEditMode', 'onComplete'],
367
+ called.uniq(), 'Incorrect callback sequence');
368
+ postUpdateHTML = $('newtbe').innerHTML.strip();
369
+ assertEqual('New to be edited - edited', postUpdateHTML, 'Update trouble');
370
+ ipe.dispose();
371
+ // Failure
372
+ called.clear();
373
+ // Any ideas? Requesting file:// URLs on non-existent stuff doesn't trigger A.U's onFailure...
374
+ });
375
+ }},
376
+
377
+ testCallbackFunctionReturnTypes: function() { with(this) {
378
+ var params = [];
379
+ var responder = {
380
+ onCreate: function(req) {
381
+ params.push(req.options.parameters);
382
+ }
383
+ };
384
+ Ajax.Responders.register(responder);
385
+ var ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', {
386
+ callback: function(form) {
387
+ return 'foo=bar';
388
+ }
389
+ });
390
+ Event.simulateMouse('newtbe', 'click');
391
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
392
+ wait(200, function() {
393
+ assert(params[0] && params[0].foo == 'bar');
394
+ ipe.dispose();
395
+ ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', {
396
+ callback: function(form) {
397
+ return { bar: '?', 'r&d': 42 };
398
+ }
399
+ });
400
+ Event.simulateMouse('newtbe', 'click');
401
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
402
+ wait(200, function() {
403
+ assert(params[1] && params[1].bar == '?' && params[1]['r&d'] == 42);
404
+ ipe.dispose();
405
+ Ajax.Responders.unregister(responder);
406
+ })
407
+ });
408
+ }},
409
+
410
+ testHtmlResponse: function() {with(this) {
411
+ // Default (true) -> A.U w/ evalScripts: true
412
+ $('newtbe').update('New to be edited');
413
+ var ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html');
414
+ Event.simulateMouse('newtbe', 'mouseover');
415
+ Event.simulateMouse('newtbe', 'click');
416
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
417
+ var postUpdateHTML;
418
+ wait(1000, function() {
419
+ postUpdateHTML = $('newtbe').innerHTML.strip();
420
+ assertEqual('New to be edited - edited', postUpdateHTML, 'Should have updated contents');
421
+ ipe.dispose();
422
+ // Explicit htmlResponse: true -> A.U w/ evalScripts: true
423
+ $('newtbe').update('New to be edited');
424
+ ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', { htmlResponse: true });
425
+ Event.simulateMouse('newtbe', 'mouseover');
426
+ Event.simulateMouse('newtbe', 'click');
427
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
428
+ wait(1000, function() {
429
+ postUpdateHTML = $('newtbe').innerHTML.strip();
430
+ assertEqual('New to be edited - edited', postUpdateHTML, 'Should have updated contents');
431
+ ipe.dispose();
432
+ // Explicit htmlResponse: false -> A.R
433
+ $('newtbe').update('New to be edited');
434
+ ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', { htmlResponse: false });
435
+ Event.simulateMouse('newtbe', 'mouseover');
436
+ Event.simulateMouse('newtbe', 'click');
437
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
438
+ wait(1000, function() {
439
+ postUpdateHTML = $('newtbe').innerHTML.strip();
440
+ assertEqual(ipe.options.savingText, postUpdateHTML, 'Should not have updated contents');
441
+ ipe.dispose();
442
+ });
443
+ });
444
+ });
445
+ }},
446
+
447
+ testSingleOrMultipleRows: function() {with(this) {
448
+ // Single-line value, rows <= 1 -> 1
449
+ $('newtbe').update('New to be edited');
450
+ var ipe = new Ajax.InPlaceEditor('newtbe',
451
+ '_ajax_inplaceeditor_result2.html');
452
+ Event.simulateMouse('newtbe', 'mouseover');
453
+ Event.simulateMouse('newtbe', 'click');
454
+ assertEqual('input', ipe._controls.editor.tagName.toLowerCase());
455
+ ipe.dispose();
456
+ // Single-line value, rows > 1 (2) -> 2
457
+ var ipe = new Ajax.InPlaceEditor('newtbe',
458
+ '_ajax_inplaceeditor_result2.html', { rows: 2 });
459
+ Event.simulateMouse('newtbe', 'mouseover');
460
+ Event.simulateMouse('newtbe', 'click');
461
+ assertEqual('textarea', ipe._controls.editor.tagName.toLowerCase());
462
+ assertEqual(2, ipe._controls.editor.rows);
463
+ ipe.dispose();
464
+ // Multiple-line value, rows <= 1, autoRows default (3) -> 3
465
+ $('newtbe').update('Line 1\nLine 2\nLine 3');
466
+ var ipe = new Ajax.InPlaceEditor('newtbe',
467
+ '_ajax_inplaceeditor_result2.html');
468
+ Event.simulateMouse('newtbe', 'mouseover');
469
+ Event.simulateMouse('newtbe', 'click');
470
+ assertEqual('textarea', ipe._controls.editor.tagName.toLowerCase());
471
+ assertEqual(Ajax.InPlaceEditor.DefaultOptions.autoRows, ipe._controls.editor.rows);
472
+ ipe.dispose();
473
+ // Multiple-line value, rows <= 1, autoRows custom (5) -> 5
474
+ var ipe = new Ajax.InPlaceEditor('newtbe',
475
+ '_ajax_inplaceeditor_result2.html', { autoRows: 5 });
476
+ Event.simulateMouse('newtbe', 'mouseover');
477
+ Event.simulateMouse('newtbe', 'click');
478
+ assertEqual('textarea', ipe._controls.editor.tagName.toLowerCase());
479
+ assertEqual(5, ipe._controls.editor.rows);
480
+ ipe.dispose();
481
+ // Multiple-line value, rows > 1 (2), autoRows default (3) -> 2
482
+ var ipe = new Ajax.InPlaceEditor('newtbe',
483
+ '_ajax_inplaceeditor_result2.html', { rows: 2 });
484
+ Event.simulateMouse('newtbe', 'mouseover');
485
+ Event.simulateMouse('newtbe', 'click');
486
+ assertEqual('textarea', ipe._controls.editor.tagName.toLowerCase());
487
+ assertEqual(2, ipe._controls.editor.rows);
488
+ ipe.dispose();
489
+ // Multiple-line value, rows > 1 (2), autoRows custom (5) -> 2
490
+ var ipe = new Ajax.InPlaceEditor('newtbe',
491
+ '_ajax_inplaceeditor_result2.html', { rows: 2, autoRows: 5 });
492
+ Event.simulateMouse('newtbe', 'mouseover');
493
+ Event.simulateMouse('newtbe', 'click');
494
+ assertEqual('textarea', ipe._controls.editor.tagName.toLowerCase());
495
+ assertEqual(2, ipe._controls.editor.rows);
496
+ ipe.dispose();
497
+ }},
498
+
499
+ testFormCustomizationCallback: function() {with(this) {
500
+ var ipe = new Ajax.InPlaceEditor('newtbe', '_ajax_inplaceeditor_result2.html', {
501
+ onFormCustomization: function(ipe, form) {
502
+ form.appendChild(new Element('input', { type: 'text', name: 'test', value: 'foobar' }));
503
+ }
504
+ });
505
+ Event.simulateMouse('newtbe', 'mouseover');
506
+ Event.simulateMouse('newtbe', 'click');
507
+ assertEqual('foobar', Form.serialize(ipe._form, true).test, 'Custom field not present');
508
+ ipe.dispose();
509
+ }},
510
+
511
+ testPostCreationBehavior: function() {with(this) {
512
+ var focused = false, activated = false;
513
+ function override(name, fx) {
514
+ arguments.callee.backups[name] = Field.Methods[name];
515
+ Field.Methods[name] = fx;
516
+ };
517
+ override.backups = {};
518
+ function restore() {
519
+ $A(arguments).each(function(n) {
520
+ Field.Methods[name] = override.backups[name];
521
+ });
522
+ Element.addMethods();
523
+ };
524
+ override('activate', function(elt) {
525
+ override.backups['activate'](elt);
526
+ activated = true;
527
+ });
528
+ override('focus', function(elt) { focused = true; });
529
+ Element.addMethods();
530
+ // fieldPostCreation default (activate)
531
+ var ipe = new Ajax.InPlaceEditor('newtbe',
532
+ '_ajax_inplaceeditor_result2.html');
533
+ Event.simulateMouse('newtbe', 'mouseover');
534
+ Event.simulateMouse('newtbe', 'click');
535
+ assert(focused && activated, "Should be focused and activated (resp. " + focused + " and " + activated + ')');
536
+ ipe.dispose();
537
+ // fieldPostCreation == 'focus'
538
+ focused = activated = false;
539
+ ipe = new Ajax.InPlaceEditor('newtbe',
540
+ '_ajax_inplaceeditor_result2.html', { fieldPostCreation: 'focus' });
541
+ Event.simulateMouse('newtbe', 'mouseover');
542
+ Event.simulateMouse('newtbe', 'click');
543
+ assert(focused && !activated, "Should be focused, not activated (resp. " + focused + " and " + activated + ')');
544
+ ipe.dispose();
545
+ // fieldPostCreation == false
546
+ focused = activated = false;
547
+ ipe = new Ajax.InPlaceEditor('newtbe',
548
+ '_ajax_inplaceeditor_result2.html', { fieldPostCreation: false });
549
+ Event.simulateMouse('newtbe', 'mouseover');
550
+ Event.simulateMouse('newtbe', 'click');
551
+ assert(!focused && !activated, "Should be neither focused nor activated (resp. " + focused + " and " + activated + ')');
552
+ ipe.dispose();
553
+ // fieldPostCreation == non-false yet neither activate nor focus -> default
554
+ focused = activated = false;
555
+ ipe = new Ajax.InPlaceEditor('newtbe',
556
+ '_ajax_inplaceeditor_result2.html', { fieldPostCreation: 'foobar' });
557
+ Event.simulateMouse('newtbe', 'mouseover');
558
+ Event.simulateMouse('newtbe', 'click');
559
+ assert(focused && activated, "Should be focused and activated (resp. " + focused + " and " + activated + ')');
560
+ ipe.dispose();
561
+ restore('activate', 'focus');
562
+ }},
563
+
564
+ testResponseTagStripping: function() {with(this) {
565
+ // stripLoadedTextTags default (false)
566
+ var ipe = new Ajax.InPlaceEditor('newtbe',
567
+ '_ajax_inplaceeditor_result2.html',
568
+ { loadTextURL: '_ajax_inplaceeditor_tagged.html' });
569
+ Event.simulateMouse('newtbe', 'mouseover');
570
+ Event.simulateMouse('newtbe', 'click');
571
+ wait(1000, function() {
572
+ assertEqual('<span>New to be edited - edited</span>', ipe._controls.editor.value.strip());
573
+ ipe.dispose();
574
+ // stripLoadedTextTags == true
575
+ ipe = new Ajax.InPlaceEditor('newtbe',
576
+ '_ajax_inplaceeditor_result2.html',
577
+ { loadTextURL: '_ajax_inplaceeditor_tagged.html',
578
+ stripLoadedTextTags: true });
579
+ Event.simulateMouse('newtbe', 'mouseover');
580
+ Event.simulateMouse('newtbe', 'click');
581
+ wait(1000, function() {
582
+ assertEqual('New to be edited - edited', ipe._controls.editor.value.strip());
583
+ ipe.dispose();
584
+ });
585
+ });
586
+ }},
587
+
588
+ testSubmitOnBlur: function() {with(this) {
589
+ // submitOnBlur default (false)
590
+ $('newtbe').update('To be edited');
591
+ var ipe = new Ajax.InPlaceEditor('newtbe',
592
+ '_ajax_inplaceeditor_result2.html');
593
+ Event.simulateMouse('newtbe', 'mouseover');
594
+ Event.simulateMouse('newtbe', 'click');
595
+ ipe._controls.editor.blur();
596
+ wait(1000, function() {
597
+ assertEqual('To be edited', ipe._controls.editor ? ipe._controls.editor.value : '');
598
+ ipe.dispose();
599
+ // submitOnBlur == true
600
+ ipe = new Ajax.InPlaceEditor('newtbe',
601
+ '_ajax_inplaceeditor_result2.html', { submitOnBlur: true });
602
+ Event.simulateMouse('newtbe', 'mouseover');
603
+ Event.simulateMouse('newtbe', 'click');
604
+ ipe._controls.editor.blur();
605
+ wait(1200, function() {
606
+ assertEqual('New to be edited - edited', $('newtbe').innerHTML.strip());
607
+ ipe.dispose();
608
+ });
609
+ });
610
+ }},
611
+
612
+ testEscReturnKeys: function() {with(this) {
613
+ // No controls, Esc
614
+ var ipe = new Ajax.InPlaceEditor('newtbe',
615
+ '_ajax_inplaceeditor_result2.html', { okControl: false, cancelControl: false});
616
+ Event.simulateMouse('newtbe', 'mouseover');
617
+ Event.simulateMouse('newtbe', 'click');
618
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_ESC });
619
+ assert(!ipe._editing, 'Esc should have disabled IPE');
620
+ ipe.dispose();
621
+ // Cancel control, Esc
622
+ var ipe = new Ajax.InPlaceEditor('newtbe',
623
+ '_ajax_inplaceeditor_result2.html', { okControl: false });
624
+ Event.simulateMouse('newtbe', 'mouseover');
625
+ Event.simulateMouse('newtbe', 'click');
626
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_ESC });
627
+ assert(!ipe._editing, 'Esc should have disabled IPE');
628
+ ipe.dispose();
629
+ // OK control, Esc
630
+ var ipe = new Ajax.InPlaceEditor('newtbe',
631
+ '_ajax_inplaceeditor_result2.html', { cancelControl: false });
632
+ Event.simulateMouse('newtbe', 'mouseover');
633
+ Event.simulateMouse('newtbe', 'click');
634
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_ESC });
635
+ assert(!ipe._editing, 'Esc should have disabled IPE');
636
+ ipe.dispose();
637
+ // Both controls, Esc
638
+ ipe = new Ajax.InPlaceEditor('newtbe',
639
+ '_ajax_inplaceeditor_result2.html');
640
+ Event.simulateMouse('newtbe', 'mouseover');
641
+ Event.simulateMouse('newtbe', 'click');
642
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_ESC });
643
+ assert(!ipe._editing, 'Esc should have disabled IPE');
644
+ ipe.dispose();
645
+ // No controls, Return
646
+ $('newtbe').update('New to be edited');
647
+ ipe = new Ajax.InPlaceEditor('newtbe',
648
+ '_ajax_inplaceeditor_result2.html', { okControl: false, cancelControl: false });
649
+ Event.simulateMouse('newtbe', 'mouseover');
650
+ Event.simulateMouse('newtbe', 'click');
651
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
652
+ wait(1000, function() {
653
+ assertEqual('New to be edited - edited', $('newtbe').innerHTML.strip());
654
+ ipe.dispose();
655
+ // Cancel control, Return
656
+ $('newtbe').update('New to be edited');
657
+ ipe = new Ajax.InPlaceEditor('newtbe',
658
+ '_ajax_inplaceeditor_result2.html', { okControl: false });
659
+ Event.simulateMouse('newtbe', 'mouseover');
660
+ Event.simulateMouse('newtbe', 'click');
661
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
662
+ wait(1000, function() {
663
+ assertEqual('New to be edited - edited', $('newtbe').innerHTML.strip());
664
+ ipe.dispose();
665
+ // OK control, Return
666
+ $('newtbe').update('New to be edited');
667
+ ipe = new Ajax.InPlaceEditor('newtbe',
668
+ '_ajax_inplaceeditor_result2.html', { cancelControl: false });
669
+ Event.simulateMouse('newtbe', 'mouseover');
670
+ Event.simulateMouse('newtbe', 'click');
671
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
672
+ wait(1000, function() {
673
+ assertEqual('New to be edited - edited', $('newtbe').innerHTML.strip());
674
+ ipe.dispose();
675
+ // Both controls, Return
676
+ $('newtbe').update('New to be edited');
677
+ ipe = new Ajax.InPlaceEditor('newtbe',
678
+ '_ajax_inplaceeditor_result2.html');
679
+ Event.simulateMouse('newtbe', 'mouseover');
680
+ Event.simulateMouse('newtbe', 'click');
681
+ Event.simulateKey('newtbe', 'keydown', { keyCode: Event.KEY_RETURN });
682
+ wait(1000, function() {
683
+ assertEqual('New to be edited - edited', $('newtbe').innerHTML.strip());
684
+ ipe.dispose();
685
+ });
686
+ });
687
+ });
688
+ });
689
+ }},
690
+
691
+ testIPCEBasic: function() {with(this) {
692
+ // Basic creation, population and choice.
693
+ $('newtbe').update('ntbe');
694
+ var fieldValue = '';
695
+ var ipe = new Ajax.InPlaceCollectionEditor('newtbe',
696
+ '_ajax_inplaceeditor_result2.html', { paramName: 'test',
697
+ collection: IPCE_COLLECTION, callback: function(f, value) {
698
+ fieldValue = value;
699
+ }, onComplete: Prototype.emptyFunction
700
+ });
701
+ Event.simulateMouse('newtbe', 'mouseover');
702
+ Event.simulateMouse('newtbe', 'click');
703
+ var editor = ipe._controls.editor;
704
+ assertEqual('test', editor.name);
705
+ assertEqual('select', editor.tagName.toLowerCase());
706
+ assertEqual(IPCE_COLLECTION.length, editor.options.length, 'Incorrect amount of options');
707
+ for (var index = 0; index < IPCE_COLLECTION.length; ++index) {
708
+ var ref = IPCE_COLLECTION[index];
709
+ var item = editor.options[index];
710
+ assertEqual(ref[0], item.value, 'Incorrect OPTION value');
711
+ assertEqual(ref[1], item.text.strip(), 'Incorrect OPTION text');
712
+ };
713
+ assertEqual(1, editor.selectedIndex, 'Did not properly select item');
714
+ editor.selectedIndex = 2;
715
+ Event.simulateMouse(ipe._controls.ok, 'click');
716
+ assertEqual('ntbe2', fieldValue);
717
+ ipe.dispose();
718
+ // Test the value option
719
+ $('newtbe').update('ntbe');
720
+ ipe = new Ajax.InPlaceCollectionEditor('newtbe',
721
+ '_ajax_inplaceeditor_result2.html', { paramName: 'test',
722
+ collection: IPCE_COLLECTION, onComplete: Prototype.emptyFunction,
723
+ value: 'ntbe2'
724
+ });
725
+ Event.simulateMouse('newtbe', 'mouseover');
726
+ Event.simulateMouse('newtbe', 'click');
727
+ editor = ipe._controls.editor;
728
+ assertEqual(2, editor.selectedIndex, 'Did not properly select item');
729
+ ipe.dispose();
730
+ }},
731
+
732
+ testIPCECollectionSyntaxes: function() {with(this) {
733
+ // Array of two-item arrays (0 = value, 1 = text)
734
+ $('newtbe').update('ntbe');
735
+ var ipe = new Ajax.InPlaceCollectionEditor('newtbe',
736
+ '_ajax_inplaceeditor_result2.html', { paramName: 'test',
737
+ collection: IPCE_COLLECTION, onComplete: Prototype.emptyFunction
738
+ });
739
+ Event.simulateMouse('newtbe', 'mouseover');
740
+ Event.simulateMouse('newtbe', 'click');
741
+ var editor = ipe._controls.editor;
742
+ assertEqual(1, editor.selectedIndex, 'Did not properly select item');
743
+ // (further contents testing already done in Basic)
744
+ ipe.dispose();
745
+ // Array of one-item arrays
746
+ ipe = new Ajax.InPlaceCollectionEditor('newtbe',
747
+ '_ajax_inplaceeditor_result2.html', { paramName: 'test',
748
+ collection: [['tbe'], ['ntbe'], ['ntbe2'], ['ntbe3']],
749
+ onComplete: Prototype.emptyFunction
750
+ });
751
+ Event.simulateMouse('newtbe', 'mouseover');
752
+ Event.simulateMouse('newtbe', 'click');
753
+ var editor = ipe._controls.editor;
754
+ assertEqual(1, editor.selectedIndex, 'Did not properly select item');
755
+ assertEqual('ntbe', $F(editor).strip(), 'Did not properly define text');
756
+ ipe.dispose();
757
+ // Array of items
758
+ ipe = new Ajax.InPlaceCollectionEditor('newtbe',
759
+ '_ajax_inplaceeditor_result2.html', { paramName: 'test',
760
+ collection: ['tbe', 'ntbe', 'ntbe2', 'ntbe3'],
761
+ onComplete: Prototype.emptyFunction
762
+ });
763
+ Event.simulateMouse('newtbe', 'mouseover');
764
+ Event.simulateMouse('newtbe', 'click');
765
+ var editor = ipe._controls.editor;
766
+ assertEqual(1, editor.selectedIndex, 'Did not properly select item');
767
+ assertEqual('ntbe', $F(editor).strip(), 'Did not properly define text');
768
+ ipe.dispose();
769
+ }},
770
+
771
+ testIPCEAlternateTextOptions: function() {with(this) {
772
+ // loadTextURL (check loading text, verify alternate text eventually)
773
+ $('newtbe').update('New to be edited');
774
+ var ipe = new Ajax.InPlaceCollectionEditor('newtbe',
775
+ '_ajax_inplaceeditor_result2.html', { paramName: 'test',
776
+ collection: IPCE_COLLECTION, loadTextURL: '_ajax_inplaceeditor_ipce_alt_text.html',
777
+ onComplete: Prototype.emptyFunction
778
+ });
779
+ Event.simulateMouse('newtbe', 'mouseover');
780
+ Event.simulateMouse('newtbe', 'click');
781
+ var editor = ipe._controls.editor;
782
+ var text = editor.options[editor.selectedIndex].text.strip();
783
+ assertEqual(Ajax.InPlaceEditor.DefaultOptions.loadingText, text);
784
+ wait(1200, function() {
785
+ assertEqual(1, editor.selectedIndex, 'Did not properly select item based on alternate text.');
786
+ ipe.dispose();
787
+ });
788
+ }},
789
+
790
+ testIPCEDynamicCollectionOptions: function() {with(this) {
791
+ // loadCollectionURL, default loadingCollectionText
792
+ $('newtbe').update('ntbe');
793
+ var ipe = new Ajax.InPlaceCollectionEditor('newtbe',
794
+ '_ajax_inplaceeditor_result2.html', { paramName: 'test',
795
+ loadCollectionURL: '_ajax_inplaceeditor_ipce_collection.js',
796
+ onComplete: Prototype.emptyFunction
797
+ });
798
+ Event.simulateMouse('newtbe', 'mouseover');
799
+ Event.simulateMouse('newtbe', 'click');
800
+ var editor = ipe._controls.editor;
801
+ var text = editor.options[editor.selectedIndex].text.strip();
802
+ assertEqual(Ajax.InPlaceCollectionEditor.DefaultOptions.loadingCollectionText, text);
803
+ wait(1000, function() {
804
+ assertEqual(5, ipe._collection.length);
805
+ assertEqual(2, editor.selectedIndex, 'Did not properly select item');
806
+ ipe.dispose();
807
+ // loadCollectionURL, custom loadingCollectionText
808
+ $('newtbe').update('bar');
809
+ ipe = new Ajax.InPlaceCollectionEditor('newtbe',
810
+ '_ajax_inplaceeditor_result2.html', { paramName: 'test',
811
+ loadCollectionURL: '_ajax_inplaceeditor_ipce_collection.js',
812
+ loadingCollectionText: 'There we go...',
813
+ onComplete: Prototype.emptyFunction
814
+ });
815
+ Event.simulateMouse('newtbe', 'mouseover');
816
+ Event.simulateMouse('newtbe', 'click');
817
+ editor = ipe._controls.editor;
818
+ text = editor.options[editor.selectedIndex].text.strip();
819
+ assertEqual('There we go...', text);
820
+ wait(1000, function() {
821
+ assertEqual(1, editor.selectedIndex, 'Did not properly select item');
822
+ ipe.dispose();
823
+ });
824
+ });
825
+ }},
826
+
827
+ testIPCEATPlusDC: function() {with(this) {
828
+ // loadCollectionURL, loadTextURL
829
+ $('newtbe').update('Like I care');
830
+ var ipe = new Ajax.InPlaceCollectionEditor('newtbe',
831
+ '_ajax_inplaceeditor_result2.html', { paramName: 'test',
832
+ loadCollectionURL: '_ajax_inplaceeditor_ipce_collection.js',
833
+ loadingCollectionText: 'There we go...',
834
+ loadTextURL: '_ajax_inplaceeditor_ipce_alt_text.html',
835
+ loadingText: 'OK, so, the text...',
836
+ onComplete: Prototype.emptyFunction
837
+ });
838
+ ipe._regularCFET = ipe.checkForExternalText;
839
+ ipe.checkForExternalText = function() {
840
+ assert(5, ipe._collection.length);
841
+ ipe._regularCFET();
842
+ var editor = ipe._controls.editor;
843
+ var text = editor.options[editor.selectedIndex].text.strip();
844
+ assertEqual('OK, so, the text...', text);
845
+ };
846
+ Event.simulateMouse('newtbe', 'mouseover');
847
+ Event.simulateMouse('newtbe', 'click');
848
+ var editor = ipe._controls.editor;
849
+ var text = editor.options[editor.selectedIndex].text.strip();
850
+ assertEqual('There we go...', text);
851
+ wait(2000, function() {
852
+ assertEqual(2, editor.selectedIndex, 'Did not properly select item');
853
+ ipe.dispose();
854
+ });
855
+ }},
856
+
857
+ testDeprecationLayer: function() {with(this) {
858
+ // FIXME: needs to be coded yet, doesn't it?
859
+ var ipe = new Ajax.InPlaceCollectionEditor('newtbe',
860
+ '_ajax_inplaceeditor_result2.html', { paramName: 'test',
861
+ okButton: false, cancelLink: false
862
+ });
863
+ assertIdentical(false, ipe.options.okControl, 'OK control should be disabled');
864
+ assertIdentical(false, ipe.options.cancelControl, 'Cancel control should be disabled');
865
+ ipe.dispose();
866
+ ipe = new Ajax.InPlaceCollectionEditor('newtbe',
867
+ '_ajax_inplaceeditor_result2.html', { paramName: 'test',
868
+ okLink: true, cancelButton: true
869
+ });
870
+ assertEqual('link', ipe.options.okControl, 'OK control should be a link');
871
+ assertEqual('button', ipe.options.cancelControl, 'Cancel control should be a button');
872
+ ipe.dispose();
873
+ ipe = new Ajax.InPlaceCollectionEditor('newtbe',
874
+ '_ajax_inplaceeditor_result2.html', { paramName: 'test',
875
+ highlightcolor: '#ff0000', highlightendcolor: '#00ff00'
876
+ });
877
+ assertEqual('#ff0000', ipe.options.highlightColor, 'Highlight color was not migrated');
878
+ assertEqual('#00ff00', ipe.options.highlightEndColor, 'Highlight end color was not migrated');
879
+ ipe.dispose();
880
+ }},
881
+
882
+
883
+ testShouldShowAmpersandsProperly: function() {with(this) {
884
+ var ipe = new Ajax.InPlaceEditor('contains_ampersand', '', {});
885
+ Event.simulateMouse('contains_ampersand', 'click');
886
+ assertEqual("Me & Myself", $$('form#contains_ampersand-inplaceeditor input.editor_field')[0].value);
887
+ ipe.dispose();
888
+ }}
889
+ // FIXME: add AC w/o key conflicts?
890
+ // FIXME: doc w/ full details on what's new, what's changed, etc. + deprecation layer info.
891
+ });
892
+ // ]]>
893
+ </script>
894
+ </body>
895
+ </html>