| 1 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
|---|
| 2 | "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
|---|
| 3 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
|---|
| 4 | <head> |
|---|
| 5 | <title>script.aculo.us Unit test file</title> |
|---|
| 6 | <meta http-equiv="content-type" content="text/html; charset=utf-8" /> |
|---|
| 7 | <script src="../../lib/prototype.js" type="text/javascript"></script> |
|---|
| 8 | <script src="../../src/scriptaculous.js" type="text/javascript"></script> |
|---|
| 9 | <script src="../../src/unittest.js" type="text/javascript"></script> |
|---|
| 10 | <link rel="stylesheet" href="../test.css" type="text/css" /> |
|---|
| 11 | <style 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> |
|---|