|
import { test, expect } from "@playwright/experimental-ct-svelte"; |
|
import type { Page, Locator } from "@playwright/test"; |
|
import Slider from "./Index.svelte"; |
|
import { spy } from "tinyspy"; |
|
|
|
import type { LoadingStatus } from "@gradio/statustracker"; |
|
|
|
const loading_status: LoadingStatus = { |
|
eta: 0, |
|
queue_position: 1, |
|
queue_size: 1, |
|
status: "complete", |
|
scroll_to_output: false, |
|
visible: true, |
|
fn_index: 0, |
|
show_progress: "full" |
|
}; |
|
|
|
|
|
async function changeSlider( |
|
page: Page, |
|
thumb: Locator, |
|
slider: Locator, |
|
targetPercentage: number |
|
) { |
|
const thumbBoundingBox = await thumb.boundingBox(); |
|
const sliderBoundingBox = await slider.boundingBox(); |
|
|
|
if (thumbBoundingBox === null || sliderBoundingBox === null) { |
|
return; |
|
} |
|
|
|
|
|
const startPoint = { |
|
x: thumbBoundingBox.x + thumbBoundingBox.width / 2, |
|
y: thumbBoundingBox.y + thumbBoundingBox.height / 2 |
|
}; |
|
|
|
|
|
const endPoint = { |
|
x: sliderBoundingBox.x + sliderBoundingBox.width * targetPercentage, |
|
y: thumbBoundingBox.y + thumbBoundingBox.height / 2 |
|
}; |
|
|
|
await page.mouse.move(startPoint.x, startPoint.y); |
|
await page.mouse.down(); |
|
await page.mouse.move(endPoint.x, endPoint.y); |
|
await page.mouse.up(); |
|
} |
|
|
|
test("Slider Default Value And Label rendered", async ({ mount }) => { |
|
const component = await mount(Slider, { |
|
props: { |
|
value: 3, |
|
minimum: 0, |
|
maximum: 10, |
|
label: "My Slider", |
|
show_label: true, |
|
step: 1, |
|
interactive: true, |
|
loading_status: loading_status, |
|
gradio: { |
|
dispatch() {} |
|
} |
|
} |
|
}); |
|
await expect(component).toContainText("My Slider"); |
|
|
|
expect( |
|
component.getByRole("spinbutton", { |
|
name: "My Slider" |
|
}) |
|
).toHaveValue("3"); |
|
}); |
|
|
|
test("Slider respects show_label", async ({ mount, page }) => { |
|
const component = await mount(Slider, { |
|
props: { |
|
value: 3, |
|
minimum: 0, |
|
maximum: 10, |
|
label: "My Slider", |
|
show_label: false, |
|
step: 1, |
|
interactive: true, |
|
loading_status: loading_status, |
|
gradio: { |
|
dispatch() {} |
|
} |
|
} |
|
}); |
|
await expect(component.getByTestId("block-title")).toBeHidden(); |
|
}); |
|
|
|
test("Slider Maximum/Minimum values", async ({ mount, page }) => { |
|
const component = await mount(Slider, { |
|
props: { |
|
value: 3, |
|
minimum: 0, |
|
maximum: 10, |
|
label: "My Slider", |
|
show_label: true, |
|
step: 1, |
|
interactive: true, |
|
loading_status: loading_status, |
|
gradio: { |
|
dispatch() {} |
|
} |
|
} |
|
}); |
|
|
|
const sliderNumberInput = component.getByRole("spinbutton", { |
|
name: "My Slider" |
|
}); |
|
|
|
await expect(sliderNumberInput).toHaveValue("3"); |
|
|
|
await sliderNumberInput.press("ArrowUp"); |
|
|
|
await expect(sliderNumberInput).toHaveValue("4"); |
|
|
|
const sliderRangeInput = component.getByRole("slider"); |
|
|
|
await sliderRangeInput.focus(); |
|
|
|
sliderRangeInput.press("ArrowRight"); |
|
|
|
await expect(sliderNumberInput).toHaveValue("5"); |
|
|
|
changeSlider(page, sliderRangeInput, sliderRangeInput, 2); |
|
|
|
await expect(sliderNumberInput).toHaveValue("10"); |
|
}); |
|
|
|
test("Slider Change event", async ({ mount, page }) => { |
|
const events = { |
|
change: 0, |
|
release: 0 |
|
}; |
|
|
|
function event(name: "change" | "release") { |
|
events[name] += 1; |
|
} |
|
|
|
const component = await mount(Slider, { |
|
props: { |
|
value: 3, |
|
minimum: 0, |
|
maximum: 10, |
|
label: "My Slider", |
|
show_label: true, |
|
step: 1, |
|
interactive: true, |
|
loading_status: loading_status, |
|
gradio: { |
|
dispatch: event |
|
} |
|
} |
|
}); |
|
|
|
const sliderNumberInput = component.getByRole("spinbutton", { |
|
name: "My Slider" |
|
}); |
|
|
|
const sliderRangeInput = component.getByRole("slider"); |
|
|
|
await expect(sliderNumberInput).toHaveValue("3"); |
|
|
|
await changeSlider(page, sliderRangeInput, sliderRangeInput, 0.7); |
|
|
|
await expect(sliderNumberInput).toHaveValue("7"); |
|
|
|
|
|
await expect(events.change).toBeGreaterThanOrEqual(1); |
|
await expect(events.release).toBeGreaterThanOrEqual(1); |
|
}); |
|
|