headless-squirrel 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +55 -0
- data/Rakefile +27 -0
- data/bin/jstest +10 -0
- data/lib/headless_squirrel.rb +2 -0
- data/lib/headless_squirrel/console.rb +24 -0
- data/lib/headless_squirrel/runner.rb +70 -0
- data/lib/headless_squirrel/test.rb +17 -0
- data/lib/headless_squirrel/test_case.rb +158 -0
- data/test/fixtures/a_unit_test.html +27 -0
- data/test/fixtures/a_unit_test.js +22 -0
- data/test/fixtures/syntax_error.html +27 -0
- data/test/fixtures/syntax_error.js +5 -0
- data/test/fixtures/type_error.html +27 -0
- data/test/fixtures/type_error.js +1 -0
- data/test/regression/prototype/unit/ajax_test.html +29 -0
- data/test/regression/prototype/unit/array_test.html +28 -0
- data/test/regression/prototype/unit/assets/prototype.js +4900 -0
- data/test/regression/prototype/unit/assets/unittest.css +50 -0
- data/test/regression/prototype/unit/assets/unittest.js +615 -0
- data/test/regression/prototype/unit/assets/unittest_transport.js +1 -0
- data/test/regression/prototype/unit/base_test.html +27 -0
- data/test/regression/prototype/unit/class_test.html +27 -0
- data/test/regression/prototype/unit/date_test.html +27 -0
- data/test/regression/prototype/unit/dom_test.html +304 -0
- data/test/regression/prototype/unit/element_mixins_test.html +30 -0
- data/test/regression/prototype/unit/enumerable_test.html +35 -0
- data/test/regression/prototype/unit/event_test.html +31 -0
- data/test/regression/prototype/unit/fixtures/ajax.html +2 -0
- data/test/regression/prototype/unit/fixtures/ajax.js +42 -0
- data/test/regression/prototype/unit/fixtures/array.html +1 -0
- data/test/regression/prototype/unit/fixtures/class.js +83 -0
- data/test/regression/prototype/unit/fixtures/content.html +1 -0
- data/test/regression/prototype/unit/fixtures/data.json +1 -0
- data/test/regression/prototype/unit/fixtures/dom.css +84 -0
- data/test/regression/prototype/unit/fixtures/dom.html +278 -0
- data/test/regression/prototype/unit/fixtures/dom.js +17 -0
- data/test/regression/prototype/unit/fixtures/element_mixins.html +4 -0
- data/test/regression/prototype/unit/fixtures/element_mixins.js +2 -0
- data/test/regression/prototype/unit/fixtures/empty.html +0 -0
- data/test/regression/prototype/unit/fixtures/empty.js +1 -0
- data/test/regression/prototype/unit/fixtures/enumerable.html +8 -0
- data/test/regression/prototype/unit/fixtures/enumerable.js +23 -0
- data/test/regression/prototype/unit/fixtures/event.html +4 -0
- data/test/regression/prototype/unit/fixtures/form.html +108 -0
- data/test/regression/prototype/unit/fixtures/function.js +13 -0
- data/test/regression/prototype/unit/fixtures/hash.js +25 -0
- data/test/regression/prototype/unit/fixtures/hello.js +1 -0
- data/test/regression/prototype/unit/fixtures/logo.gif +0 -0
- data/test/regression/prototype/unit/fixtures/object.html +6 -0
- data/test/regression/prototype/unit/fixtures/object.js +7 -0
- data/test/regression/prototype/unit/fixtures/position.html +9 -0
- data/test/regression/prototype/unit/fixtures/selector.html +71 -0
- data/test/regression/prototype/unit/fixtures/string.js +8 -0
- data/test/regression/prototype/unit/fixtures/unittest.html +18 -0
- data/test/regression/prototype/unit/form_test.html +135 -0
- data/test/regression/prototype/unit/function_test.html +27 -0
- data/test/regression/prototype/unit/hash_test.html +27 -0
- data/test/regression/prototype/unit/number_test.html +27 -0
- data/test/regression/prototype/unit/object_test.html +32 -0
- data/test/regression/prototype/unit/periodical_executer_test.html +27 -0
- data/test/regression/prototype/unit/position_test.html +36 -0
- data/test/regression/prototype/unit/prototype_test.html +27 -0
- data/test/regression/prototype/unit/range_test.html +27 -0
- data/test/regression/prototype/unit/regexp_test.html +27 -0
- data/test/regression/prototype/unit/selector_test.html +98 -0
- data/test/regression/prototype/unit/string_test.html +27 -0
- data/test/regression/prototype/unit/tests/ajax_test.js +379 -0
- data/test/regression/prototype/unit/tests/array_test.js +186 -0
- data/test/regression/prototype/unit/tests/base_test.js +43 -0
- data/test/regression/prototype/unit/tests/class_test.js +136 -0
- data/test/regression/prototype/unit/tests/date_test.js +5 -0
- data/test/regression/prototype/unit/tests/dom_test.js +1493 -0
- data/test/regression/prototype/unit/tests/element_mixins_test.js +32 -0
- data/test/regression/prototype/unit/tests/enumerable_test.js +271 -0
- data/test/regression/prototype/unit/tests/event_test.js +235 -0
- data/test/regression/prototype/unit/tests/form_test.js +382 -0
- data/test/regression/prototype/unit/tests/function_test.js +133 -0
- data/test/regression/prototype/unit/tests/hash_test.js +178 -0
- data/test/regression/prototype/unit/tests/number_test.js +44 -0
- data/test/regression/prototype/unit/tests/object_test.js +180 -0
- data/test/regression/prototype/unit/tests/periodical_executer_test.js +15 -0
- data/test/regression/prototype/unit/tests/position_test.js +44 -0
- data/test/regression/prototype/unit/tests/prototype_test.js +43 -0
- data/test/regression/prototype/unit/tests/range_test.js +58 -0
- data/test/regression/prototype/unit/tests/regexp_test.js +42 -0
- data/test/regression/prototype/unit/tests/selector_test.js +408 -0
- data/test/regression/prototype/unit/tests/string_test.js +548 -0
- data/test/regression/prototype/unit/tests/unittest_test.js +148 -0
- data/test/regression/prototype/unit/unittest_test.html +45 -0
- data/test/regression/prototype/upstream +1 -0
- data/test/regression/scriptaculous/unit/_ajax_inplaceeditor_ipce_alt_text.html +1 -0
- data/test/regression/scriptaculous/unit/_ajax_inplaceeditor_ipce_collection.js +1 -0
- data/test/regression/scriptaculous/unit/_ajax_inplaceeditor_result.html +1 -0
- data/test/regression/scriptaculous/unit/_ajax_inplaceeditor_result2.html +1 -0
- data/test/regression/scriptaculous/unit/_ajax_inplaceeditor_tagged.html +1 -0
- data/test/regression/scriptaculous/unit/_ajax_inplaceeditor_text.html +1 -0
- data/test/regression/scriptaculous/unit/_ajax_updater_result.html +20 -0
- data/test/regression/scriptaculous/unit/_autocomplete_result.html +11 -0
- data/test/regression/scriptaculous/unit/_autocomplete_result_nobr.html +1 -0
- data/test/regression/scriptaculous/unit/ajax_autocompleter_test.html +243 -0
- data/test/regression/scriptaculous/unit/ajax_inplaceeditor_test.html +895 -0
- data/test/regression/scriptaculous/unit/assets/builder.js +134 -0
- data/test/regression/scriptaculous/unit/assets/controls.js +963 -0
- data/test/regression/scriptaculous/unit/assets/dragdrop.js +973 -0
- data/test/regression/scriptaculous/unit/assets/effects.js +1122 -0
- data/test/regression/scriptaculous/unit/assets/javascripttest.rb +203 -0
- data/test/regression/scriptaculous/unit/assets/prototype.js +4320 -0
- data/test/regression/scriptaculous/unit/assets/scriptaculous.js +66 -0
- data/test/regression/scriptaculous/unit/assets/slider.js +273 -0
- data/test/regression/scriptaculous/unit/assets/sound.js +57 -0
- data/test/regression/scriptaculous/unit/assets/unittest.js +566 -0
- data/test/regression/scriptaculous/unit/bdd_test.html +150 -0
- data/test/regression/scriptaculous/unit/builder_test.html +262 -0
- data/test/regression/scriptaculous/unit/dragdrop_test.html +131 -0
- data/test/regression/scriptaculous/unit/effects_test.html +547 -0
- data/test/regression/scriptaculous/unit/element_test.html +116 -0
- data/test/regression/scriptaculous/unit/icon.png +0 -0
- data/test/regression/scriptaculous/unit/index.html +70 -0
- data/test/regression/scriptaculous/unit/loading_test.html +41 -0
- data/test/regression/scriptaculous/unit/position_clone_test.html +312 -0
- data/test/regression/scriptaculous/unit/slider_test.html +437 -0
- data/test/regression/scriptaculous/unit/sortable_test.html +205 -0
- data/test/regression/scriptaculous/unit/string_test.html +71 -0
- data/test/regression/scriptaculous/unit/unittest_test.html +154 -0
- data/test/regression/scriptaculous/upstream +1 -0
- data/test/test_helper.rb +20 -0
- data/test/unit/runner_test.rb +165 -0
- data/test/unit/test_case_test.rb +207 -0
- data/test/unit/test_test.rb +24 -0
- metadata +209 -0
@@ -0,0 +1,547 @@
|
|
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
|
+
#rotfl {
|
13
|
+
color: red;
|
14
|
+
font-family: serif;
|
15
|
+
font-style: italic;
|
16
|
+
font-size: 40px;
|
17
|
+
background: #fed;
|
18
|
+
padding: 1em;
|
19
|
+
width: 400px;
|
20
|
+
}
|
21
|
+
.final {
|
22
|
+
color: #fff;
|
23
|
+
font-style: italic;
|
24
|
+
background: #000;
|
25
|
+
opacity: 0.5;
|
26
|
+
}
|
27
|
+
body div.final {
|
28
|
+
font-size: 20px;
|
29
|
+
}
|
30
|
+
</style>
|
31
|
+
</head>
|
32
|
+
<body>
|
33
|
+
<h1>script.aculo.us Unit test file</h1>
|
34
|
+
<p>
|
35
|
+
Tests for effects.js
|
36
|
+
</p>
|
37
|
+
|
38
|
+
<!-- generated elements go in here -->
|
39
|
+
<div id="sandbox"></div>
|
40
|
+
|
41
|
+
<!-- Log output -->
|
42
|
+
<div id="testlog"> </div>
|
43
|
+
|
44
|
+
<div class="morphing blub" style="font-size:25px;color:#f00">Well</div>
|
45
|
+
<div class="morphing">You know</div>
|
46
|
+
<div id="blah" style="border:1px solid black;width:100px">Whoo-hoo!</div>
|
47
|
+
|
48
|
+
<div id="error_message">ERROR MESSAGE</div>
|
49
|
+
<div id="error_message_2">SECOND ERROR MESSAGE</div>
|
50
|
+
<div id="error_message_3" style="border:1px solid red; width:100px; color: #f00">THIRD ERROR MESSAGE</div>
|
51
|
+
|
52
|
+
<ul class="error-list" id="error_test_ul">
|
53
|
+
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit,</li>
|
54
|
+
<li>sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</li>
|
55
|
+
<li>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris</li>
|
56
|
+
<li>nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in</li>
|
57
|
+
<li>reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</li>
|
58
|
+
</ul>
|
59
|
+
|
60
|
+
<div id="rotfl">ROTFL</div>
|
61
|
+
|
62
|
+
<div id="tween">foo!</div>
|
63
|
+
|
64
|
+
<!-- Tests follow -->
|
65
|
+
<script type="text/javascript" language="javascript" charset="utf-8">
|
66
|
+
// <![CDATA[
|
67
|
+
|
68
|
+
var TAGS =
|
69
|
+
['div','span','ol','ul','table','p','h1','h2','h3','h4','h5','h6'];
|
70
|
+
|
71
|
+
var COMBINED_EFFECTS =
|
72
|
+
['Fade','Appear','BlindUp','BlindDown','Puff','SwitchOff','DropOut','Shake',
|
73
|
+
'SlideUp','SlideDown','Pulsate','Squish','Fold','Grow','Shrink'];
|
74
|
+
|
75
|
+
var COMBINED_RJS_EFFECTS = $w('fade appear blind_up blind_down puff switch_off '+
|
76
|
+
'drop_out shake slide_up slide_down pulsate squish fold grow shrink');
|
77
|
+
|
78
|
+
var tmp, tmp2;
|
79
|
+
|
80
|
+
new Test.Unit.Runner({
|
81
|
+
|
82
|
+
setup: function() { with (this) {
|
83
|
+
$('sandbox').innerHTML = "";
|
84
|
+
}},
|
85
|
+
|
86
|
+
teardown: function() { with(this) {
|
87
|
+
// remove all queued effects
|
88
|
+
Effect.Queue.each(function(e) { e.cancel() });
|
89
|
+
}},
|
90
|
+
|
91
|
+
testExceptionOnNonExistingElement: function() { with(this) {
|
92
|
+
assertRaise('ElementDoesNotExistError',
|
93
|
+
function(){new Effect.Opacity('nothing-to-see-here')});
|
94
|
+
assertRaise('ElementDoesNotExistError',
|
95
|
+
function(){new Effect.Move('nothing-to-see-here')});
|
96
|
+
assertRaise('ElementDoesNotExistError',
|
97
|
+
function(){new Effect.Scale('nothing-to-see-here')});
|
98
|
+
assertRaise('ElementDoesNotExistError',
|
99
|
+
function(){new Effect.Highlight('nothing-to-see-here')});
|
100
|
+
}},
|
101
|
+
|
102
|
+
testCallbacks: function() { with(this) {
|
103
|
+
tmp = tmp2 = 0;
|
104
|
+
var e1 = new Effect.Opacity('sandbox',{from:1.0,to:0.5,duration:0.5,
|
105
|
+
beforeStart: function() { tmp++ },
|
106
|
+
beforeStartInternal: function() { tmp++ },
|
107
|
+
beforeSetup: function() { tmp++ },
|
108
|
+
beforeSetupInternal: function() { tmp++ },
|
109
|
+
afterSetup: function() { tmp++ },
|
110
|
+
afterSetupInternal: function() { tmp++ },
|
111
|
+
beforeUpdate: function() { tmp2++ },
|
112
|
+
beforeUpdateInternal: function() { tmp2++ },
|
113
|
+
beforeFinish: function() { tmp++ },
|
114
|
+
beforeFinishInternal: function() { tmp++ },
|
115
|
+
afterFinish: function() { tmp++ },
|
116
|
+
afterFinishInternal: function() { tmp++ }
|
117
|
+
});
|
118
|
+
wait(1000, function() {
|
119
|
+
assertEqual(10, tmp);
|
120
|
+
assert(tmp2 > 0);
|
121
|
+
});
|
122
|
+
}},
|
123
|
+
|
124
|
+
testEvent: function() { with(this) {
|
125
|
+
tmp = 0;
|
126
|
+
new Effect.Event({ afterFinish:function(){ tmp++ }, position:'end'});
|
127
|
+
wait(100, function() {
|
128
|
+
assertEqual(1, tmp);
|
129
|
+
});
|
130
|
+
}},
|
131
|
+
|
132
|
+
testTransition: function() { with(this) {
|
133
|
+
// false implies linear
|
134
|
+
var e = new Effect.Opacity('sandbox',{transition:false,from:0.0,to:0.25,duration:0.5});
|
135
|
+
assert(e.options.transition == Effect.Transitions.linear);
|
136
|
+
|
137
|
+
wait(1000, function() {
|
138
|
+
assertEqual(0.25, $('sandbox').getStyle('opacity'));
|
139
|
+
// default to sinoidal
|
140
|
+
var e = new Effect.Opacity('sandbox',{from:0.0,to:0.25,duration:0.5});
|
141
|
+
assert(e.options.transition == Effect.Transitions.sinoidal);
|
142
|
+
wait(1000, function() {
|
143
|
+
assertEqual(0.25, $('sandbox').getStyle('opacity'));
|
144
|
+
|
145
|
+
var transitions = [
|
146
|
+
{ transition: Effect.Transitions.linear, expected: 1 },
|
147
|
+
{ transition: Effect.Transitions.sinoidal, expected: 1 },
|
148
|
+
{ transition: Effect.Transitions.reverse, expected: 0 },
|
149
|
+
{ transition: Effect.Transitions.flicker, expected: 1 },
|
150
|
+
{ transition: Effect.Transitions.wobble, expected: 1 },
|
151
|
+
{ transition: Effect.Transitions.pulse, expected: 1 },
|
152
|
+
{ transition: Effect.Transitions.none, expected: 0 }
|
153
|
+
];
|
154
|
+
|
155
|
+
transitions.each(function(t){
|
156
|
+
var e = new Effect.Opacity('sandbox',{sync:true, from:0, to: 1, transition:t.transition});
|
157
|
+
assert(e.options.transition == t.transition);
|
158
|
+
e.render(1.0);
|
159
|
+
assertEqual(t.expected, e.position, t.transition);
|
160
|
+
});
|
161
|
+
|
162
|
+
});
|
163
|
+
});
|
164
|
+
}},
|
165
|
+
|
166
|
+
testInspect: function() { with(this) {
|
167
|
+
var e1 = new Effect.Opacity('sandbox',{from:1.0,to:0.5,duration:0.5});
|
168
|
+
info( e1.inspect() );
|
169
|
+
assertEqual(0, e1.inspect().indexOf('#<Effect:'));
|
170
|
+
assert(e1.inspect().indexOf('idle')>0);
|
171
|
+
wait(1000, function() {
|
172
|
+
assert(e1.inspect().indexOf('finished')>0);
|
173
|
+
});
|
174
|
+
}},
|
175
|
+
|
176
|
+
testDefaultOptions: function() { with(this) {
|
177
|
+
var oldDefaultOptions = Object.extend({},Effect.DefaultOptions);
|
178
|
+
|
179
|
+
assertEqual(1.0, Effect.DefaultOptions.duration);
|
180
|
+
Effect.DefaultOptions.duration = 0.5;
|
181
|
+
var e1 = new Effect.Opacity('sandbox');
|
182
|
+
assertEqual(0.5, e1.options.duration);
|
183
|
+
|
184
|
+
wait(750, function() {
|
185
|
+
assertEqual('finished', e1.state);
|
186
|
+
Effect.DefaultOptions = oldDefaultOptions;
|
187
|
+
});
|
188
|
+
}},
|
189
|
+
|
190
|
+
testEffectsQueue: function() { with(this) {
|
191
|
+
var e1 = new Effect.Highlight('sandbox');
|
192
|
+
var e2 = new Effect.Appear('sandbox');
|
193
|
+
|
194
|
+
assertEqual(2, Effect.Queue.effects.length);
|
195
|
+
|
196
|
+
tmp = 0;
|
197
|
+
Effect.Queue.each(function(e) { tmp++ });
|
198
|
+
assertEqual(2, tmp);
|
199
|
+
|
200
|
+
// the internal interval timer should be active
|
201
|
+
assertNotNull(Effect.Queue.interval);
|
202
|
+
e1.cancel();
|
203
|
+
e2.cancel();
|
204
|
+
assertEqual(0, Effect.Queue.effects.length);
|
205
|
+
|
206
|
+
// should be inactive after all effects are removed from queue
|
207
|
+
assertNull(Effect.Queue.interval);
|
208
|
+
|
209
|
+
// should be in e3,e1,e2 order
|
210
|
+
var e1 = new Effect.Highlight('sandbox');
|
211
|
+
var e2 = new Effect.Appear('sandbox',{queue:'end'});
|
212
|
+
var e3 = new Effect.Fade('sandbox',{queue:'front'});
|
213
|
+
assert(e2.startOn > e1.startOn);
|
214
|
+
assert(e3.startOn < e1.startOn);
|
215
|
+
assert(e3.startOn < e2.startOn);
|
216
|
+
assertEqual(3, Effect.Queue.effects.length);
|
217
|
+
|
218
|
+
Effect.Queue.each(function(e) { e.cancel() });
|
219
|
+
assertEqual(0, Effect.Queue.effects.length);
|
220
|
+
}},
|
221
|
+
|
222
|
+
testScopedEffectsQueue: function() { with(this) {
|
223
|
+
var e1 = new Effect.Highlight('sandbox', {queue: {scope:'myscope'} } );
|
224
|
+
var e2 = new Effect.Appear('sandbox', {queue: {scope:'myscope'} } );
|
225
|
+
var e3 = new Effect.Highlight('sandbox', {queue: {scope:'secondscope'} } );
|
226
|
+
var e4 = new Effect.Appear('sandbox');
|
227
|
+
|
228
|
+
assertEqual(2, Effect.Queues.get('myscope').effects.length);
|
229
|
+
assertEqual(1, Effect.Queues.get('secondscope').effects.length);
|
230
|
+
assertEqual(1, Effect.Queues.get('global').effects.length);
|
231
|
+
assertEqual(Effect.Queue.effects.length, Effect.Queues.get('global').effects.length);
|
232
|
+
|
233
|
+
var tmp = 0;
|
234
|
+
Effect.Queues.get('myscope').effects.each(function(e) { tmp++ });
|
235
|
+
assertEqual(2, tmp);
|
236
|
+
|
237
|
+
// the internal interval timer should be active
|
238
|
+
assertNotNull(Effect.Queues.get('myscope').interval);
|
239
|
+
assertNotNull(Effect.Queues.get('secondscope').interval);
|
240
|
+
assertNotNull(Effect.Queues.get('global').interval);
|
241
|
+
|
242
|
+
e1.cancel(); e2.cancel(); e3.cancel(); e4.cancel();
|
243
|
+
|
244
|
+
assertEqual(0, Effect.Queues.get('myscope').effects.length);
|
245
|
+
assertEqual(0, Effect.Queues.get('secondscope').effects.length);
|
246
|
+
assertEqual(0, Effect.Queues.get('global').effects.length);
|
247
|
+
|
248
|
+
// should be inactive after all effects are removed from queues
|
249
|
+
assertNull(Effect.Queues.get('myscope').interval);
|
250
|
+
assertNull(Effect.Queues.get('secondscope').interval);
|
251
|
+
assertNull(Effect.Queues.get('global').interval);
|
252
|
+
|
253
|
+
// should be in e3 and e4 together and then e1,e2 order
|
254
|
+
var e1 = new Effect.Highlight('sandbox', {queue: {scope:'myscope'} } );
|
255
|
+
var e2 = new Effect.Appear('sandbox', {queue: {position: 'end', scope:'myscope'} } );
|
256
|
+
var e3 = new Effect.Fade('sandbox', {queue: {position: 'front', scope:'myscope'} } );
|
257
|
+
var e4 = new Effect.Appear('sandbox');
|
258
|
+
assert(e2.startOn > e1.startOn);
|
259
|
+
assert(e3.startOn < e1.startOn);
|
260
|
+
assert(e3.startOn < e2.startOn);
|
261
|
+
assert(e3.startOn = e4.startOn);
|
262
|
+
assertEqual(3, Effect.Queues.get('myscope').effects.length);
|
263
|
+
|
264
|
+
Effect.Queues.get('myscope').each(function(e) { e.cancel() });
|
265
|
+
assertEqual(0, Effect.Queues.get('myscope').effects.length);
|
266
|
+
|
267
|
+
Effect.Queues.get('global').each(function(e) { e.cancel() });
|
268
|
+
assertEqual(0, Effect.Queues.get('global').effects.length);
|
269
|
+
|
270
|
+
// should only allow the first two effects and ignore the third
|
271
|
+
var e1 = new Effect.Highlight('sandbox', {queue: {scope:'myscope', limit: 2} } );
|
272
|
+
var e2 = new Effect.Appear('sandbox', {queue: {position: 'end', scope:'myscope', limit: 2} } );
|
273
|
+
var e3 = new Effect.Fade('sandbox', {queue: {position: 'front', scope:'myscope', limit: 2} } );
|
274
|
+
|
275
|
+
assertEqual(2, Effect.Queues.get('myscope').effects.length);
|
276
|
+
}},
|
277
|
+
|
278
|
+
testEffectMultiple: function() { with(this) {
|
279
|
+
$('sandbox').appendChild(Builder.node('div',{id:'test_1'}));
|
280
|
+
$('sandbox').appendChild(Builder.node('div',{id:'test_2'},[Builder.node('div',{id:'test_2a'})]));
|
281
|
+
$('sandbox').appendChild(Builder.node('div',{id:'test_3'}));
|
282
|
+
|
283
|
+
// only direct child elements
|
284
|
+
Effect.multiple('sandbox',Effect.Fade);
|
285
|
+
assertEqual(3, Effect.Queue.effects.length);
|
286
|
+
|
287
|
+
Effect.Queue.each(function(e) { e.cancel() });
|
288
|
+
assertEqual(0, Effect.Queue.effects.length);
|
289
|
+
|
290
|
+
// call with array
|
291
|
+
Effect.multiple(['test_1','test_3'],Effect.Puff);
|
292
|
+
assertEqual(2, Effect.Queue.effects.length);
|
293
|
+
}},
|
294
|
+
|
295
|
+
testEffectTagifyText: function() { with(this) {
|
296
|
+
$('sandbox').innerHTML = "Blah<strong>bleb</strong> Blub";
|
297
|
+
assertEqual(3, $('sandbox').childNodes.length);
|
298
|
+
Effect.tagifyText('sandbox');
|
299
|
+
assertEqual(10, $('sandbox').childNodes.length);
|
300
|
+
|
301
|
+
Effect.multiple('sandbox', Effect.Fade);
|
302
|
+
assertEqual(10, Effect.Queue.effects.length);
|
303
|
+
}},
|
304
|
+
|
305
|
+
testEffectParallel: function() { with(this) {
|
306
|
+
assert( new Effect.Parallel() );
|
307
|
+
assert( new Effect.Parallel([]) );
|
308
|
+
assert( new Effect.Parallel([],{}) );
|
309
|
+
assert( new Effect.Parallel([
|
310
|
+
new Effect.Event({sync:true})
|
311
|
+
],{ duration: 2}) );
|
312
|
+
}},
|
313
|
+
|
314
|
+
testEffectTween: function() { with(this) {
|
315
|
+
// basic initialization
|
316
|
+
assert(new Effect.Tween(null,0,0,function(){}));
|
317
|
+
assert(new Effect.Tween(null,0,0,{duration:0.1},function(){}));
|
318
|
+
|
319
|
+
// fun with objects
|
320
|
+
var object = {
|
321
|
+
blech: 2,
|
322
|
+
foo: function(p){
|
323
|
+
this.bar = p;
|
324
|
+
}
|
325
|
+
};
|
326
|
+
assert(new Effect.Tween(object,0,1,{transition:Effect.Transitions.reverse},'blech'));
|
327
|
+
assert(new Effect.Tween(object,0,1,'foo'));
|
328
|
+
|
329
|
+
// fun with elements
|
330
|
+
assert(new Effect.Tween('tween',50,1,'update'));
|
331
|
+
|
332
|
+
wait(1500, function(){
|
333
|
+
assertEqual(0, object.blech);
|
334
|
+
assertEqual(1, object.bar);
|
335
|
+
assertEqual('1', $('tween').innerHTML);
|
336
|
+
});
|
337
|
+
}},
|
338
|
+
|
339
|
+
// test if all combined effects correctly initialize themselves
|
340
|
+
testCombinedEffectsInitialize: function() { with(this) {
|
341
|
+
COMBINED_EFFECTS.each(function(fx,idx){
|
342
|
+
info('Effect.'+fx);
|
343
|
+
$('sandbox').innerHTML = "";
|
344
|
+
$('sandbox').appendChild(
|
345
|
+
Builder.node('div',{id:'test_element'},
|
346
|
+
Builder.node('span','test'))); //some effects require a child element
|
347
|
+
|
348
|
+
// should work with new Effect.Blah syntax
|
349
|
+
var effect = new Effect[fx]('test_element');
|
350
|
+
assertEqual(0, effect.currentFrame);
|
351
|
+
|
352
|
+
// and without the 'new'
|
353
|
+
var effect = Effect[fx]('test_element');
|
354
|
+
assertEqual(0, effect.currentFrame);
|
355
|
+
|
356
|
+
// visualEffect
|
357
|
+
assert($('test_element') == $('test_element').visualEffect(COMBINED_RJS_EFFECTS[idx]));
|
358
|
+
|
359
|
+
// direct element extension
|
360
|
+
var method = COMBINED_EFFECTS[idx].charAt(0).toLowerCase() + COMBINED_EFFECTS[idx].substring(1)
|
361
|
+
assert($('test_element') == $('test_element')[method]());
|
362
|
+
|
363
|
+
// options parsing (shake, squish and grow are special here)
|
364
|
+
if(!['Shake','Squish','Grow'].include(fx)) {
|
365
|
+
var effect = Effect[fx]('test_element',{duration:2.0});
|
366
|
+
assertEqual(2.0, effect.options.duration, fx);
|
367
|
+
}
|
368
|
+
});
|
369
|
+
}},
|
370
|
+
|
371
|
+
testSynchronizedEffects: function() { with(this) {
|
372
|
+
var e1 = new Effect.Fade('sandbox',{sync:true});
|
373
|
+
wait(250, function() {
|
374
|
+
// effect should still be at frame 0
|
375
|
+
assertEqual(0, e1.currentFrame);
|
376
|
+
assertEqual('idle', e1.state);
|
377
|
+
e1.render(0.01);
|
378
|
+
|
379
|
+
// no frame count for sync effects
|
380
|
+
assertEqual(0, e1.currentFrame);
|
381
|
+
assertEqual('running', e1.state);
|
382
|
+
});
|
383
|
+
}},
|
384
|
+
|
385
|
+
testEffectPosition: function() { with(this) {
|
386
|
+
var testeffect = new Effect.Opacity('sandbox',{
|
387
|
+
afterSetup: function(effect) { effect.frames = 0; },
|
388
|
+
afterUpdate: function(effect) { effect.frames++; $('sandbox').update(effect.position); },
|
389
|
+
duration: 0.5, from: 1.0, to: 0.5
|
390
|
+
});
|
391
|
+
assertNull(testeffect.position);
|
392
|
+
assertEqual('idle', testeffect.state);
|
393
|
+
wait(1000, function() {
|
394
|
+
info('Rendered ' + testeffect.frames + ' frames in .5 seconds ' +
|
395
|
+
'(~' + (testeffect.frames/0.5) + 'fps of a possible 60fps, ' +
|
396
|
+
'note that this can exceed 60fps because of additional last frame rendering)');
|
397
|
+
assertEqual('0.5', $('sandbox').innerHTML);
|
398
|
+
assertEqual(0.5, testeffect.position);
|
399
|
+
assertEqual('finished', testeffect.state);
|
400
|
+
});
|
401
|
+
}},
|
402
|
+
|
403
|
+
testRenderPerformance: function() { with(this) {
|
404
|
+
info('The render() method is generated on a per-effect basis')
|
405
|
+
var e = new Effect.Opacity('sandbox',{sync:true});
|
406
|
+
benchmark(function(){
|
407
|
+
e.render(0.5);
|
408
|
+
},1000, 'Without events');
|
409
|
+
var e = new Effect.Opacity('sandbox',{sync:true,afterUpdate:function(){return}});
|
410
|
+
benchmark(function(){
|
411
|
+
e.render(0.5);
|
412
|
+
},1000, 'With afterUpdate event');
|
413
|
+
}},
|
414
|
+
|
415
|
+
testElementMorph: function() { with(this) {
|
416
|
+
$('error_test_ul').morph('font-size:40px', {duration: 0.5}).setStyle({marginRight:'17px'});
|
417
|
+
$('error_message_2').morph({
|
418
|
+
fontSize: '20px',
|
419
|
+
color: '#f00',
|
420
|
+
backgroundColor: '#ffffff'
|
421
|
+
},
|
422
|
+
{
|
423
|
+
duration:0.5
|
424
|
+
});
|
425
|
+
$('error_message_3').morph('final', {duration:0.5});
|
426
|
+
wait(1000,function(){
|
427
|
+
assertEqual('17px', $('error_test_ul').getStyle('margin-right'));
|
428
|
+
assertEqual('40px', $('error_test_ul').getStyle('font-size'));
|
429
|
+
assertEqual('#ffffff', $('error_message_2').getStyle('background-color').parseColor());
|
430
|
+
assertEqual('20px', $('error_message_2').getStyle('font-size'));
|
431
|
+
assertEqual('italic', $('error_message_3').getStyle('font-style'));
|
432
|
+
assertEqual('20px', $('error_message_3').getStyle('font-size'));
|
433
|
+
assertEqual(.5, $('error_message_3').getStyle('opacity'));
|
434
|
+
assertEqual('', $('error_message_3').style.fontSize);
|
435
|
+
});
|
436
|
+
}},
|
437
|
+
|
438
|
+
testElementMorphChaining: function() { with(this) {
|
439
|
+
$('error_message').morph('font-size:17px').morph('opacity:0',{delay:2});
|
440
|
+
wait(3100,function(){ // 2000ms delay + 1000ms default duration
|
441
|
+
assertEqual(0, $('error_message').getStyle('opacity'));
|
442
|
+
});
|
443
|
+
}},
|
444
|
+
|
445
|
+
testTransformBySelector: function() { with(this) {
|
446
|
+
new Effect.Transform([
|
447
|
+
{ 'ul.error-list li': 'font-size:20px;text-indent:40pt' }
|
448
|
+
],{ duration: 0.5 }).play();
|
449
|
+
|
450
|
+
wait(700,function(){
|
451
|
+
var idx = 0;
|
452
|
+
$A($('error_test_ul').cleanWhitespace().childNodes).each(function(node){
|
453
|
+
assertEqual('20px', $(node).getStyle('font-size'));
|
454
|
+
assertEqual('40pt', $(node).getStyle('text-indent'));
|
455
|
+
idx++;
|
456
|
+
});
|
457
|
+
assertEqual(5, idx);
|
458
|
+
});
|
459
|
+
}},
|
460
|
+
|
461
|
+
testTransformUsesCSSClassPresets: function() { with(this) {
|
462
|
+
assertEqual('40px', $('rotfl').getStyle('font-size'));
|
463
|
+
|
464
|
+
// Render the effect at half-way through, font-size should be
|
465
|
+
// exactly half-way between original and target
|
466
|
+
new Effect.Transform([
|
467
|
+
{ 'rotfl': 'font-size:20px;text-indent:40pt;background-color:#888' }
|
468
|
+
],{ sync:true }).play().render(0.5);
|
469
|
+
|
470
|
+
wait(1100,function(){
|
471
|
+
// should be 30px = 40px + (20px-40px)/2
|
472
|
+
assertEqual('30px', $('rotfl').getStyle('font-size'));
|
473
|
+
});
|
474
|
+
}},
|
475
|
+
|
476
|
+
testTransformMultiple: function() { with(this) {
|
477
|
+
var transformation = new Effect.Transform([
|
478
|
+
{ 'div.morphing': 'font-size:20px;padding-left:40em;opacity:0.5' },
|
479
|
+
{ 'blah' :
|
480
|
+
'width:480px;border-width:10px;border-right-width:20px;' +
|
481
|
+
'margin:20px;margin-bottom:-20px;font-size:30px;' +
|
482
|
+
'background:#954' }
|
483
|
+
],{ duration: 0.5 });
|
484
|
+
|
485
|
+
var generatedEffect = transformation.play();
|
486
|
+
|
487
|
+
assertEqual(3, generatedEffect.effects.length);
|
488
|
+
|
489
|
+
wait(700, function(){
|
490
|
+
// have a look at the generated color transforms for the 3rd found element
|
491
|
+
// which is the "blah" div
|
492
|
+
assertEqual('blah', generatedEffect.effects[2].element.id);
|
493
|
+
assertEnumEqual([255,255,255],
|
494
|
+
generatedEffect.effects[2].transforms.detect( function(transform){
|
495
|
+
return (transform.style == 'backgroundColor')
|
496
|
+
}).originalValue);
|
497
|
+
assertEnumEqual([153,85,68],
|
498
|
+
generatedEffect.effects[2].transforms.detect( function(transform){
|
499
|
+
return (transform.style == 'backgroundColor')
|
500
|
+
}).targetValue);
|
501
|
+
|
502
|
+
assertEqual('20px', $$('div.morphing').first().getStyle('font-size'));
|
503
|
+
assertEqual('20px', $$('div.morphing').last().getStyle('font-size'));
|
504
|
+
assertEqual('30px', $('blah').getStyle('font-size'));
|
505
|
+
|
506
|
+
// border-width/border-right-width should be set independently
|
507
|
+
assertEqual('10px', $('blah').getStyle('border-top-width'));
|
508
|
+
assertEqual('10px', $('blah').getStyle('border-bottom-width'));
|
509
|
+
assertEqual('10px', $('blah').getStyle('border-left-width'));
|
510
|
+
assertEqual('20px', $('blah').getStyle('border-right-width'));
|
511
|
+
|
512
|
+
// colors should assume transition from
|
513
|
+
// #ffffff (white) if original was transparent
|
514
|
+
// we now should have arrived at the given color
|
515
|
+
assertEqual('#995544', $('blah').getStyle('background-color').parseColor());
|
516
|
+
|
517
|
+
// play again = should have same values
|
518
|
+
transformation.play();
|
519
|
+
wait(700, function(){
|
520
|
+
assertEqual('20px', $$('div.morphing').first().getStyle('font-size'));
|
521
|
+
assertEqual('20px', $$('div.morphing').last().getStyle('font-size'));
|
522
|
+
assertEqual('30px', $('blah').getStyle('font-size'));
|
523
|
+
|
524
|
+
$('blah').setStyle({fontSize:'100px'});
|
525
|
+
assertEqual('100px', $('blah').getStyle('font-size'));
|
526
|
+
transformation.play();
|
527
|
+
wait(700, function(){
|
528
|
+
assertEqual('30px', $('blah').getStyle('font-size'));
|
529
|
+
|
530
|
+
new Effect.Transform([
|
531
|
+
{ 'blah': 'color: #80d980; background: #208020' }
|
532
|
+
],{ duration: 1.1 }).play();
|
533
|
+
wait(1500, function(){
|
534
|
+
assertEqual('#80d980', $('blah').getStyle('color').parseColor());
|
535
|
+
assertEqual('#208020', $('blah').getStyle('background-color').parseColor());
|
536
|
+
});
|
537
|
+
});
|
538
|
+
});
|
539
|
+
});
|
540
|
+
}}
|
541
|
+
|
542
|
+
});
|
543
|
+
|
544
|
+
// ]]>
|
545
|
+
</script>
|
546
|
+
</body>
|
547
|
+
</html>
|