diff --git a/__test__/jQSlickUtils.js b/__test__/jQSlickUtils.js index e8d2ff77b..47525c689 100644 --- a/__test__/jQSlickUtils.js +++ b/__test__/jQSlickUtils.js @@ -53,10 +53,12 @@ function fetchDetails(keys) { const slideObj = { index: $(slide).attr("data-slick-index"), value: $(slide) - .find("div") - .find("div") .find("h3") .text() + //.find("div") + // .find("div") + // .find("h3") + // .text() }; allSlides.push(slideObj); if ($(slide).hasClass("slick-current")) { diff --git a/__test__/mount/simple.test.js b/__test__/mount/simple.test.js index 9b9001f78..890ec4548 100644 --- a/__test__/mount/simple.test.js +++ b/__test__/mount/simple.test.js @@ -31,7 +31,7 @@ const testsUtil = (settings, actions, keys) => { expect(reactDetails.activeSlides).toEqual(jqDetails.activeSlides); }); - // Following two tests fail + // // Following two tests fail test("checking cloned slides jQuery vs react", () => { expect(reactDetails.clonedSlides.map(slide => slide.index)).toEqual( jqDetails.clonedSlides.map(slide => slide.index) diff --git a/examples/__tests__/AdaptiveHeight.test.js b/examples/__tests__/AdaptiveHeight.test.js new file mode 100644 index 000000000..91d0f487c --- /dev/null +++ b/examples/__tests__/AdaptiveHeight.test.js @@ -0,0 +1,107 @@ +import React from "react"; +import SimpleSlider from "../SimpleSlider"; +import { render, fireEvent, waitFor, screen } from "@testing-library/react"; +import { html as beautify_html } from "js-beautify"; +import { + getActiveSlide, + clickNext, + clickPrevious, + hasClass, + getActiveSlides, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsListItem, + getCurrentSlide +} from "../../test-utils"; + +describe("Adaptive Height example", () => { + it("should have 8 slides (1(preclone) + 6(actual) + 1(postclone))", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slide").length).toBe(8); + }); + it("should have 3 clone slides", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-cloned").length).toBe(2); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.querySelectorAll(".slick-slide.slick-current").length + ).toBe(1); + expect(parseInt(getCurrentSlide(container).textContent) - 1).toBe(0); + }); + it("should have 1 active slide", function() { + const { container } = render(); + expect(container.querySelectorAll(".slick-slide.slick-active").length).toBe( + 1 + ); + expect( + Array.from(getActiveSlide(container).children).map( + e => parseInt(e.textContent) - 1 + )[0] + ).toBe(0); + }); + it("should have 6 dots", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-dots")[0].children.length + ).toBe(6); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("2"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("6"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[5] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots button")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesText(container)[0]).toEqual("4"); + expect(getActiveSlidesCount(container)).toEqual(1); + expect(hasClass(getButtonsListItem(container)[3], "slick-active")).toEqual( + true + ); + }); +}); diff --git a/examples/__tests__/AppendDots.test.js b/examples/__tests__/AppendDots.test.js new file mode 100644 index 000000000..4cf9238ef --- /dev/null +++ b/examples/__tests__/AppendDots.test.js @@ -0,0 +1,125 @@ +import React from "react"; +import AppendDots from "../AppendDots"; +import { render, fireEvent, waitFor, screen } from "@testing-library/react"; +import { html as beautify_html } from "js-beautify"; +import { + getActiveSlide, + clickNext, + clickPrevious, + hasClass, + getActiveSlides, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsListItem, + getCurrentSlide, + getSlideHeight +} from "../../test-utils"; + +describe("Append Dots example", () => { + it("should have 8 slides (1(preclone) + 6(actual) + 1(postclone))", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slide").length).toBe(8); + }); + it("should have 3 clone slides", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-cloned").length).toBe(2); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.querySelectorAll(".slick-slide.slick-current").length + ).toBe(1); + expect(parseInt(getCurrentSlide(container).textContent) - 1).toBe(0); + }); + it("should have 1 active slide", function() { + const { container } = render(); + expect(container.querySelectorAll(".slick-slide.slick-active").length).toBe( + 1 + ); + expect( + Array.from(getActiveSlide(container).children).map( + e => parseInt(e.textContent) - 1 + )[0] + ).toBe(0); + }); + it("should have 6 dots", function() { + const { container } = render(); + console.log( + Array.from(container.getElementsByClassName("slick-dots"))[0].children[0] + .children.length + ); + expect( + container.getElementsByClassName("slick-dots")[0].children[0].children + .length + ).toBe(6); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("2"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.getElementsByClassName("slick-dots")[0].children[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("6"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.getElementsByClassName("slick-dots")[0].children[0].children[5] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots div")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesText(container)[0]).toEqual("4"); + expect(getActiveSlidesCount(container)).toEqual(1); + expect( + hasClass( + container.getElementsByClassName("slick-dots")[0].children[0] + .children[3], + "slick-active" + ) + ).toEqual(true); + }); + it("check the content of dots", function() { + const { container } = render(); + const array = []; + Array.from( + container.getElementsByClassName("slick-dots")[0].children[0].children + ).forEach(i => array.push(i.textContent)); + expect(array).toEqual(["1", "2", "3", "4", "5", "6"]); + }); +}); diff --git a/examples/__tests__/AsNavFor.test.js b/examples/__tests__/AsNavFor.test.js new file mode 100644 index 000000000..8a9b30153 --- /dev/null +++ b/examples/__tests__/AsNavFor.test.js @@ -0,0 +1,104 @@ +import React from "react"; +import AsNavFor from "../AsNavFor"; +import { render, fireEvent, waitFor, screen } from "@testing-library/react"; +import { html as beautify_html } from "js-beautify"; +import { + getActiveSlide, + clickNext, + clickPrevious, + hasClass, + getActiveSlides, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsListItem, + getCurrentSlide, + getSlideHeight +} from "../../test-utils"; + +describe("As Nav For example", () => { + it("Number of slides should be 2", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slider").length).toBe(2); + }); + it("First Slide should have 8 slides (1(preclone) + 6(actual) + 1(postclone))", function() { + const { container } = render(); + expect( + container + .getElementsByClassName("slick-slider")[0] + .getElementsByClassName("slick-slide").length + ).toBe(8); + }); + it("Second Slide should have 8 slides (1(preclone) + 6(actual) + 1(postclone))", function() { + const { container } = render(); + expect( + container + .getElementsByClassName("slick-slider")[1] + .getElementsByClassName("slick-slide").length + ).toBe(12); + }); + it("Clicking on next of first slide should change second slide too", function() { + const { container } = render(); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[0]) + ).toEqual(["1"]); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[1]) + ).toEqual(["1", "2", "3"]); + clickNext(container.getElementsByClassName("slick-slider")[0]); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[0]) + ).toEqual(["2"]); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[1]) + ).toEqual(["2", "3", "4"]); + }); + it("Clicking on next of second slide should change first slide too", function() { + const { container } = render(); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[0]) + ).toEqual(["1"]); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[1]) + ).toEqual(["1", "2", "3"]); + clickNext(container.getElementsByClassName("slick-slider")[1]); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[0]) + ).toEqual(["2"]); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[1]) + ).toEqual(["2", "3", "4"]); + }); + it("Clicking on previous button of first slide should change second slide too", function() { + const { container } = render(); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[0]) + ).toEqual(["1"]); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[1]) + ).toEqual(["1", "2", "3"]); + clickPrevious(container.getElementsByClassName("slick-slider")[0]); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[0]) + ).toEqual(["6"]); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[1]) + ).toEqual(["6", "1", "2"]); + }); + it("Clicking on previous button of second slide should change first slide too", function() { + const { container } = render(); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[0]) + ).toEqual(["1"]); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[1]) + ).toEqual(["1", "2", "3"]); + clickPrevious(container.getElementsByClassName("slick-slider")[1]); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[0]) + ).toEqual(["6"]); + expect( + getActiveSlidesText(container.getElementsByClassName("slick-slider")[1]) + ).toEqual(["6", "1", "2"]); + }); +}); diff --git a/examples/__tests__/AutoPlay.test.js b/examples/__tests__/AutoPlay.test.js new file mode 100644 index 000000000..16c589c7a --- /dev/null +++ b/examples/__tests__/AutoPlay.test.js @@ -0,0 +1,284 @@ +import React from "react"; +import AutoPlay from "../AutoPlay"; +import AutoPlayMethods from "../AutoPlayMethods"; +import { render, fireEvent, waitFor, screen } from "@testing-library/react"; +import { html as beautify_html, js_beautify } from "js-beautify"; +import jest from "jest"; +import { + getActiveSlide, + clickNext, + clickPrevious, + hasClass, + getActiveSlides, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsListItem, + getCurrentSlide, + getSlideHeight +} from "../../test-utils"; + +describe("AutoPlay example", () => { + it("should have 8 slides (3(preclone) + 6(actual) + 3(postclone))", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slide").length).toBe(12); + }); + it("should have 3 clone slides", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-cloned").length).toBe(6); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.querySelectorAll(".slick-slide.slick-current").length + ).toBe(1); + expect(parseInt(getCurrentSlide(container).textContent) - 1).toBe(0); + }); + it("should have 3 active slide", function() { + const { container } = render(); + expect(container.querySelectorAll(".slick-slide.slick-active").length).toBe( + 3 + ); + expect( + Array.from(getActiveSlide(container).children).map( + e => parseInt(e.textContent) - 1 + )[0] + ).toBe(0); + }); + it("should have 6 dots", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-dots")[0].children.length + ).toBe(6); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("2"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("6"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[5] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots button")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + expect(getActiveSlidesCount(container)).toEqual(3); + expect(hasClass(getButtonsListItem(container)[3], "slick-active")).toEqual( + true + ); + }); + it("Should change the active slides automatically", async function() { + const { container } = render(); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + await waitFor( + () => { + expect(getActiveSlidesText(container)).toEqual(["2", "3", "4"]); + }, + { timeout: "3000" } + ); + }); +}); +describe("AutoPlay method example", () => { + it("should have 8 slides (3(preclone) + 6(actual) + 3(postclone))", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slide").length).toBe(12); + }); + it("should have 3 clone slides", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-cloned").length).toBe(6); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.querySelectorAll(".slick-slide.slick-current").length + ).toBe(1); + expect(parseInt(getCurrentSlide(container).textContent) - 1).toBe(0); + }); + it("should have 3 active slide", function() { + const { container } = render(); + expect(container.querySelectorAll(".slick-slide.slick-active").length).toBe( + 3 + ); + expect( + Array.from(getActiveSlide(container).children).map( + e => parseInt(e.textContent) - 1 + )[0] + ).toBe(0); + }); + it("should have 6 dots", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-dots")[0].children.length + ).toBe(6); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("2"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("6"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[5] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots button")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + expect(getActiveSlidesCount(container)).toEqual(3); + expect(hasClass(getButtonsListItem(container)[3], "slick-active")).toEqual( + true + ); + }); + it("Should change the active slides automatically", async function() { + const { container } = render(); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + await waitFor( + () => { + expect(getActiveSlidesText(container)).toEqual(["2", "3", "4"]); + }, + { timeout: "3000" } + ); + }); + it("Shouldn't change the active slides when Paused button is clicked", async function() { + const { container } = render(); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + let button1; + Array.from(container.querySelectorAll(" .button")).forEach(e => + e.textContent === "Pause" ? (button1 = e) : null + ); + fireEvent( + button1, + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + //This will fail as active slides wont change + //await waitFor(()=>{console.log(getActiveSlidesText(container));expect(getActiveSlidesText(container)).toEqual(["3","4","5"]);},{timeout:"10000"}); + await waitFor( + () => { + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + }, + { timeout: "10000" } + ); + }); + it("Should change the active slides when Play button is clicked", async function() { + const { container } = render(); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + let button1; + let button2; + Array.from(container.querySelectorAll(" .button")).forEach(e => + e.textContent === "Pause" + ? (button1 = e) + : e.textContent === "Play" + ? (button2 = e) + : null + ); + fireEvent( + button1, + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + //This will fail as active slides wont change + //await waitFor(()=>{console.log(getActiveSlidesText(container));expect(getActiveSlidesText(container)).toEqual(["3","4","5"]);},{timeout:"10000"}); + await waitFor( + () => { + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + }, + { timeout: "10000" } + ); + fireEvent( + button2, + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + await waitFor( + () => { + expect(getActiveSlidesText(container)).toEqual(["3", "4", "5"]); + }, + { timeout: "10000" } + ); + }); +}); diff --git a/examples/__tests__/CentreMode.test.js b/examples/__tests__/CentreMode.test.js index d2c3c5191..5ccab1f1e 100644 --- a/examples/__tests__/CentreMode.test.js +++ b/examples/__tests__/CentreMode.test.js @@ -17,8 +17,8 @@ describe("CenterMode Tests", () => { let totalSlides = getSlidesCount(container); let clonedSlides = getClonesCount(container); let activeSlides = getActiveSlidesCount(container); - expect(totalSlides).toEqual(16); - expect(clonedSlides).toEqual(10); + expect(totalSlides).toEqual(14); + expect(clonedSlides).toEqual(8); expect(activeSlides).toEqual(3); //expect(beautify_html(toString(container))).toMatchSnapshot(); }); diff --git a/examples/__tests__/CustomArrow.test.js b/examples/__tests__/CustomArrow.test.js new file mode 100644 index 000000000..5394bb574 --- /dev/null +++ b/examples/__tests__/CustomArrow.test.js @@ -0,0 +1,112 @@ +import React from "react"; +import { render, fireEvent } from "@testing-library/react"; +import { + activeSlide, + activeSlides, + clickNext, + clickPrevious, + getActiveButton, + getActiveSlide, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsLength, + getButtonsListItem, + getClonesCount, + getCurrentSlide, + getSlidesCount, + hasClass +} from "../../test-utils"; +import CustomArrows from "../CustomArrows"; +describe("CustomArrow example", () => { + it("should have 8 slides (3(preclone) + 6(actual) + 3(postclone))", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slide").length).toBe(12); + }); + it("should have 3 clone slides", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-cloned").length).toBe(6); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-slide slick-current").length + ).toBe(1); + expect(parseInt(getCurrentSlide(container).textContent) - 1).toBe(0); + }); + it("should have 3 active slide", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-slide slick-active").length + ).toBe(3); + expect( + Array.from(getActiveSlide(container).children).map( + e => parseInt(e.textContent) - 1 + )[0] + ).toBe(0); + }); + it("should have 6 dots", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-dots")[0].children.length + ).toBe(6); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect( + container.getElementsByClassName("slick-slide slick-active")[0] + .textContent + ).toBe("2"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect( + container.getElementsByClassName("slick-slide slick-active")[0] + .textContent + ).toBe("6"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[5] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots button")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + expect(getActiveSlidesCount(container)).toEqual(3); + expect(hasClass(getButtonsListItem(container)[3], "slick-active")).toEqual( + true + ); + }); +}); diff --git a/examples/__tests__/CustomPaging.test.js b/examples/__tests__/CustomPaging.test.js new file mode 100644 index 000000000..c7d7b08d8 --- /dev/null +++ b/examples/__tests__/CustomPaging.test.js @@ -0,0 +1,94 @@ +import React from "react"; +import CustomPaging from "../CustomPaging"; +import { render, fireEvent, waitFor, screen } from "@testing-library/react"; +import { html as beautify_html } from "js-beautify"; +import { + getActiveSlide, + clickNext, + clickPrevious, + hasClass, + getActiveSlides, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsListItem, + getCurrentSlide +} from "../../test-utils"; + +describe("Custom Paging example", () => { + it("should have 13 slides (1(preclone) + 6(actual) + 1(postclone))", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slide").length).toBe(6); + }); + it("should have 3 clone slides", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-cloned").length).toBe(2); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.querySelectorAll(".slick-slide.slick-current").length + ).toBe(1); + }); + it("should have 1 active slide", function() { + const { container } = render(); + expect(container.querySelectorAll(".slick-slide.slick-active").length).toBe( + 1 + ); + }); + it("should have 6 dots", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-dots")[0].children.length + ).toBe(4); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[3] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots a")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesCount(container)).toEqual(1); + expect(hasClass(getButtonsListItem(container)[3], "slick-active")).toEqual( + true + ); + }); +}); diff --git a/examples/__tests__/CustomSlides.js b/examples/__tests__/CustomSlides.js new file mode 100644 index 000000000..a2c3d72f4 --- /dev/null +++ b/examples/__tests__/CustomSlides.js @@ -0,0 +1,135 @@ +import React from "react"; +import SimpleSlider from "../CustomSlides"; +import { render, fireEvent, waitFor, screen } from "@testing-library/react"; +import { html as beautify_html } from "js-beautify"; +import { + getActiveSlide, + clickNext, + clickPrevious, + hasClass, + getActiveSlides, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsListItem, + getCurrentSlide +} from "../../test-utils"; + +describe("Custom Slider example", () => { + it("should have 13 slides (1(preclone) + 6(actual) + 1(postclone))", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slide").length).toBe(8); + }); + it("should have 3 clone slides", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-cloned").length).toBe(2); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.querySelectorAll(".slick-slide.slick-current").length + ).toBe(1); + expect(parseInt(getCurrentSlide(container).textContent) - 1).toBe(0); + }); + it("should have 1 active slide", function() { + const { container } = render(); + expect(container.querySelectorAll(".slick-slide.slick-active").length).toBe( + 1 + ); + expect( + Array.from(getActiveSlide(container).children).map( + e => parseInt(e.textContent) - 1 + )[0] + ).toBe(0); + }); + it("should have 6 dots", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-dots")[0].children.length + ).toBe(6); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("2"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("6"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[5] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots button")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesText(container)[0]).toEqual("4"); + expect(getActiveSlidesCount(container)).toEqual(1); + expect(hasClass(getButtonsListItem(container)[3], "slick-active")).toEqual( + true + ); + }); +}); + +describe("Simple Slider Snapshots", function() { + it("slider initial state", function() { + const { container } = render(); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("click on next button", function() { + const { container } = render(); + clickNext(container); + //expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("click on prev button", function() { + const { container } = render(); + clickPrevious(container); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("click on 3rd dot", function() { + const { container } = render(); + fireEvent( + getButtons(container)[2], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); +}); diff --git a/examples/__tests__/DynamicSlides.test.js b/examples/__tests__/DynamicSlides.test.js new file mode 100644 index 000000000..3148488fc --- /dev/null +++ b/examples/__tests__/DynamicSlides.test.js @@ -0,0 +1,225 @@ +import React from "react"; +import { render, fireEvent } from "@testing-library/react"; +import { html as beautify_html } from "js-beautify"; +import { + activeSlide, + activeSlides, + clickNext, + clickPrevious, + getActiveButton, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsLength, + getButtonsListItem, + getClonesCount, + getCurrentSlide, + getSlidesCount, + hasClass +} from "../../test-utils"; +import DynamicSlides from "../DynamicSlides"; + +describe("Multiple Items", function() { + it("should have 9 actual slides and (3(pre) + 3(post)) clone slides", function() { + const { container } = render(); + expect(getSlidesCount(container)).toEqual(12); + expect(getClonesCount(container)).toEqual(6); + //expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 3 active slides", function() { + const { container } = render(); + expect(getActiveSlidesCount(container)).toEqual(3); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 2 dots", function() { + const { container } = render(); + expect(getButtonsLength(container)).toEqual(2); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show first 3 slides", function() { + const { container } = render(); + expect(getActiveButton(container)).toEqual(["1"]); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides from 4 to 6 when next button is clicked", function() { + const { container } = render(); + clickNext(container); + // Array.from(container.querySelectorAll(".slick-current")).map(e=>console.log(e.textContent)) + expect(getActiveButton(container)).toEqual(["2"]); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show last 3 slides when previous button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect(getActiveButton(container)).toEqual(["2"]); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides first 3 slides when first dot is clicked", function() { + const { container } = render(); + fireEvent( + getButtons(container)[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["1"]); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides from 4 to 6 when last dot is clicked", function() { + const { container } = render(); + fireEvent( + getButtons(container)[1], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["2"]); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 9 actual slides and (3(pre) + 3(post)) clone slides", function() { + const { container } = render(); + fireEvent( + container.getElementsByClassName("button")[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getSlidesCount(container)).toEqual(15); + expect(getClonesCount(container)).toEqual(6); + //expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 3 active slides", function() { + const { container } = render(); + fireEvent( + container.getElementsByClassName("button")[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesCount(container)).toEqual(3); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 3 dots", function() { + const { container } = render(); + fireEvent( + container.getElementsByClassName("button")[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getButtonsLength(container)).toEqual(3); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show first 3 slides", function() { + const { container } = render(); + fireEvent( + container.getElementsByClassName("button")[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["1"]); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides from 4 to 6 when next button is clicked", function() { + const { container } = render(); + fireEvent( + container.getElementsByClassName("button")[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + clickNext(container); + // Array.from(container.querySelectorAll(".slick-current")).map(e=>console.log(e.textContent)) + expect(getActiveButton(container)).toEqual(["2"]); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show last 3 slides when previous button is clicked", function() { + const { container } = render(); + fireEvent( + container.getElementsByClassName("button")[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + clickPrevious(container); + expect(getActiveButton(container)).toEqual(["3"]); + expect(getActiveSlidesText(container)).toEqual(["7", "8", "9"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides first 3 slides when first dot is clicked", function() { + const { container } = render(); + fireEvent( + container.getElementsByClassName("button")[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + fireEvent( + getButtons(container)[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["1"]); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides from 4 to 6 when middle dot is clicked", function() { + const { container } = render(); + fireEvent( + container.getElementsByClassName("button")[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + fireEvent( + getButtons(container)[1], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["2"]); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show last 3 slides when last dot is clicked", function() { + const { container } = render(); + fireEvent( + container.getElementsByClassName("button")[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + fireEvent( + getButtons(container)[2], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["3"]); + expect(getActiveSlidesText(container)).toEqual(["7", "8", "9"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); +}); diff --git a/examples/__tests__/LazyLoad.test.js b/examples/__tests__/LazyLoad.test.js new file mode 100644 index 000000000..a9348d6aa --- /dev/null +++ b/examples/__tests__/LazyLoad.test.js @@ -0,0 +1,94 @@ +import React from "react"; +import LazyLoad from "../LazyLoad"; +import { render, fireEvent, waitFor, screen } from "@testing-library/react"; +import { html as beautify_html } from "js-beautify"; +import { + getActiveSlide, + clickNext, + clickPrevious, + hasClass, + getActiveSlides, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsListItem, + getCurrentSlide +} from "../../test-utils"; + +describe("Custom Paging example", () => { + it("should have 13 slides (1(preclone) + 6(actual) + 1(postclone))", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slide").length).toBe(6); + }); + it("should have 3 clone slides", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-cloned").length).toBe(2); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.querySelectorAll(".slick-slide.slick-current").length + ).toBe(1); + }); + it("should have 1 active slide", function() { + const { container } = render(); + expect(container.querySelectorAll(".slick-slide.slick-active").length).toBe( + 1 + ); + }); + it("should have 6 dots", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-dots")[0].children.length + ).toBe(4); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[3] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots button")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesCount(container)).toEqual(1); + expect(hasClass(getButtonsListItem(container)[3], "slick-active")).toEqual( + true + ); + }); +}); diff --git a/examples/__tests__/MultipleItems.test.js b/examples/__tests__/MultipleItems.test.js index 1adc83daa..334929811 100644 --- a/examples/__tests__/MultipleItems.test.js +++ b/examples/__tests__/MultipleItems.test.js @@ -20,10 +20,10 @@ import { import MultipleItems from "../MultipleItems"; describe("Multiple Items", function() { - it("should have 9 actual slides and (3(pre) + 9(post)) clone slides", function() { + it("should have 9 actual slides and (3(pre) + 3(post)) clone slides", function() { const { container } = render(); - expect(getSlidesCount(container)).toEqual(21); - expect(getClonesCount(container)).toEqual(12); + expect(getSlidesCount(container)).toEqual(15); + expect(getClonesCount(container)).toEqual(6); //expect(beautify_html(toString(container))).toMatchSnapshot(); }); it("should have 3 active slides", function() { diff --git a/examples/__tests__/MultipleRows.test.js b/examples/__tests__/MultipleRows.test.js new file mode 100644 index 000000000..84a89314f --- /dev/null +++ b/examples/__tests__/MultipleRows.test.js @@ -0,0 +1,60 @@ +import React from "react"; +import { render, fireEvent } from "@testing-library/react"; +import { html as beautify_html } from "js-beautify"; +import { + activeSlide, + activeSlides, + clickNext, + clickPrevious, + getActiveButton, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsLength, + getButtonsListItem, + getClonesCount, + getCurrentSlide, + getSlidesCount, + hasClass +} from "../../test-utils"; +import MultipleRows from "../MultipleRows"; + +describe("Multiple Items", function() { + it("should have 9 actual slides and (3(pre) + 3(post)) clone slides", function() { + const { container } = render(); + expect(getSlidesCount(container)).toEqual(12); + expect(getClonesCount(container)).toEqual(8); + //expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 3 active slides", function() { + const { container } = render(); + expect(getActiveSlidesCount(container)).toEqual(3); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show first 3 slides", function() { + const { container } = render(); + expect(getActiveSlidesText(container)).toEqual([ + "13141516", + "1234", + "5678" + ]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides from 4 to 6 when next button is clicked", function() { + const { container } = render(); + clickNext(container); + // Array.from(container.querySelectorAll(".slick-current")).map(e=>console.log(e.textContent)) + expect(getActiveSlidesText(container)).toEqual(["1234", "5678", "9101112"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show last 3 slides when previous button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect(getActiveSlidesText(container)).toEqual([ + "9101112", + "13141516", + "1234" + ]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); +}); diff --git a/examples/__tests__/PauseOnHover.test.js b/examples/__tests__/PauseOnHover.test.js new file mode 100644 index 000000000..461945682 --- /dev/null +++ b/examples/__tests__/PauseOnHover.test.js @@ -0,0 +1,118 @@ +import React from "react"; +import PauseOnHover from "../PauseOnHover"; +import { render, fireEvent, waitFor, screen } from "@testing-library/react"; +import { html as beautify_html, js_beautify } from "js-beautify"; +import jest from "jest"; +import { + getActiveSlide, + clickNext, + clickPrevious, + hasClass, + getActiveSlides, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsListItem, + getCurrentSlide, + getSlideHeight +} from "../../test-utils"; +describe("Pause On Hover example", () => { + it("should have 8 slides (3(preclone) + 6(actual) + 3(postclone))", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slide").length).toBe(12); + }); + it("should have 3 clone slides", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-cloned").length).toBe(6); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.querySelectorAll(".slick-slide.slick-current").length + ).toBe(1); + expect(parseInt(getCurrentSlide(container).textContent) - 1).toBe(0); + }); + it("should have 3 active slide", function() { + const { container } = render(); + expect(container.querySelectorAll(".slick-slide.slick-active").length).toBe( + 3 + ); + expect( + Array.from(getActiveSlide(container).children).map( + e => parseInt(e.textContent) - 1 + )[0] + ).toBe(0); + }); + it("should have 6 dots", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-dots")[0].children.length + ).toBe(6); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("2"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("6"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[5] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots button")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + expect(getActiveSlidesCount(container)).toEqual(3); + expect(hasClass(getButtonsListItem(container)[3], "slick-active")).toEqual( + true + ); + }); + it("Should change the active slides automatically", async function() { + const { container } = render(); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + await waitFor( + () => { + expect(getActiveSlidesText(container)).toEqual(["2", "3", "4"]); + }, + { timeout: "3000" } + ); + }); +}); diff --git a/examples/__tests__/PreviousNextMethods.test.js b/examples/__tests__/PreviousNextMethods.test.js new file mode 100644 index 000000000..670a1b7a1 --- /dev/null +++ b/examples/__tests__/PreviousNextMethods.test.js @@ -0,0 +1,146 @@ +import React from "react"; +import PreviousNextMethods from "../PreviousNextMethods"; +import { render, fireEvent, waitFor, screen } from "@testing-library/react"; +import { html as beautify_html } from "js-beautify"; +import { + getActiveSlide, + clickNext, + clickPrevious, + hasClass, + getActiveSlides, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsListItem, + getCurrentSlide +} from "../../test-utils"; + +describe("SimpleSlider example", () => { + it("should have 13 slides (1(preclone) + 6(actual) + 1(postclone))", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slide").length).toBe(8); + }); + it("should have 3 clone slides", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-cloned").length).toBe(2); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.querySelectorAll(".slick-slide.slick-current").length + ).toBe(1); + expect(parseInt(getCurrentSlide(container).textContent) - 1).toBe(0); + }); + it("should have 1 active slide", function() { + const { container } = render(); + expect(container.querySelectorAll(".slick-slide.slick-active").length).toBe( + 1 + ); + expect( + Array.from(getActiveSlide(container).children).map( + e => parseInt(e.textContent) - 1 + )[0] + ).toBe(0); + }); + it("should have 6 dots", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-dots")[0].children.length + ).toBe(6); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("2"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("6"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[5] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots button")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesText(container)[0]).toEqual("4"); + expect(getActiveSlidesCount(container)).toEqual(1); + expect(hasClass(getButtonsListItem(container)[3], "slick-active")).toEqual( + true + ); + }); + + // it("should got to next slide when next button is clicked", function() { + // const { container } = render(); + // Array.from(container.getElementsByClassName("button")).forEach(e=>e.textContent==="Next"?fireEvent( + // e, + // new MouseEvent("click", { + // bubbles: true, + // cancelable: true + // }) + // ):null) + // expect( + // container.querySelectorAll(".slick-slide.slick-active")[0].textContent + // ).toBe("2"); + // expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + // 1 + // ); + // expect( + // container.querySelectorAll(".slick-dots")[0].children[1] + // ).toHaveClass("slick-active"); + // }); + // it("should goto previous slide when prev button is clicked", function() { + // const { container } = render(); + // Array.from(container.getElementsByClassName("button")).forEach(e=>e.textContent==="Previous"?fireEvent( + // e, + // new MouseEvent("click", { + // bubbles: true, + // cancelable: true + // }) + // ):null) + // expect( + // container.querySelectorAll(".slick-slide.slick-active")[0].textContent + // ).toBe("6"); + // expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + // 1 + // ); + // expect( + // container.querySelectorAll(".slick-dots")[0].children[5] + // ).toHaveClass("slick-active"); + // }); +}); diff --git a/examples/__tests__/Resizeable.test.js b/examples/__tests__/Resizeable.test.js new file mode 100644 index 000000000..9327a3313 --- /dev/null +++ b/examples/__tests__/Resizeable.test.js @@ -0,0 +1,109 @@ +import React from "react"; +import Resizable from "../Resizable"; +import { render, fireEvent, waitFor, screen } from "@testing-library/react"; +import { html as beautify_html, js_beautify } from "js-beautify"; +import jest from "jest"; +import { + getActiveSlide, + clickNext, + clickPrevious, + hasClass, + getActiveSlides, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsListItem, + getCurrentSlide, + getSlideHeight +} from "../../test-utils"; + +describe("Resizeable example", () => { + it("should have 8 slides (3(preclone) + 6(actual) + 3(postclone))", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slide").length).toBe(12); + }); + it("should have 3 clone slides", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-cloned").length).toBe(6); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.querySelectorAll(".slick-slide.slick-current").length + ).toBe(1); + expect(parseInt(getCurrentSlide(container).textContent) - 1).toBe(0); + }); + it("should have 3 active slide", function() { + const { container } = render(); + expect(container.querySelectorAll(".slick-slide.slick-active").length).toBe( + 3 + ); + expect( + Array.from(getActiveSlide(container).children).map( + e => parseInt(e.textContent) - 1 + )[0] + ).toBe(0); + }); + it("should have 6 dots", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-dots")[0].children.length + ).toBe(6); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("2"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("6"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[5] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots button")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + expect(getActiveSlidesCount(container)).toEqual(3); + expect(hasClass(getButtonsListItem(container)[3], "slick-active")).toEqual( + true + ); + }); +}); diff --git a/examples/__tests__/Responsive.test.js b/examples/__tests__/Responsive.test.js new file mode 100644 index 000000000..206009688 --- /dev/null +++ b/examples/__tests__/Responsive.test.js @@ -0,0 +1,85 @@ +import React from "react"; +import { render, fireEvent } from "@testing-library/react"; +import { html as beautify_html } from "js-beautify"; +import { + activeSlide, + activeSlides, + clickNext, + clickPrevious, + getActiveButton, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsLength, + getButtonsListItem, + getClonesCount, + getCurrentSlide, + getSlidesCount, + hasClass +} from "../../test-utils"; +import Responsive from "../Responsive"; + +describe("Responsive Items", function() { + it("should have 8 actual slides", function() { + const { container } = render(); + expect(getSlidesCount(container)).toEqual(8); + //expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 4 active slides", function() { + const { container } = render(); + expect(getActiveSlidesCount(container)).toEqual(4); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 2 dots", function() { + const { container } = render(); + expect(getButtonsLength(container)).toEqual(2); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show first 4 slides", function() { + const { container } = render(); + expect(getActiveButton(container)).toEqual(["1"]); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3", "4"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides from 5 to 8 when next button is clicked", function() { + const { container } = render(); + clickNext(container); + // Array.from(container.querySelectorAll(".slick-current")).map(e=>console.log(e.textContent)) + expect(getActiveButton(container)).toEqual(["2"]); + expect(getActiveSlidesText(container)).toEqual(["5", "6", "7", "8"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show first 4 slides when previous button is clicked from last 4 slides", function() { + const { container } = render(); + clickPrevious(container); + expect(getActiveButton(container)).toEqual(["1"]); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3", "4"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides first 4 slides when first dot is clicked", function() { + const { container } = render(); + fireEvent( + getButtons(container)[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["1"]); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3", "4"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides from 5 to 6 when second dot is clicked", function() { + const { container } = render(); + fireEvent( + getButtons(container)[1], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["2"]); + expect(getActiveSlidesText(container)).toEqual(["5", "6", "7", "8"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); +}); diff --git a/examples/__tests__/Rtl.test.js b/examples/__tests__/Rtl.test.js new file mode 100644 index 000000000..49e7e9762 --- /dev/null +++ b/examples/__tests__/Rtl.test.js @@ -0,0 +1,119 @@ +import React from "react"; +import Rtl from "../Rtl"; +import { render, fireEvent, waitFor, screen } from "@testing-library/react"; +import { html as beautify_html, js_beautify } from "js-beautify"; +import jest from "jest"; +import { + getActiveSlide, + clickNext, + clickPrevious, + hasClass, + getActiveSlides, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsListItem, + getCurrentSlide, + getSlideHeight +} from "../../test-utils"; + +describe.skip("Right To Left example", () => { + it("should have 8 slides (3(preclone) + 6(actual) + 3(postclone))", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-slide").length).toBe(12); + }); + it("should have 3 clone slides", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-cloned").length).toBe(6); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.querySelectorAll(".slick-slide.slick-current").length + ).toBe(1); + expect(parseInt(getCurrentSlide(container).textContent) - 1).toBe(0); + }); + it("should have 3 active slide", function() { + const { container } = render(); + expect(container.querySelectorAll(".slick-slide.slick-active").length).toBe( + 3 + ); + expect( + Array.from(getActiveSlide(container).children).map( + e => parseInt(e.textContent) - 1 + )[0] + ).toBe(0); + }); + it("should have 6 dots", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-dots")[0].children.length + ).toBe(6); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("2"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("6"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[5] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots button")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + expect(getActiveSlidesCount(container)).toEqual(3); + expect(hasClass(getButtonsListItem(container)[3], "slick-active")).toEqual( + true + ); + }); + it("Should change the active slides automatically", async function() { + const { container } = render(); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + await waitFor( + () => { + expect(getActiveSlidesText(container)).toEqual(["2", "3", "4"]); + }, + { timeout: "3000" } + ); + }); +}); diff --git a/examples/__tests__/SimpleSlider.test.js b/examples/__tests__/SimpleSlider.test.js index 71402cbbb..1289ffaff 100644 --- a/examples/__tests__/SimpleSlider.test.js +++ b/examples/__tests__/SimpleSlider.test.js @@ -16,13 +16,13 @@ import { } from "../../test-utils"; describe("SimpleSlider example", () => { - it("should have 13 slides (1(preclone) + 6(actual) + 6(postclone))", function() { + it("should have 13 slides (1(preclone) + 6(actual) + 1(postclone))", function() { const { container } = render(); - expect(container.getElementsByClassName("slick-slide").length).toBe(13); + expect(container.getElementsByClassName("slick-slide").length).toBe(8); }); - it("should have 7 clone slides", function() { + it("should have 3 clone slides", function() { const { container } = render(); - expect(container.getElementsByClassName("slick-cloned").length).toBe(7); + expect(container.getElementsByClassName("slick-cloned").length).toBe(2); }); it("should have 1 current slide", function() { const { container } = render(); diff --git a/examples/__tests__/SwipeToSlide.test.js b/examples/__tests__/SwipeToSlide.test.js new file mode 100644 index 000000000..2bdbdb2ef --- /dev/null +++ b/examples/__tests__/SwipeToSlide.test.js @@ -0,0 +1,52 @@ +import React from "react"; +import { render, fireEvent } from "@testing-library/react"; +import { html as beautify_html } from "js-beautify"; +import { + activeSlide, + activeSlides, + clickNext, + clickPrevious, + getActiveButton, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsLength, + getButtonsListItem, + getClonesCount, + getCurrentSlide, + getSlidesCount, + hasClass +} from "../../test-utils"; +import SwipeToSlide from "../SwipeToSlide"; + +describe("Multiple Items", function() { + it("should have 9 actual slides and (3(pre) + 3(post)) clone slides", function() { + const { container } = render(); + expect(getSlidesCount(container)).toEqual(19); + expect(getClonesCount(container)).toEqual(10); + //expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 5 active slides", function() { + const { container } = render(); + expect(getActiveSlidesCount(container)).toEqual(5); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show first 5 slides", function() { + const { container } = render(); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3", "4", "5"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides from 2 to 6 when next button is clicked", function() { + const { container } = render(); + clickNext(container); + // Array.from(container.querySelectorAll(".slick-current")).map(e=>console.log(e.textContent))x + expect(getActiveSlidesText(container)).toEqual(["2", "3", "4", "5", "6"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show last 5 slides when previous button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect(getActiveSlidesText(container)).toEqual(["9", "1", "2", "3", "4"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); +}); diff --git a/examples/__tests__/UnevenSets.test.js b/examples/__tests__/UnevenSets.test.js index eff2f9dcf..0f4ed92a9 100644 --- a/examples/__tests__/UnevenSets.test.js +++ b/examples/__tests__/UnevenSets.test.js @@ -82,8 +82,8 @@ describe("UnevenSets Infinite", () => { let clonedSlides = getClonesCount(container); let activeSlides = getActiveSlidesCount(container); let dots = getButtonsLength(container); - expect(totalSlides).toEqual(16); - expect(clonedSlides).toEqual(10); + expect(totalSlides).toEqual(14); + expect(clonedSlides).toEqual(8); expect(activeSlides).toEqual(4); expect(dots).toEqual(2); // expect(beautify_html(toString(container))).toMatchSnapshot(); diff --git a/examples/__tests__/VariableWidth.test.js b/examples/__tests__/VariableWidth.test.js new file mode 100644 index 000000000..b186b6a9c --- /dev/null +++ b/examples/__tests__/VariableWidth.test.js @@ -0,0 +1,107 @@ +import React from "react"; +import VariableWidth from "../VariableWidth"; +import { render, fireEvent, waitFor, screen } from "@testing-library/react"; +import { html as beautify_html } from "js-beautify"; +import { + getActiveSlide, + clickNext, + clickPrevious, + hasClass, + getActiveSlides, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsListItem, + getCurrentSlide +} from "../../test-utils"; + +describe("Variable Width example", () => { + it("should have 10 slides (2(preclone) + 6(actual) + 2(postclone))", function() { + const { container } = render(); + //Should be 10 + expect(container.getElementsByClassName("slick-slide").length).toBe(18); + }); + it("should have 4 clone slides", function() { + const { container } = render(); + //Should be 4 + expect(container.getElementsByClassName("slick-cloned").length).toBe(12); + }); + it("should have 1 current slide", function() { + const { container } = render(); + expect( + container.querySelectorAll(".slick-slide.slick-current").length + ).toBe(1); + expect(getCurrentSlide(container).textContent).toBe("100"); + }); + it("should have 1 active slide", function() { + const { container } = render(); + expect(container.querySelectorAll(".slick-slide.slick-active").length).toBe( + 1 + ); + expect( + Array.from(getActiveSlide(container).children).map(e => e.textContent)[0] + ).toBe("100"); + }); + it("should have 6 dots", function() { + const { container } = render(); + expect( + container.getElementsByClassName("slick-dots")[0].children.length + ).toBe(6); + }); + it("should have 1 active dot", function() { + const { container } = render(); + + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + }); + it("should have a prev arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-prev").length).toBe(1); + }); + it("should have a next arrow", function() { + const { container } = render(); + expect(container.getElementsByClassName("slick-next").length).toBe(1); + }); + it("should got to next slide when next button is clicked", function() { + const { container } = render(); + clickNext(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("200"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[1] + ).toHaveClass("slick-active"); + }); + it("should goto previous slide when prev button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect( + container.querySelectorAll(".slick-slide.slick-active")[0].textContent + ).toBe("175"); + expect(container.querySelectorAll(".slick-dots .slick-active").length).toBe( + 1 + ); + expect( + container.querySelectorAll(".slick-dots")[0].children[5] + ).toHaveClass("slick-active"); + }); + it("should goto 4th slide when 4th dot is clicked", function() { + const { container } = render(); + fireEvent( + container.querySelectorAll(".slick-dots button")[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveSlidesText(container)[0]).toEqual("300"); + expect(getActiveSlidesCount(container)).toEqual(1); + expect(hasClass(getButtonsListItem(container)[3], "slick-active")).toEqual( + true + ); + }); +}); diff --git a/examples/__tests__/VerticleSets.test.js b/examples/__tests__/VerticleSets.test.js new file mode 100644 index 000000000..a643a2596 --- /dev/null +++ b/examples/__tests__/VerticleSets.test.js @@ -0,0 +1,179 @@ +import React from "react"; +import { render, fireEvent } from "@testing-library/react"; +import VerticleMode from "../VerticalMode"; +import VerticalSwipeToSlide from "../VerticalSwipeToSlide"; +import { html as beautify_html } from "js-beautify"; +import { + activeSlide, + activeSlides, + clickNext, + clickPrevious, + getActiveButton, + getActiveSlidesCount, + getActiveSlidesText, + getButtons, + getButtonsLength, + getButtonsListItem, + getClonesCount, + getCurrentSlide, + getSlidesCount, + hasClass +} from "../../test-utils"; + +describe("Verticle Mode testing", function() { + it("should have 9 actual slides and (1(pre) + 1(post)) clone slides", function() { + const { container } = render(); + expect(getSlidesCount(container)).toEqual(12); + expect(getClonesCount(container)).toEqual(6); + //expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 3 active slides", function() { + const { container } = render(); + expect(getActiveSlidesCount(container)).toEqual(3); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 3 dots", function() { + const { container } = render(); + expect(getButtonsLength(container)).toEqual(6); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show first 3 slides", function() { + const { container } = render(); + expect(getActiveButton(container)).toEqual(["1"]); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides from 4 to 6 when next button is clicked", function() { + const { container } = render(); + clickNext(container); + // Array.from(container.querySelectorAll(".slick-current")).map(e=>console.log(e.textContent)) + expect(getActiveButton(container)).toEqual(["2"]); + expect(getActiveSlidesText(container)).toEqual(["2", "3", "4"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show last 3 slides when previous button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect(getActiveButton(container)).toEqual(["6"]); + expect(getActiveSlidesText(container)).toEqual(["6", "1", "2"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides first 3 slides when first dot is clicked", function() { + const { container } = render(); + fireEvent( + getButtons(container)[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["1"]); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides from 4 to 6 when fourth dot is clicked", function() { + const { container } = render(); + fireEvent( + getButtons(container)[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["4"]); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show last 3 slides when last dot is clicked", function() { + const { container } = render(); + fireEvent( + getButtons(container)[5], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["6"]); + expect(getActiveSlidesText(container)).toEqual(["6", "1", "2"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); +}); + +describe("VerticleSwipeToSlide Mode testing", function() { + it("should have 9 actual slides and (1(pre) + 1(post)) clone slides", function() { + const { container } = render(); + expect(getSlidesCount(container)).toEqual(12); + expect(getClonesCount(container)).toEqual(6); + //expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 3 active slides", function() { + const { container } = render(); + expect(getActiveSlidesCount(container)).toEqual(3); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should have 3 dots", function() { + const { container } = render(); + expect(getButtonsLength(container)).toEqual(6); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show first 3 slides", function() { + const { container } = render(); + expect(getActiveButton(container)).toEqual(["1"]); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides from 4 to 6 when next button is clicked", function() { + const { container } = render(); + clickNext(container); + // Array.from(container.querySelectorAll(".slick-current")).map(e=>console.log(e.textContent)) + expect(getActiveButton(container)).toEqual(["2"]); + expect(getActiveSlidesText(container)).toEqual(["2", "3", "4"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show last 3 slides when previous button is clicked", function() { + const { container } = render(); + clickPrevious(container); + expect(getActiveButton(container)).toEqual(["6"]); + expect(getActiveSlidesText(container)).toEqual(["6", "1", "2"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides first 3 slides when first dot is clicked", function() { + const { container } = render(); + fireEvent( + getButtons(container)[0], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["1"]); + expect(getActiveSlidesText(container)).toEqual(["1", "2", "3"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show slides from 4 to 6 when fourth dot is clicked", function() { + const { container } = render(); + fireEvent( + getButtons(container)[3], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["4"]); + expect(getActiveSlidesText(container)).toEqual(["4", "5", "6"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); + it("should show last 3 slides when last dot is clicked", function() { + const { container } = render(); + fireEvent( + getButtons(container)[5], + new MouseEvent("click", { + bubbles: true, + cancelable: true + }) + ); + expect(getActiveButton(container)).toEqual(["6"]); + expect(getActiveSlidesText(container)).toEqual(["6", "1", "2"]); + // expect(beautify_html(toString(container))).toMatchSnapshot(); + }); +}); diff --git a/package.json b/package.json index 6425e7f7d..93a283abf 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "react": "^18.0.0", "react-dom": "^18.0.0", "sinon": "^2.1.0", - "slick-carousel": "^1.8.1", + "slick-carousel": "^1.6.0", "style-loader": "^0.16.1", "uglifyjs-webpack-plugin": "^2.0.1", "webpack": "^4.21.0", @@ -84,6 +84,7 @@ "@testing-library/user-event": "^14.3.0", "classnames": "^2.2.5", "enquire.js": "^2.1.6", + "jquery": "^3.7.0", "json2mq": "^0.2.0", "lodash.debounce": "^4.0.8", "resize-observer-polyfill": "^1.5.0" diff --git a/src/dots.js b/src/dots.js index 93520cbd7..05b3feb50 100644 --- a/src/dots.js +++ b/src/dots.js @@ -2,7 +2,12 @@ import React from "react"; import classnames from "classnames"; -import { clamp } from "./utils/innerSliderUtils"; +import { + clamp, + dotClicked, + getActiveParentTagName, + x +} from "./utils/innerSliderUtils"; const getDotCount = spec => { let dots; @@ -23,7 +28,31 @@ export class Dots extends React.PureComponent { // In Autoplay the focus stays on clicked button even after transition // to next slide. That only goes away by click somewhere outside e.preventDefault(); + if (this.props.autoplay && this.props.autoplaying === "playing") { + this.props.pauseHandler("paused"); + } this.props.clickHandler(options); + document.activeElement.addEventListener("blur", () => { + if ( + !dotClicked() && + this.props.autoplay && + this.props.autoplaying === "paused" + ) { + this.props.autoPlayHandler("play"); + } + }); + window.addEventListener("blur", e => { + if (dotClicked()) { + this.props.pauseHandler("paused"); + } + }); + window.addEventListener("focus", e => { + if (this.props.autoplay && this.props.autoplaying === "paused") { + this.props.pauseHandler("paused"); + } else if (this.props.autoplay) { + this.props.autoPlayHandler("play"); + } + }); } render() { const { diff --git a/src/inner-slider.js b/src/inner-slider.js index b477bc2d1..305526205 100644 --- a/src/inner-slider.js +++ b/src/inner-slider.js @@ -19,7 +19,9 @@ import { getPreClones, getPostClones, getTrackLeft, - getTrackCSS + getTrackCSS, + dotClicked, + x } from "./utils/innerSliderUtils"; import { Track } from "./track"; @@ -148,7 +150,9 @@ export class InnerSlider extends React.Component { React.Children.count(prevProps.children) ); } - + dotReferenceHandler = ref => { + this.Dotcollection = ref; + }; componentDidUpdate = prevProps => { this.checkImagesLoad(); this.props.onReInit && this.props.onReInit(); @@ -433,7 +437,9 @@ export class InnerSlider extends React.Component { } else { this.slideHandler(targetSlide); } - this.props.autoplay && this.autoPlay("update"); + if (this.props.autoPlay && this.state.autoplaying !== "playing") { + this.props.autoplay && this.autoPlay("update"); + } if (this.props.focusOnSelect) { const nodes = this.list.querySelectorAll(".slick-current"); nodes[0] && nodes[0].focus(); @@ -669,17 +675,21 @@ export class InnerSlider extends React.Component { "children", "customPaging", "infinite", - "appendDots" + "appendDots", + "autoplay", + "autoplaying" ]); const { pauseOnDotsHover } = this.props; dotProps = { ...dotProps, + autoPlayHandler: this.autoPlay, + pauseHandler: this.pause, clickHandler: this.changeSlide, onMouseEnter: pauseOnDotsHover ? this.onDotsLeave : null, onMouseOver: pauseOnDotsHover ? this.onDotsOver : null, onMouseLeave: pauseOnDotsHover ? this.onDotsLeave : null }; - dots = ; + dots = ; } var prevArrow, nextArrow; diff --git a/src/track.js b/src/track.js index f8924c826..68b17f4a3 100644 --- a/src/track.js +++ b/src/track.js @@ -5,7 +5,8 @@ import classnames from "classnames"; import { lazyStartIndex, lazyEndIndex, - getPreClones + getPreClones, + getPostClones } from "./utils/innerSliderUtils"; // given specifications/props for a slide, fetch all the classes that need to be applied to the slide @@ -18,7 +19,8 @@ const getSlideClasses = spec => { } else { index = spec.index; } - slickCloned = index < 0 || index >= spec.slideCount; + slickCloned = + (index < spec.slidesToShow && index < 0) || index >= spec.slideCount; if (spec.centerMode) { centerOffset = Math.floor(spec.slidesToShow / 2); slickCenter = (index - spec.currentSlide) % spec.slideCount === 0; @@ -163,9 +165,12 @@ const renderSlides = spec => { }) ); } - - if (childrenCount !== spec.slidesToShow) { - key = childrenCount + index; + let postCloneNo = index; + if ( + postCloneNo < getPostClones(spec) && + childrenCount !== spec.slidesToShow + ) { + key = postCloneNo + childrenCount; if (key < endIndex) { child = elem; } diff --git a/src/utils/innerSliderUtils.js b/src/utils/innerSliderUtils.js index c06029d0a..18b818ee4 100644 --- a/src/utils/innerSliderUtils.js +++ b/src/utils/innerSliderUtils.js @@ -6,10 +6,10 @@ export function clamp(number, lowerBound, upperBound) { export const safePreventDefault = event => { const passiveEvents = ["onTouchStart", "onTouchMove", "onWheel"]; - if(!passiveEvents.includes(event._reactName)) { + if (!passiveEvents.includes(event._reactName)) { event.preventDefault(); } -} +}; export const getOnDemandLazySlides = spec => { let onDemandSlides = []; @@ -33,7 +33,7 @@ export const getRequiredLazySlides = spec => { } return requiredSlides; }; - +export let x = 0; // startIndex that needs to be present export const lazyStartIndex = spec => spec.currentSlide - lazySlidesOnLeft(spec); @@ -97,7 +97,22 @@ export const canGoNext = spec => { } return canGo; }; - +export const getActiveElement = () => { + return document.activeElement; +}; +export const getActiveParentTagName = () => { + return getActiveElement().parentElement.tagName; +}; +export const getActiveParentClassName = () => { + return getActiveElement().parentElement.classList.value; +}; +export const dotClicked = () => { + return ( + getActiveElement().tagName === "BUTTON" && + getActiveParentTagName() === "LI" && + getActiveParentClassName() === "slick-active" + ); +}; // given an object and a list of keys, return new object with given keys export const extractObject = (spec, keys) => { let newObject = {}; @@ -386,9 +401,12 @@ export const swipeMove = (e, spec) => { let touchSwipeLength = touchObject.swipeLength; if (!infinite) { if ( - (currentSlide === 0 && (swipeDirection === "right" || swipeDirection === "down")) || - (currentSlide + 1 >= dotCount && (swipeDirection === "left" || swipeDirection === "up")) || - (!canGoNext(spec) && (swipeDirection === "left" || swipeDirection === "up")) + (currentSlide === 0 && + (swipeDirection === "right" || swipeDirection === "down")) || + (currentSlide + 1 >= dotCount && + (swipeDirection === "left" || swipeDirection === "up")) || + (!canGoNext(spec) && + (swipeDirection === "left" || swipeDirection === "up")) ) { touchSwipeLength = touchObject.swipeLength * edgeFriction; if (edgeDragged === false && onEdge) { @@ -784,7 +802,10 @@ export const getPostClones = spec => { if (spec.unslick || !spec.infinite) { return 0; } - return spec.slideCount; + if (spec.variableWidth) { + return spec.slideCount; + } + return spec.slidesToShow + (spec.centerMode ? 1 : 0); }; export const getTotalSlides = spec =>