adf0d17497
publish / version_or_publish (push) Has been cancelled
storybook-build / changes (push) Has been cancelled
storybook-build / :storybook-build (push) Has been cancelled
Sync Gradio Skills to Hugging Face / sync-skills (push) Has been cancelled
functional / changes (push) Has been cancelled
functional / build-frontend (push) Has been cancelled
functional / functional-test-SSR=false (push) Has been cancelled
functional / functional-reload (push) Has been cancelled
js / changes (push) Has been cancelled
js / js-test (push) Has been cancelled
docs-build / changes (push) Has been cancelled
docs-build / docs-build (push) Has been cancelled
docs-build / website-build (push) Has been cancelled
functional / functional-test-SSR=true (push) Has been cancelled
hygiene / hygiene-test (push) Has been cancelled
python / changes (push) Has been cancelled
python / build (push) Has been cancelled
python / test-ubuntu-latest-flaky (push) Has been cancelled
python / test-ubuntu-latest-not-flaky (push) Has been cancelled
python / test-windows-latest-flaky (push) Has been cancelled
python / test-windows-latest-not-flaky (push) Has been cancelled
355 lines
8.8 KiB
TypeScript
355 lines
8.8 KiB
TypeScript
import { afterEach, beforeAll, describe, expect, test } from "vitest";
|
|
import { render, cleanup } from "@self/tootils/render";
|
|
import { setupi18n } from "../../core/src/i18n";
|
|
import { Gradio } from "../../core/src/gradio_helper";
|
|
|
|
import StaticAnnotatedImage from "@gradio/annotatedimage";
|
|
import StaticAudio from "@gradio/audio";
|
|
import StaticChatbot from "@gradio/chatbot";
|
|
import StaticCheckbox from "@gradio/checkbox";
|
|
import StaticCheckboxGroup from "@gradio/checkboxgroup";
|
|
import StaticColorPicker from "@gradio/colorpicker";
|
|
import StaticDropdown from "@gradio/dropdown";
|
|
import StaticFile from "@gradio/file";
|
|
import StaticGallery from "@gradio/gallery";
|
|
import StaticHTML from "@gradio/html";
|
|
import StaticHighlightedText from "@gradio/highlightedtext";
|
|
import StaticJson from "@gradio/json";
|
|
import StaticLabel from "@gradio/label";
|
|
import StaticMarkdown from "@gradio/markdown";
|
|
import StaticModel3D from "@gradio/model3d";
|
|
import StaticNumber from "@gradio/number";
|
|
import StaticRadio from "@gradio/radio";
|
|
import StaticSlider from "@gradio/slider";
|
|
import StaticTextbox from "@gradio/textbox";
|
|
import StaticUploadButton from "@gradio/uploadbutton";
|
|
import StaticVideo from "@gradio/video";
|
|
|
|
import InteractiveAudio from "@gradio/audio";
|
|
import InteractiveCheckbox from "@gradio/checkbox";
|
|
import InteractiveCheckboxGroup from "@gradio/checkboxgroup";
|
|
import InteractiveColorPicker from "@gradio/colorpicker";
|
|
import InteractiveDropdown from "@gradio/dropdown";
|
|
import InteractiveFile from "@gradio/file";
|
|
import InteractiveModel3D from "@gradio/model3d";
|
|
import InteractiveNumber from "@gradio/number";
|
|
import InteractiveRadio from "@gradio/radio";
|
|
import InteractiveSlider from "@gradio/slider";
|
|
import InteractiveTextbox from "@gradio/textbox";
|
|
import InteractiveUploadButton from "@gradio/uploadbutton";
|
|
import InteractiveVideo from "@gradio/video";
|
|
import type { ILoadingStatus as 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"
|
|
};
|
|
|
|
const components = [
|
|
[
|
|
"StaticAnnotatedImage",
|
|
StaticAnnotatedImage,
|
|
{ height: 100, width: 100, value: null, interactive: false }
|
|
],
|
|
[
|
|
"InteractiveAudio",
|
|
InteractiveAudio,
|
|
{ interactive: true, value: null, waveform_options: {} }
|
|
],
|
|
[
|
|
"StaticAudio",
|
|
StaticAudio,
|
|
{ interactive: false, value: null, waveform_options: {} }
|
|
],
|
|
|
|
["StaticChatbot", StaticChatbot, { interactive: false, value: [] }],
|
|
["InteractiveCheckbox", InteractiveCheckbox, { interactive: true }],
|
|
["StaticCheckbox", StaticCheckbox, { interactive: false }],
|
|
[
|
|
"InteractiveCheckboxGroup",
|
|
InteractiveCheckboxGroup,
|
|
{
|
|
choices: [
|
|
["a", "a"],
|
|
["b", "b"],
|
|
["c", "c"]
|
|
],
|
|
interactive: true,
|
|
value: [],
|
|
info: "",
|
|
show_select_all: false
|
|
}
|
|
],
|
|
[
|
|
"StaticCheckboxGroup",
|
|
StaticCheckboxGroup,
|
|
{
|
|
choices: [
|
|
["a", "a"],
|
|
["b", "b"],
|
|
["c", "c"]
|
|
],
|
|
interactive: false,
|
|
value: [],
|
|
info: "",
|
|
show_select_all: false
|
|
}
|
|
],
|
|
["InteractiveColorPicker", InteractiveColorPicker, { interactive: true }],
|
|
["StaticColorPicker", StaticColorPicker, { interactive: false }],
|
|
// [
|
|
// "InteractiveDataFrame",
|
|
// InteractiveDataframe,
|
|
// {
|
|
// value: {
|
|
// data: [[1, 2, 3]],
|
|
// headers: [],
|
|
// metadata: null
|
|
// },
|
|
// col_count: [3, "fixed"],
|
|
// row_count: [3, "fixed"],
|
|
// interactive: true,
|
|
// static_columns: []
|
|
// }
|
|
// ],
|
|
// [
|
|
// "StaticDataFrame",
|
|
// StaticDataframe,
|
|
// {
|
|
// value: {
|
|
// data: [[1, 2, 3]],
|
|
// headers: [],
|
|
// metadata: null
|
|
// },
|
|
// col_count: [3, "fixed"],
|
|
// row_count: [3, "fixed"],
|
|
// interactive: false,
|
|
// static_columns: []
|
|
// }
|
|
// ],
|
|
[
|
|
"InteractiveDropdown",
|
|
InteractiveDropdown,
|
|
{ choices: ["a", "b", "c"], interactive: true }
|
|
],
|
|
[
|
|
"StaticDropdown",
|
|
StaticDropdown,
|
|
{ choices: ["a", "b", "c"], interactive: false }
|
|
],
|
|
["InteractiveFile", InteractiveFile, { interactive: true }],
|
|
["StaticFile", StaticFile, { interactive: false }],
|
|
|
|
[
|
|
"StaticGallery",
|
|
StaticGallery,
|
|
{
|
|
interactive: false,
|
|
value: null,
|
|
file_types: null,
|
|
columns: 2,
|
|
rows: undefined,
|
|
height: "auto",
|
|
preview: false,
|
|
allow_preview: true,
|
|
selected_index: null,
|
|
object_fit: "cover",
|
|
buttons: [],
|
|
type: "filepath",
|
|
fit_columns: false
|
|
}
|
|
],
|
|
|
|
["StaticHTML", StaticHTML, { interactive: false, value: "" }],
|
|
|
|
[
|
|
"StaticHighlightedText",
|
|
StaticHighlightedText,
|
|
{ interactive: false, value: null }
|
|
],
|
|
|
|
["StaticJson", StaticJson, { interactive: false, value: null }],
|
|
|
|
[
|
|
"StaticLabel",
|
|
StaticLabel,
|
|
{ interactive: false, value: { confidences: [] } }
|
|
],
|
|
|
|
["StaticMarkdown", StaticMarkdown, { interactive: false }],
|
|
["InteractiveModel3D", InteractiveModel3D, { interactive: true }],
|
|
["StaticModel3D", StaticModel3D, { interactive: false }],
|
|
["InteractiveNumber", InteractiveNumber, { interactive: true }],
|
|
["StaticNumber", StaticNumber, { interactive: false }],
|
|
["InteractiveRadio", InteractiveRadio, { interactive: true }],
|
|
["StaticRadio", StaticRadio, { interactive: false }],
|
|
["InteractiveSlider", InteractiveSlider, { interactive: true }],
|
|
["StaticSlider", StaticSlider, { interactive: false }],
|
|
[
|
|
"InteractiveTextbox",
|
|
InteractiveTextbox,
|
|
{ container: false, interactive: true }
|
|
],
|
|
["StaticTextbox", StaticTextbox, { container: false, interactive: false }],
|
|
// ["InteractiveTimeSeries", InteractiveTimeSeries, {}],
|
|
// ["StaticTimeSeries", StaticTimeSeries, {}],
|
|
["InteractiveUploadButton", InteractiveUploadButton, { interactive: true }],
|
|
["StaticUploadButton", StaticUploadButton, { interactive: false }],
|
|
[
|
|
"InteractiveVideo",
|
|
InteractiveVideo,
|
|
{ interactive: true, webcam_options: { mirror: true, constraints: null } }
|
|
],
|
|
["StaticVideo", StaticVideo, { interactive: false }]
|
|
] as const;
|
|
|
|
describe("all components should apply provided class names", () => {
|
|
beforeAll(async () => {
|
|
await setupi18n();
|
|
});
|
|
|
|
afterEach(() => {
|
|
cleanup();
|
|
});
|
|
|
|
components.forEach(([name, component, props]) => {
|
|
test(name, async () => {
|
|
const { container } = await render(component, {
|
|
...props,
|
|
loading_status,
|
|
elem_classes: ["test-class"]
|
|
});
|
|
|
|
const elem = container.querySelector(`.test-class`);
|
|
expect(elem).not.toBeNull();
|
|
});
|
|
});
|
|
|
|
["Button", "Code", "Image", "Plot"].forEach((name) => {
|
|
test.todo(name);
|
|
});
|
|
});
|
|
|
|
describe("all components should apply provided id", () => {
|
|
beforeAll(async () => {
|
|
await setupi18n();
|
|
});
|
|
|
|
afterEach(() => {
|
|
cleanup();
|
|
});
|
|
|
|
components.forEach(([name, component, props]) => {
|
|
test(name, async () => {
|
|
const { container } = await render(component, {
|
|
...props,
|
|
loading_status,
|
|
elem_id: "test-id"
|
|
});
|
|
|
|
const elem = container.querySelector(`#test-id`);
|
|
expect(elem).not.toBeNull();
|
|
});
|
|
});
|
|
|
|
["Button", "Code", "Image", "Plot"].forEach((name) => {
|
|
test.todo(name);
|
|
});
|
|
});
|
|
|
|
describe("all components should be invisible when visible=hidden", () => {
|
|
beforeAll(async () => {
|
|
await setupi18n();
|
|
});
|
|
|
|
afterEach(() => {
|
|
cleanup();
|
|
});
|
|
|
|
components.forEach(([name, component, props]) => {
|
|
test(name, async () => {
|
|
const { container } = await render(component, {
|
|
...props,
|
|
loading_status,
|
|
elem_id: "test-id",
|
|
visible: "hidden"
|
|
});
|
|
|
|
const elem = container.querySelector(`#test-id`);
|
|
|
|
expect(elem).not.toBeNull();
|
|
expect(elem!.classList.contains("hidden")).toBe(true);
|
|
});
|
|
});
|
|
|
|
["Button", "Code", "Image", "Plot"].forEach((name) => {
|
|
test.todo(name);
|
|
});
|
|
});
|
|
|
|
describe("all components should have the appropriate label when set via the `label` prop", () => {
|
|
beforeAll(async () => {
|
|
await setupi18n();
|
|
});
|
|
|
|
afterEach(() => {
|
|
cleanup();
|
|
});
|
|
|
|
components
|
|
.filter(([name]) => name !== "StaticMarkdown" && name !== "StaticHTML")
|
|
.forEach(([name, component, props]) => {
|
|
test(name, async () => {
|
|
const { getAllByText } = await render(component, {
|
|
...props,
|
|
loading_status,
|
|
label: name + "LABEL_TEST"
|
|
});
|
|
|
|
const elems = getAllByText(name + "LABEL_TEST");
|
|
|
|
expect(elems.length).toBeGreaterThan(0);
|
|
});
|
|
});
|
|
|
|
["Button", "Code", "Image", "Plot"].forEach((name) => {
|
|
test.todo(name);
|
|
});
|
|
});
|
|
|
|
describe("all components should hide their label when `show_label=false`", () => {
|
|
components.forEach(([name, component, props]) => {
|
|
test.todo(name);
|
|
});
|
|
|
|
["Button", "Code", "Image", "Plot"].forEach((name) => {
|
|
test.todo(name);
|
|
});
|
|
});
|
|
|
|
describe("all components should show their label when `show_label=true`", () => {
|
|
components.forEach(([name, component, props]) => {
|
|
test.todo(name);
|
|
});
|
|
|
|
["Button", "Code", "Image", "Plot"].forEach((name) => {
|
|
test.todo(name);
|
|
});
|
|
});
|
|
|
|
describe("all components should hide their container when `container=false`", () => {
|
|
components.forEach(([name, component, props]) => {
|
|
test.todo(name);
|
|
});
|
|
|
|
["Button", "Code", "Image", "Plot"].forEach((name) => {
|
|
test.todo(name);
|
|
});
|
|
});
|