controller.test.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { minimum } from '../data/html';
  2. import Splide from '../../src/js/splide';
  3. import { COMPLETE } from '../../src/js/components';
  4. describe( 'The Controller', () => {
  5. beforeEach( () => {
  6. document.body.innerHTML = minimum;
  7. } );
  8. test( 'should parse control patterns.', () => {
  9. const perPage = 3;
  10. const splide = new Splide( '#splide', { perPage }, COMPLETE ).mount();
  11. const Controller = splide.Components.Controller;
  12. expect( Controller.parse( '+' ) ).toBe( 1 );
  13. expect( Controller.parse( '+2' ) ).toBe( 2 );
  14. expect( Controller.parse( '-' ) ).toBe( -1 );
  15. expect( Controller.parse( '-2' ) ).toBe( -2 );
  16. expect( Controller.parse( '>' ) ).toBe( perPage );
  17. expect( Controller.parse( '<' ) ).toBe( -perPage );
  18. expect( Controller.parse( '>2' ) ).toBe( perPage * 2 );
  19. expect( Controller.parse( '5' ) ).toBe( 5 );
  20. } );
  21. test( 'should trim index depending on a slider type and rewind option.', () => {
  22. const perPage = 3;
  23. const splide = new Splide( '#splide', { perPage }, COMPLETE ).mount();
  24. const slides = splide.Components.Elements.slides;
  25. const Controller = splide.Components.Controller;
  26. expect( Controller.edgeIndex ).toBe( slides.length - perPage );
  27. expect( Controller.trim( 100 ) ).toBe( Controller.edgeIndex );
  28. expect( Controller.trim( -100 ) ).toBe( 0 );
  29. splide.options = { rewind: true };
  30. expect( Controller.edgeIndex ).toBe( slides.length - perPage );
  31. expect( Controller.trim( 100 ) ).toBe( 0 );
  32. expect( Controller.trim( -100 ) ).toBe( Controller.edgeIndex );
  33. } );
  34. test( 'should trim index properly in LOOP mode.', () => {
  35. const splide = new Splide( '#splide', { perPage: 3, type: 'loop' }, COMPLETE ).mount();
  36. const Controller = splide.Components.Controller;
  37. expect( Controller.edgeIndex ).toBe( splide.length - 1 );
  38. } );
  39. } );