UNPKG

act

Version:

An animation engine for the canvas and dom

290 lines (214 loc) 5.77 kB
act = require '../src/act.coffee' describe 'act.transaction', -> it 'value transaction (=)', -> point = x:0, y:0 act.begin() act point, x: 1, y:2 act.commit() act.fastForward(0) point.x.should.equal 0 point.y.should.equal 0 act.fastForward(0.5) point.x.should.equal 0.5 point.y.should.equal 1 act.fastForward(0.5) point.x.should.equal 1 point.y.should.equal 2 it 'value transaction (+=)', -> point = x:0, y:0 act.begin() act point, x: '+=': 1 act point, y: '+=': 2 act.commit() act.fastForward(0.5) point.x.should.equal 0.5 point.y.should.equal 1 act.fastForward(0.5) point.x.should.equal 1 point.y.should.equal 2 it 'value transaction (-=)', -> point = x:0, y:0 act.begin() act point, x: '-=': 1 act point, y: '-=': 2 act.commit() act.fastForward(0.5) point.x.should.equal -0.5 point.y.should.equal -1 act.fastForward(0.5) point.x.should.equal -1 point.y.should.equal -2 it 'value transaction (*=)', -> point = x:1, y:1 act.begin() act point, x: '*=': 2 act point, y: '*=': 3 act.commit() act.fastForward(0.5) point.x.should.equal 1.5 point.y.should.equal 2 act.fastForward(0.5) point.x.should.equal 2 point.y.should.equal 3 it 'value transaction (/=)', -> point = x:1, y:1 act.begin() act point, x: '/=': 2 act point, y: '/=': 3 act.commit() act.fastForward(0.5) point.x.should.equal (1+1/2)/2 point.y.should.equal (1+1/3)/2 act.fastForward(0.5) point.x.should.equal 1/2 point.y.should.equal 1/3 it 'value transaction (rate 2)', -> point = x:0 act.begin(rate: 2) # two times faster act point, x: 1 act.commit() act.fastForward(0) point.x.should.equal 0 act.fastForward(0.25) point.x.should.equal 0.5 act.fastForward(0.25) point.x.should.equal 1 act.fastForward(1) point.x.should.equal 1 it 'value transaction (rate 1/2)', -> point = x: 0 act.begin(rate: 1/2) # half as fast act point, x: 1 act.commit() act.fastForward(0) point.x.should.equal 0 act.fastForward(1) point.x.should.equal 0.5 act.fastForward(1) point.x.should.equal 1 # throw on duration 0 it 'duration 0', -> point = x:0, y:0 expect(-> act point, x:1, {duration: 0}).to.throw 'act: duration must be positive' # throw on rate 0 it 'rate 0', -> point = x:0, y:0 expect(-> act.begin(rate:0) act(point, x:1) act.commit() ).to.throw 'act: rate must be positive' it 'serial transaction', -> point = x: 0, y: 0 act.begin(serial: true) act point, x: 1 act point, x: 2 act.commit() act.fastForward(0) point.x.should.equal 0 act.fastForward(0.5) point.x.should.equal 0.5 act.fastForward(0.5) point.x.should.equal 1 act.fastForward(0.5) point.x.should.equal 1.5 act.fastForward(0.5) point.x.should.equal 2 it 'serial transaction (multiple properties)', -> point = x: 0, y: 0 act.begin(serial: true) act point, x: 1 act point, y: 2 act.commit() act.fastForward(0) point.x.should.equal 0 point.y.should.equal 0 act.fastForward(1) point.x.should.equal 1 point.y.should.equal 0 act.fastForward(2) point.x.should.equal 1 point.y.should.equal 2 it 'parallel (EaseIn)', -> point = x: 0 act.begin(easing: act.EaseIn) act point, x: 1 act.commit() act.fastForward(0) point.x.should.equal 0 act.fastForward(0.5) point.x.should.be.within(0.01, 0.49) act.fastForward(0.5) point.x.should.equal 1 it 'parallel (EaseOut)', -> point = x: 0 act.begin(easing: act.EaseOut) act point, x: 1 act.commit() act.fastForward(0) point.x.should.equal 0 act.fastForward(0.5) point.x.should.be.within(0.75, 0.99) act.fastForward(0.5) point.x.should.equal 1 it 'parallel (EaseInOut)', -> point = x: 0 act.begin(easing: act.EaseInOut) act point, x: 1 act.commit() act.fastForward(0) point.x.should.equal 0 act.fastForward(0.25) point.x.should.be.within(0.01, 0.24) act.fastForward(0.25) point.x.should.equal 0.5 act.fastForward(0.25) point.x.should.be.within(0.75, 0.99) act.fastForward(0.25) point.x.should.equal 1 it 'task with duration', -> point = x: 0 act.begin() act point, x: 1, {duration: 2} act.commit() act.fastForward(0) point.x.should.equal 0 act.fastForward(0.5) point.x.should.equal 0.25 act.fastForward(0.5) point.x.should.equal 0.5 act.fastForward(0.5) point.x.should.equal 0.75 act.fastForward(0.5) point.x.should.equal 1 it 'task with duration (serial, EaseInOut)', -> point = x: 0 act.begin(serial: true) act point, x: 1, {duration: 2, easing: act.EaseInOut} act point, x: 2, {duration: 2, easing: act.EaseInOut} act.commit() act.fastForward(0) point.x.should.equal 0 act.fastForward(0.5) point.x.should.be.within(0.01, 0.24) act.fastForward(0.5) point.x.should.equal 0.5 act.fastForward(0.5) point.x.should.be.within(0.76, 0.99) act.fastForward(0.5) point.x.should.equal 1 act.fastForward(0.5) point.x.should.be.within(1.01, 1.25) act.fastForward(0.5) point.x.should.equal 1.5 act.fastForward(0.5) point.x.should.be.within(1.76, 1.99) act.fastForward(0.5) point.x.should.equal 2 it 'setTimeout starts by default', (done) -> point = x: 0 act point, x: 1, {duration: 0.015} setTimeout (-> point.x.should.equal 1 done() ), 0.02 * 1000