14fbc079394e4b8753154478e3b5c1038df477836d511abeed45ce5251f8cc32727fd6f0582d9efc569d3fb392284eefe6e994bcb9e485dd323690d1e0c3b0 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. const { expect } = require('chai')
  2. const {
  3. transition,
  4. injectNewCurve
  5. } = require('../src/index')
  6. const testCurve = [[[0.000, 1.000]],[[0.151, 0.396], [0.019, 0.604], [0.330, 0.056]],[[1.000, 0.000]]]
  7. function findNaNInArray (arr) {
  8. return arr.findIndex(n => !Number.isFinite(n)) !== -1
  9. }
  10. describe('transition-Number', () => {
  11. const startState = 0
  12. const endState = 100
  13. const frame = 30
  14. const linearResult = transition('linear', startState, endState, frame)
  15. const testCurveResult = transition(testCurve, startState, endState, frame)
  16. it('transition()', () => {
  17. expect(transition()).to.be.false
  18. })
  19. it('Input an invalid tBC will automatically apply the default tBC', () => {
  20. expect(transition('invalid', startState, endState, frame)).to.deep.ordered.equal(linearResult)
  21. })
  22. it('Transition result must be an array (linearResult)', () => {
  23. expect(linearResult).to.be.an.instanceof(Array).lengthOf(frame)
  24. })
  25. it('Transition result must be an array (testCurveResult)', () => {
  26. expect(testCurveResult).to.be.an.instanceof(Array).lengthOf(frame)
  27. })
  28. it('Transition result first element must equal startstate (linearResult)', () => {
  29. expect(linearResult).to.property('0', startState)
  30. })
  31. it('Transition result first element must equal startstate (testCurveResult)', () => {
  32. expect(testCurveResult).to.property('0', startState)
  33. })
  34. it('Transition result last element must equal endState (linearResult)', () => {
  35. expect(linearResult).to.property(frame - 1, endState)
  36. })
  37. it('Transition result last element must equal endState (testCurveResult)', () => {
  38. expect(testCurveResult).to.property(frame - 1, endState)
  39. })
  40. it('Transition result elements should all be number (linearResult)', () => {
  41. expect(linearResult).satisfy(states => {
  42. return !findNaNInArray(states)
  43. })
  44. })
  45. it('Transition result elements should all be number (testCurveResult)', () => {
  46. expect(testCurveResult).satisfy(states => {
  47. return !findNaNInArray(states)
  48. })
  49. })
  50. })
  51. describe('transition-Array', () => {
  52. const startState = [0, 0]
  53. const endState = [100, 100]
  54. const frame = 30
  55. const linearResult = transition('linear', startState, endState, frame)
  56. const testCurveResult = transition(testCurve, startState, endState, frame)
  57. it('Transition result must be an array (linearResult)', () => {
  58. expect(linearResult).to.be.an.instanceof(Array).lengthOf(frame)
  59. })
  60. it('Transition result must be an array (testCurveResult)', () => {
  61. expect(testCurveResult).to.be.an.instanceof(Array).lengthOf(frame)
  62. })
  63. it('Transition result first element must equal startstate (linearResult)', () => {
  64. expect(linearResult).to.deep.property('0', startState)
  65. })
  66. it('Transition result first element must equal startstate (testCurveResult)', () => {
  67. expect(testCurveResult).to.deep.property('0', startState)
  68. })
  69. it('Transition result last element must equal endState (linearResult)', () => {
  70. expect(linearResult).to.deep.property(frame - 1, endState)
  71. })
  72. it('Transition result last element must equal endState (testCurveResult)', () => {
  73. expect(testCurveResult).to.deep.property(frame - 1, endState)
  74. })
  75. it('Transition result elements should all be number (linearResult)', () => {
  76. expect(linearResult).satisfy(states => {
  77. return !states.find(item => findNaNInArray(item))
  78. })
  79. })
  80. it('Transition result elements should all be number (testCurveResult)', () => {
  81. expect(testCurveResult).satisfy(states => {
  82. return !states.find(item => findNaNInArray(item))
  83. })
  84. })
  85. })
  86. describe('transition-Object', () => {
  87. const startState = { x: 0, y: 0, name: 'circle'}
  88. const endState = { x: 100, y: 100, name: 'circle'}
  89. const frame = 30
  90. const linearResult = transition('linear', startState, endState, frame)
  91. const testCurveResult = transition(testCurve, startState, endState, frame)
  92. it('Transition result must be an array (linearResult)', () => {
  93. expect(linearResult).to.be.an.instanceof(Array).lengthOf(frame)
  94. })
  95. it('Transition result must be an array (testCurveResult)', () => {
  96. expect(testCurveResult).to.be.an.instanceof(Array).lengthOf(frame)
  97. })
  98. it('Transition result first element must equal startstate (linearResult)', () => {
  99. expect(linearResult).to.deep.property('0', startState)
  100. })
  101. it('Transition result first element must equal startstate (testCurveResult)', () => {
  102. expect(testCurveResult).to.deep.property('0', startState)
  103. })
  104. it('Transition result last element must equal endState (linearResult)', () => {
  105. expect(linearResult).to.deep.property(frame - 1, endState)
  106. })
  107. it('Transition result last element must equal endState (testCurveResult)', () => {
  108. expect(testCurveResult).to.deep.property(frame - 1, endState)
  109. })
  110. })
  111. describe('transition-Deep', () => {
  112. const startState = { position: [0, 0], r: 0, name: 'circle'}
  113. const endState = { position: [100, 100], r: 0, name: 'circle'}
  114. const frame = 30
  115. const linearResult = transition('linear', startState, endState, frame, true)
  116. const testCurveResult = transition(testCurve, startState, endState, frame, true)
  117. it('Transition result must be an array (linearResult)', () => {
  118. expect(linearResult).to.be.an.instanceof(Array).lengthOf(frame)
  119. })
  120. it('Transition result must be an array (testCurveResult)', () => {
  121. expect(testCurveResult).to.be.an.instanceof(Array).lengthOf(frame)
  122. })
  123. it('Transition result first element must equal startstate (linearResult)', () => {
  124. expect(linearResult).to.deep.property('0', startState)
  125. })
  126. it('Transition result first element must equal startstate (testCurveResult)', () => {
  127. expect(testCurveResult).to.deep.property('0', startState)
  128. })
  129. it('Transition result last element must equal endState (linearResult)', () => {
  130. expect(linearResult).to.deep.property(frame - 1, endState)
  131. })
  132. it('Transition result last element must equal endState (testCurveResult)', () => {
  133. expect(testCurveResult).to.deep.property(frame - 1, endState)
  134. })
  135. })
  136. describe('injectNewCurve', () => {
  137. const startState = 0
  138. const endState = 100
  139. const frame = 30
  140. injectNewCurve('test', testCurve)
  141. const testCurveResult = transition(testCurve, startState, endState, frame)
  142. const injectCurveResult = transition('test', startState, endState, frame)
  143. it('Transition result must be an array (injectCurveResult)', () => {
  144. expect(injectCurveResult).to.be.an.instanceof(Array).lengthOf(frame)
  145. })
  146. it('Transition result first element must equal startstate (injectCurveResult)', () => {
  147. expect(injectCurveResult).to.property('0', startState)
  148. })
  149. it('Transition result last element must equal endState (injectCurveResult)', () => {
  150. expect(injectCurveResult).to.property(frame - 1, endState)
  151. })
  152. it('Transition result elements should all be number (injectCurveResult)', () => {
  153. expect(injectCurveResult).satisfy(states => {
  154. return !findNaNInArray(states)
  155. })
  156. })
  157. it('testCurveResult deep equal injectCurveResult', () => {
  158. expect(testCurveResult).deep.ordered.equal(injectCurveResult)
  159. })
  160. })