autowidth.test.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { width } from '../data/html';
  2. import Splide from '../../src/js/splide';
  3. import { COMPLETE } from '../../src/js/components';
  4. describe( 'When the autoWidth option is true, ', () => {
  5. let splide;
  6. beforeEach( () => {
  7. document.body.innerHTML = width;
  8. splide = new Splide( '#splide', { autoWidth: true }, COMPLETE );
  9. Object.defineProperty( splide.root.querySelector( '.splide__track' ), 'clientWidth', { value: 800 } );
  10. splide.root.querySelectorAll( '.splide__slide' ).forEach( slide => {
  11. Object.defineProperty( slide, 'clientWidth', { value: parseInt( slide.style.width ) } );
  12. } );
  13. splide.mount();
  14. } );
  15. test( 'Splide should move slides according to their width.', done => {
  16. splide.on( 'moved', () => {
  17. const slide = splide.Components.Elements.slides[0];
  18. expect( Math.abs( splide.Components.Track.position ) ).toBe( slide.clientWidth );
  19. done();
  20. } );
  21. splide.go( 1 );
  22. splide.Components.Elements.list.dispatchEvent( new Event( 'transitionend' ) );
  23. } );
  24. test( '"is-visible" class is properly toggled by the slide and viewport width.', done => {
  25. splide.on( 'moved', () => {
  26. const slide1 = splide.Components.Elements.slides[1];
  27. const slide2 = splide.Components.Elements.slides[2]; // 300px, active
  28. const slide3 = splide.Components.Elements.slides[3]; // 400px
  29. const slide4 = splide.Components.Elements.slides[4]; // 500px
  30. expect( slide1.classList.contains( 'is-visible' ) ).toBeFalsy();
  31. expect( slide2.classList.contains( 'is-active' ) && slide2.classList.contains( 'is-visible' ) ).toBeTruthy();
  32. expect( slide3.classList.contains( 'is-visible' ) ).toBeTruthy();
  33. expect( slide4.classList.contains( 'is-visible' ) ).toBeFalsy(); // Out of the viewport.
  34. done();
  35. } );
  36. splide.go( 2 );
  37. splide.Components.Elements.list.dispatchEvent( new Event( 'transitionend' ) );
  38. } );
  39. } );