gradio/js/highlightedtext/highlightedtext.test.ts
Hannah d112e2611b
Allow interactive input in gr.HighlightedText (#5400)
* add preprocess param to highlighted_text.py

* add params

* static tweaks

* add interactive highlight container

* highlight selection logic

* allow editing label value and move shared funcs

* add changeset

* remove py code

* wait for input render

* remove redundant event listeners

* accessibility enhancements and remove label logic

* add keyboard navigation and interaction

* merge adjacent empty elements and split input element

* add interactive support for scores mode

* remove merge adjacent logic and move to frontend

* tweak

* add changeset

* format backend

* tweaks

* backend test tweaks

* set the interactive default to None

* BE tweak

* unit tests and stories

* be formatting

* fix label errors

* tweak

* fix tests

* fix tests

* fix test

---------

Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com>
Co-authored-by: Abubakar Abid <abubakar@huggingface.co>
2023-09-12 18:47:16 -07:00

76 lines
1.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { test, describe, assert, afterEach } from "vitest";
import { cleanup, fireEvent, render } from "@gradio/tootils";
import { setupi18n } from "../app/src/i18n";
import HighlightedText from "./interactive";
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("HighlightedText", () => {
afterEach(() => cleanup());
setupi18n();
test("renders provided text and labels", async () => {
const { getByText, getByTestId, getAllByText } = await render(
HighlightedText,
{
loading_status,
value: [
["The", null],
["quick", "adjective"],
[" sneaky", "adjective"],
["fox", "subject"],
[" jumped ", "past tense verb"],
["over the", null],
["lazy dog", "object"]
]
}
);
const quick = getByText("quick");
const adjectiveLabels = getAllByText("adjective");
assert.exists(quick);
assert.exists(adjectiveLabels);
assert.equal(adjectiveLabels.length, 2);
});
test("renders labels with remove label buttons which trigger change", async () => {
const { getAllByText, listen } = await render(HighlightedText, {
loading_status,
value: [
["The", null],
["quick", "adjective"],
[" sneaky", "adjective"],
["fox", "subject"],
[" jumped ", "past tense verb"],
["over the", null],
["lazy dog", "object"]
]
});
const mock = listen("change");
const removeButtons = getAllByText("×");
assert.equal(removeButtons.length, 5);
assert.equal(mock.callCount, 0);
fireEvent.click(removeButtons[0]);
assert.equal(mock.callCount, 1);
});
});