1
import { test, expect } from "@playwright/experimental-ct-svelte";
2
import type { Page, Locator } from "@playwright/test";
3
import Slider from "./Index.svelte";
4
import { spy } from "tinyspy";
6
import type { LoadingStatus } from "@gradio/statustracker";
8
const loading_status: LoadingStatus = {
13
scroll_to_output: false,
19
//taken from: https://github.com/microsoft/playwright/issues/20032
20
async function changeSlider(
24
targetPercentage: number
26
const thumbBoundingBox = await thumb.boundingBox();
27
const sliderBoundingBox = await slider.boundingBox();
29
if (thumbBoundingBox === null || sliderBoundingBox === null) {
30
return; // NOTE it's probably better to throw an error here
33
// Start from the middle of the slider's thumb
35
x: thumbBoundingBox.x + thumbBoundingBox.width / 2,
36
y: thumbBoundingBox.y + thumbBoundingBox.height / 2
39
// Slide it to some endpoint determined by the target percentage
41
x: sliderBoundingBox.x + sliderBoundingBox.width * targetPercentage,
42
y: thumbBoundingBox.y + thumbBoundingBox.height / 2
45
await page.mouse.move(startPoint.x, startPoint.y);
46
await page.mouse.down();
47
await page.mouse.move(endPoint.x, endPoint.y);
48
await page.mouse.up();
51
test("Slider Default Value And Label rendered", async ({ mount }) => {
52
const component = await mount(Slider, {
61
loading_status: loading_status,
67
await expect(component).toContainText("My Slider");
70
component.getByRole("spinbutton", {
76
test("Slider respects show_label", async ({ mount, page }) => {
77
const component = await mount(Slider, {
86
loading_status: loading_status,
92
await expect(component.getByTestId("block-title")).toBeHidden();
95
test("Slider Maximum/Minimum values", async ({ mount, page }) => {
96
const component = await mount(Slider, {
105
loading_status: loading_status,
112
const sliderNumberInput = component.getByRole("spinbutton", {
116
await expect(sliderNumberInput).toHaveValue("3");
118
await sliderNumberInput.press("ArrowUp");
120
await expect(sliderNumberInput).toHaveValue("4");
122
const sliderRangeInput = component.getByRole("slider");
124
await sliderRangeInput.focus();
126
sliderRangeInput.press("ArrowRight");
128
await expect(sliderNumberInput).toHaveValue("5");
130
changeSlider(page, sliderRangeInput, sliderRangeInput, 2);
132
await expect(sliderNumberInput).toHaveValue("10");
135
test("Slider Change event", async ({ mount, page }) => {
141
function event(name: "change" | "release") {
145
const component = await mount(Slider, {
154
loading_status: loading_status,
161
const sliderNumberInput = component.getByRole("spinbutton", {
165
const sliderRangeInput = component.getByRole("slider");
167
await expect(sliderNumberInput).toHaveValue("3");
169
await changeSlider(page, sliderRangeInput, sliderRangeInput, 0.7);
171
await expect(sliderNumberInput).toHaveValue("7");
173
// More than one change event and one release event.
174
await expect(events.change).toBeGreaterThanOrEqual(1);
175
await expect(events.release).toBeGreaterThanOrEqual(1);