general.test.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import { findRuleBy, fire, init } from '../../../test';
  2. describe( 'Move', () => {
  3. test( 'can jump to the specific slide.', () => {
  4. const splide = init( { width: 200, height: 100 } );
  5. const { Move } = splide.Components;
  6. const { list } = splide.Components.Elements;
  7. Move.jump( 2 );
  8. expect( list.style.transform ).toBe( 'translateX(-400px)' );
  9. Move.jump( 4 );
  10. expect( list.style.transform ).toBe( 'translateX(-800px)' );
  11. splide.destroy();
  12. } );
  13. test( 'can set transform to the list element.', () => {
  14. const splide = init( { width: 200, height: 100 } );
  15. const { Move } = splide.Components;
  16. const { list } = splide.Components.Elements;
  17. Move.translate( 100 );
  18. expect( list.style.transform ).toBe( 'translateX(100px)' );
  19. Move.translate( 500 );
  20. expect( list.style.transform ).toBe( 'translateX(500px)' );
  21. splide.destroy();
  22. } );
  23. test( 'can loop the slider if it exceeds bounds.', () => {
  24. // Note: All clones do not have dimensions.
  25. const width = 200;
  26. const splide = init( { type: 'loop', width, height: 100 } );
  27. const { Move } = splide.Components;
  28. const { list } = splide.Components.Elements;
  29. Move.translate( width );
  30. expect( list.style.transform ).toBe( `translateX(${ -width * ( splide.length - 1 ) }px)` );
  31. splide.destroy();
  32. } );
  33. test( 'can cancel the transition.', () => {
  34. const splide = init( { width: 200, height: 100 } );
  35. const { Move } = splide.Components;
  36. const { list } = splide.Components.Elements;
  37. Move.move( 1, 1, -1 );
  38. const rule = findRuleBy( list );
  39. expect( rule.style.transition ).not.toBe( '' );
  40. Move.cancel();
  41. expect( rule.style.transition ).toBe( '' );
  42. splide.destroy();
  43. } );
  44. test( 'can convert the position to the closest index.', () => {
  45. const splide = init( { width: 200, height: 100 } );
  46. const { Move } = splide.Components;
  47. expect( Move.toIndex( 0 ) ).toBe( 0 );
  48. expect( Move.toIndex( -99 ) ).toBe( 0 );
  49. expect( Move.toIndex( -100 ) ).toBe( 1 );
  50. expect( Move.toIndex( -200 ) ).toBe( 1 );
  51. expect( Move.toIndex( -299 ) ).toBe( 1 );
  52. expect( Move.toIndex( -300 ) ).toBe( 2 );
  53. splide.destroy();
  54. } );
  55. test( 'can convert the index to the position.', () => {
  56. const splide = init( { width: 200, height: 100 } );
  57. const { Move } = splide.Components;
  58. expect( Move.toPosition( 0 ) ).toBe( -0 );
  59. expect( Move.toPosition( 1 ) ).toBe( -200 );
  60. expect( Move.toPosition( 2 ) ).toBe( -400 );
  61. expect( Move.toPosition( 3 ) ).toBe( -600 );
  62. splide.destroy();
  63. } );
  64. test( 'can check the position exceeds bounds or not.', () => {
  65. const width = 200;
  66. const splide = init( { width, height: 100 } );
  67. const totalSize = width * splide.length;
  68. const { Move } = splide.Components;
  69. expect( Move.exceededLimit( false, -10 ) ).toBe( false );
  70. expect( Move.exceededLimit( false, 10 ) ).toBe( true );
  71. expect( Move.exceededLimit( true, - ( totalSize - width ) + 10 ) ).toBe( false );
  72. expect( Move.exceededLimit( true, - ( totalSize - width ) - 10 ) ).toBe( true );
  73. Move.translate( 10 );
  74. expect( Move.exceededLimit() ).toBe( true );
  75. splide.destroy();
  76. } );
  77. test( 'can check if the slider can move or not.', () => {
  78. const splide = init( { width: 200, height: 100 } );
  79. const { Move } = splide.Components;
  80. expect( Move.isBusy() ).toBe( false );
  81. Move.move( 1, 1, -1 );
  82. expect( Move.isBusy() ).toBe( true );
  83. fire( splide.Components.Elements.list, 'transitionend' );
  84. expect( Move.isBusy() ).toBe( false );
  85. splide.destroy();
  86. } );
  87. test( 'should not move the slider while looping.', () => {
  88. const splide = init( { type: 'loop', width: 200, height: 100, waitForTransition: false } );
  89. const { Move } = splide.Components;
  90. expect( Move.isBusy() ).toBe( false );
  91. // Designates the clone index.
  92. Move.move( splide.length, 0, -1 );
  93. expect( Move.isBusy() ).toBe( true );
  94. fire( splide.Components.Elements.list, 'transitionend' );
  95. expect( Move.isBusy() ).toBe( false );
  96. splide.destroy();
  97. } );
  98. } );