You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

210 lines
7.0 KiB
JavaScript

const { expect } = require('chai')
const {
transition,
injectNewCurve
} = require('@jiaminghi/transition/src')
const testCurve = [[[0.000, 1.000]],[[0.151, 0.396], [0.019, 0.604], [0.330, 0.056]],[[1.000, 0.000]]]
function findNaNInArray (arr) {
return arr.findIndex(n => !Number.isFinite(n)) !== -1
}
describe('transition-Number', () => {
const startState = 0
const endState = 100
const frame = 30
const linearResult = transition('linear', startState, endState, frame)
const testCurveResult = transition(testCurve, startState, endState, frame)
it('transition()', () => {
expect(transition()).to.be.false
})
it('Input an invalid tBC will automatically apply the default tBC', () => {
expect(transition('invalid', startState, endState, frame)).to.deep.ordered.equal(linearResult)
})
it('Transition result must be an array (linearResult)', () => {
expect(linearResult).to.be.an.instanceof(Array).lengthOf(frame)
})
it('Transition result must be an array (testCurveResult)', () => {
expect(testCurveResult).to.be.an.instanceof(Array).lengthOf(frame)
})
it('Transition result first element must equal startstate (linearResult)', () => {
expect(linearResult).to.property('0', startState)
})
it('Transition result first element must equal startstate (testCurveResult)', () => {
expect(testCurveResult).to.property('0', startState)
})
it('Transition result last element must equal endState (linearResult)', () => {
expect(linearResult).to.property(frame - 1, endState)
})
it('Transition result last element must equal endState (testCurveResult)', () => {
expect(testCurveResult).to.property(frame - 1, endState)
})
it('Transition result elements should all be number (linearResult)', () => {
expect(linearResult).satisfy(states => {
return !findNaNInArray(states)
})
})
it('Transition result elements should all be number (testCurveResult)', () => {
expect(testCurveResult).satisfy(states => {
return !findNaNInArray(states)
})
})
})
describe('transition-Array', () => {
const startState = [0, 0]
const endState = [100, 100]
const frame = 30
const linearResult = transition('linear', startState, endState, frame)
const testCurveResult = transition(testCurve, startState, endState, frame)
it('Transition result must be an array (linearResult)', () => {
expect(linearResult).to.be.an.instanceof(Array).lengthOf(frame)
})
it('Transition result must be an array (testCurveResult)', () => {
expect(testCurveResult).to.be.an.instanceof(Array).lengthOf(frame)
})
it('Transition result first element must equal startstate (linearResult)', () => {
expect(linearResult).to.deep.property('0', startState)
})
it('Transition result first element must equal startstate (testCurveResult)', () => {
expect(testCurveResult).to.deep.property('0', startState)
})
it('Transition result last element must equal endState (linearResult)', () => {
expect(linearResult).to.deep.property(frame - 1, endState)
})
it('Transition result last element must equal endState (testCurveResult)', () => {
expect(testCurveResult).to.deep.property(frame - 1, endState)
})
it('Transition result elements should all be number (linearResult)', () => {
expect(linearResult).satisfy(states => {
return !states.find(item => findNaNInArray(item))
})
})
it('Transition result elements should all be number (testCurveResult)', () => {
expect(testCurveResult).satisfy(states => {
return !states.find(item => findNaNInArray(item))
})
})
})
describe('transition-Object', () => {
const startState = { x: 0, y: 0, name: 'circle'}
const endState = { x: 100, y: 100, name: 'circle'}
const frame = 30
const linearResult = transition('linear', startState, endState, frame)
const testCurveResult = transition(testCurve, startState, endState, frame)
it('Transition result must be an array (linearResult)', () => {
expect(linearResult).to.be.an.instanceof(Array).lengthOf(frame)
})
it('Transition result must be an array (testCurveResult)', () => {
expect(testCurveResult).to.be.an.instanceof(Array).lengthOf(frame)
})
it('Transition result first element must equal startstate (linearResult)', () => {
expect(linearResult).to.deep.property('0', startState)
})
it('Transition result first element must equal startstate (testCurveResult)', () => {
expect(testCurveResult).to.deep.property('0', startState)
})
it('Transition result last element must equal endState (linearResult)', () => {
expect(linearResult).to.deep.property(frame - 1, endState)
})
it('Transition result last element must equal endState (testCurveResult)', () => {
expect(testCurveResult).to.deep.property(frame - 1, endState)
})
})
describe('transition-Deep', () => {
const startState = { position: [0, 0], r: 0, name: 'circle'}
const endState = { position: [100, 100], r: 0, name: 'circle'}
const frame = 30
const linearResult = transition('linear', startState, endState, frame, true)
const testCurveResult = transition(testCurve, startState, endState, frame, true)
it('Transition result must be an array (linearResult)', () => {
expect(linearResult).to.be.an.instanceof(Array).lengthOf(frame)
})
it('Transition result must be an array (testCurveResult)', () => {
expect(testCurveResult).to.be.an.instanceof(Array).lengthOf(frame)
})
it('Transition result first element must equal startstate (linearResult)', () => {
expect(linearResult).to.deep.property('0', startState)
})
it('Transition result first element must equal startstate (testCurveResult)', () => {
expect(testCurveResult).to.deep.property('0', startState)
})
it('Transition result last element must equal endState (linearResult)', () => {
expect(linearResult).to.deep.property(frame - 1, endState)
})
it('Transition result last element must equal endState (testCurveResult)', () => {
expect(testCurveResult).to.deep.property(frame - 1, endState)
})
})
describe('injectNewCurve', () => {
const startState = 0
const endState = 100
const frame = 30
injectNewCurve('test', testCurve)
const testCurveResult = transition(testCurve, startState, endState, frame)
const injectCurveResult = transition('test', startState, endState, frame)
it('Transition result must be an array (injectCurveResult)', () => {
expect(injectCurveResult).to.be.an.instanceof(Array).lengthOf(frame)
})
it('Transition result first element must equal startstate (injectCurveResult)', () => {
expect(injectCurveResult).to.property('0', startState)
})
it('Transition result last element must equal endState (injectCurveResult)', () => {
expect(injectCurveResult).to.property(frame - 1, endState)
})
it('Transition result elements should all be number (injectCurveResult)', () => {
expect(injectCurveResult).satisfy(states => {
return !findNaNInArray(states)
})
})
it('testCurveResult deep equal injectCurveResult', () => {
expect(testCurveResult).deep.ordered.equal(injectCurveResult)
})
})