import { test, describe, assert, afterEach } from "vitest"; import { spy } from "tinyspy"; import { cleanup, fireEvent, render, get_text, wait } from "@gradio/tootils"; import event from "@testing-library/user-event"; import Textbox from "./Index.svelte"; import type { LoadingStatus } from "@gradio/statustracker"; const loading_status: LoadingStatus = { eta: 0, queue_position: 1, queue_size: 1, status: "complete" as LoadingStatus["status"], scroll_to_output: false, visible: true, fn_index: 0, show_progress: "full" }; describe("Textbox", () => { afterEach(() => cleanup()); test("renders provided value", async () => { const { getByDisplayValue } = await render(Textbox, { show_label: true, max_lines: 1, loading_status, lines: 1, value: "hello world", label: "Textbox", interactive: false }); const item: HTMLInputElement = getByDisplayValue( "hello world" ) as HTMLInputElement; assert.equal(item.value, "hello world"); }); test("changing the text should update the value", async () => { const { component, getByDisplayValue, listen } = await render(Textbox, { show_label: true, max_lines: 10, loading_status, lines: 1, value: "hi ", label: "Textbox", interactive: true }); const item: HTMLInputElement = getByDisplayValue("hi") as HTMLInputElement; const mock = listen("change"); item.focus(); await event.keyboard("some text"); assert.equal(item.value, "hi some text"); assert.equal(component.value, "hi some text"); assert.equal(mock.callCount, 9); assert.equal(mock.calls[8][0].detail.data, "hi some text"); }); });