Tests/Specs: Replace Chai with expect.js for assertions, because of browser support.
[mootools.git] / Specs / Fx / Fx.Tween.js
blob22d9d8c6e47bf14d9a33a8acd1930d1b324272a6
1 /*
2 ---
3 name: Fx.Tween
4 requires: ~
5 provides: ~
6 ...
7 */
8 describe('Fx.Tween', function(){
10         beforeEach(function(){
11                 this.clock = sinon.useFakeTimers();
12         });
14         afterEach(function(){
15                 this.clock.reset();
16                 this.clock.restore();
17         });
19         it('should tween the style of an element', function(){
21                 var element = new Element('div#st_el', {
22                         styles: {
23                                 height: 100
24                         }
25                 }).inject(document.body);
27                 var fx = new Fx.Tween(element, {
28                         duration: 100,
29                         property: 'height'
30                 });
32                 fx.start(10, 50);
34                 this.clock.tick(200);
36                 expect(element.getStyle('height').toInt()).to.equal(50);
37                 element.destroy();
39         });
41         it('should tween the style of an element via Element.tween', function(){
43                 var element = new Element('div', {
44                         styles: {
45                                 width: 100
46                         },
47                         tween: {
48                                 duration: 100
49                         }
50                 }).inject(document.body).tween('width', 50);
52                 this.clock.tick(200);
54                 expect(element.getStyle('width').toInt()).to.equal(50);
55                 element.destroy();
57         });
59         it('should fade an element', function(){
61                 var element = new Element('div', {
62                         styles: { opacity: 0 }
63                 }).inject(document.body);
65                 element.set('tween', {
66                         duration: 100
67                 });
69                 element.fade('in');
71                 this.clock.tick(130);
73                 expect(element.getStyle('opacity').toInt()).to.equal(1);
74                 element.destroy();
76         });
78         it('should fade out an element and fade in when triggerd inside the onComplete event', function(){
80                 var element = new Element('div').inject($(document.body));
81                 var firstOpacity, lastOpacity, lastVisibility, runOnce = true;
82                 element.set('tween', {
83                         duration: 100,
84                         onComplete: function (){
85                 if(runOnce){
86                     firstOpacity = this.element.getStyle('opacity');
87                     runOnce && this.element.fade();
88                     runOnce = false;
89                 }
90                 
91                         }
92                 });
94                 element.fade();
95                 this.clock.tick(250);
96                 lastOpacity = element.getStyle('opacity');
97                 lastVisibility = element.getStyle('visibility');
99                 expect(firstOpacity.toInt()).to.equal(0);
100                 expect(lastOpacity.toInt()).to.equal(1);
101                 expect(lastVisibility).to.equal('visible');
102                 element.destroy();
103         });
105         it('should fade an element with toggle', function(){
107                 var element = new Element('div', {
108                         styles: { opacity: 1 }
109                 }).inject(document.body);
111                 element.set('tween', {
112                         duration: 100
113                 });
115                 element.fade('toggle');
117                 this.clock.tick(130);
119                 expect(element.getStyle('opacity').toInt()).to.equal(0);
120                 element.destroy();
122         });
124         it('should set tween options with the element getter en setter', function(){
126                 var element = new Element('div');
128                 element.set('tween', {
129                         duration: 100
130                 });
132                 expect(element.get('tween').options.duration).to.equal(100);
134         });
136         it('should fade an element with toggle', function(){
138                 var element = new Element('div', {
139                         tween: {
140                                 duration: 10
141                         }
142                 }).setStyle('background-color', '#fff').inject(document.body);
144                 element.highlight('#f00');
146                 this.clock.tick(40);
148                 expect(['#fff', '#ffffff']).to.contain(element.getStyle('background-color').toLowerCase());
149                 element.destroy();
151         });
153         describe('Element.fade', function(){
155                 it('Should set the visibility style', function(){
157                         var element = new Element('div', {styles: {'visibility': 'visible'}}).inject(document.body);
159                         expect(element.getStyles('opacity', 'visibility')).to.eql({opacity: 1, visibility: 'visible'});
161                         element.fade(0.5);
162                         this.clock.tick(600);
163                         expect(element.getStyles('opacity', 'visibility')).to.eql({opacity: 0.5, visibility: 'visible'});
165                         element.fade(0);
166                         this.clock.tick(600);
167                         expect(element.getStyles('opacity', 'visibility')).to.eql({opacity: 0, visibility: 'hidden'});
169                         element.fade(1);
170                         this.clock.tick(600);
171                         expect(element.getStyles('opacity', 'visibility')).to.eql({opacity: 1, visibility: 'visible'});
173                         element.destroy();
175                 });
177                 it('should accept the old style arguments (0, 1)', function(){
179                         var element = new Element('div');
180                         element.fade(1, 0);
182                         var tween = element.get('tween');
184                         expect(tween.from[0].value).to.equal(1);
185                         expect(tween.to[0].value).to.equal(0);
187                         this.clock.tick(1000);
189                         expect(element.getStyle('opacity')).to.equal(0);
191                 });
193         });