sync.test.ts 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import { EVENT_MOVE } from '../../../constants/events';
  2. import { Splide } from '../../../core/Splide/Splide';
  3. import { init } from '../../../test';
  4. describe( 'Sync#sync()', () => {
  5. test( 'can sync Splide sliders.', () => {
  6. const primary = init( { speed: 0 }, { id: 'primary', mount: false } );
  7. const secondary = init( { speed: 0 }, { id: 'secondary', insertHtml: true, mount: false } );
  8. primary.sync( secondary ).mount();
  9. secondary.mount();
  10. expect( primary.index ).toBe( 0 );
  11. expect( secondary.index ).toBe( 0 );
  12. primary.go( 1 );
  13. expect( primary.index ).toBe( 1 );
  14. expect( secondary.index ).toBe( 1 );
  15. primary.go( 4 );
  16. expect( primary.index ).toBe( 4 );
  17. expect( secondary.index ).toBe( 4 );
  18. secondary.go( 0 );
  19. expect( primary.index ).toBe( 0 );
  20. expect( secondary.index ).toBe( 0 );
  21. secondary.go( 5 );
  22. expect( primary.index ).toBe( 5 );
  23. expect( secondary.index ).toBe( 5 );
  24. } );
  25. test( 'can sync Splide sliders after mount.', () => {
  26. const primary = init( { speed: 0 }, { id: 'primary', mount: false } );
  27. const secondary = init( { speed: 0 }, { id: 'secondary', insertHtml: true, mount: false } );
  28. primary.mount();
  29. secondary.mount();
  30. primary.sync( secondary );
  31. primary.go( 1 );
  32. expect( primary.index ).toBe( 1 );
  33. expect( secondary.index ).toBe( 1 );
  34. primary.go( 4 );
  35. expect( primary.index ).toBe( 4 );
  36. expect( secondary.index ).toBe( 4 );
  37. } );
  38. test( 'can sync multiple Splide sliders.', () => {
  39. const primary = init( { speed: 0 }, { id: 'primary', mount: false } );
  40. const splides: Splide[] = [];
  41. Array.from( { length: 5 } ).forEach( ( item, index ) => {
  42. const secondary = init( { speed: 0 }, { id: `secondary-${ index }`, insertHtml: true, mount: false } );
  43. splides.push( secondary );
  44. primary.sync( secondary );
  45. } );
  46. primary.mount();
  47. splides.forEach( splide => splide.mount() );
  48. primary.go( 1 );
  49. splides.forEach( splide => {
  50. expect( splide.index ).toBe( 1 );
  51. } );
  52. primary.go( 5 );
  53. splides.forEach( splide => {
  54. expect( splide.index ).toBe( 5 );
  55. } );
  56. splides[ 3 ].go( 3 );
  57. expect( primary.index ).toBe( 3 );
  58. splides.forEach( splide => {
  59. expect( splide.index ).toBe( 3 );
  60. } );
  61. } );
  62. test( 'should prevent recursive calls of `move` event handlers.', () => {
  63. const primary = init( { speed: 0 }, { id: 'primary', mount: false } );
  64. const secondary = init( { speed: 0 }, { id: 'secondary', insertHtml: true, mount: false } );
  65. const callback = jest.fn();
  66. primary.sync( secondary ).mount();
  67. secondary.mount();
  68. primary.on( EVENT_MOVE, callback );
  69. primary.go( 1 );
  70. expect( callback ).toHaveBeenCalledTimes( 1 );
  71. secondary.go( 2 );
  72. expect( callback ).toHaveBeenCalledTimes( 2 );
  73. } );
  74. } );