1
import { test, expect } from "@gradio/tootils";
3
test("File Explorer is interactive and re-runs the server_fn when root is updated", async ({
8
.filter({ hasText: "bar.txt" })
13
.filter({ hasText: "foo.txt" })
14
.getByRole("checkbox")
17
await page.getByLabel("Select File Explorer Root").click();
18
await page.getByLabel(new RegExp("/dir2$"), { exact: true }).first().click();
21
.filter({ hasText: "baz.png" })
22
.getByRole("checkbox")
26
.filter({ hasText: "foo.png" })
27
.getByRole("checkbox")
30
await page.locator("#input-box").getByTestId("textbox").fill("test");
33
page.locator("span").filter({ hasText: "baz.png" }).getByRole("checkbox")
37
page.locator("span").filter({ hasText: "foo.png" }).getByRole("checkbox")
42
.filter({ hasText: "foo.png" })
43
.getByRole("checkbox")
46
await expect(page.locator("#total-changes input")).toHaveValue("3");
49
test("File Explorer correctly displays both directories and files. Directories included in value.", async ({
52
await page.getByLabel("Select File Explorer Root").click();
53
await page.getByLabel(new RegExp("/dir3$"), { exact: true }).first().click();
57
.filter({ hasText: "dir4" })
58
.getByLabel("expand directory")
63
.filter({ hasText: "dir4 . dir5 dir7 dir_4_bar.log dir_4_foo.txt" })
64
.getByRole("checkbox")
70
.filter({ hasText: "dir_4_foo.txt" })
71
.getByRole("checkbox")
76
.filter({ hasText: "dir3_foo.txt" })
77
.getByRole("checkbox")
80
await page.getByRole("button", { name: "Run" }).click();
81
const directory_paths_displayed = async () => {
82
const value = await page.getByLabel("Selected Directory").inputValue();
83
const files = value.split(",");
86
files.some((f) => f.endsWith("dir4")) &&
87
files.some((f) => f.endsWith("dir_4_foo.txt")) &&
88
files.some((f) => f.endsWith("dir3_foo.txt"))
92
await expect.poll(directory_paths_displayed).toBe(true);
95
test("File Explorer selects all children when top level directory is selected.", async ({
98
await page.getByLabel("Select File Explorer Root").click();
99
await page.getByLabel(new RegExp("/dir3$"), { exact: true }).first().click();
103
.filter({ hasText: "dir4" })
104
.getByRole("checkbox")
107
await Promise.all([page.getByRole("button", { name: "Run" }).click()]);
109
async function directory_paths_displayed() {
110
const value = await page.getByLabel("Selected Directory").inputValue();
111
const files_and_dirs = value.split(",");
113
return files_and_dirs.length === 7;
115
await expect.poll(directory_paths_displayed).toBe(true);
118
test("File Explorer correctly displays only text files", async ({ page }) => {
119
const check = page.getByRole("checkbox", {
120
name: "Show only text files",
125
await page.getByLabel("Select File Explorer Root").click();
126
await page.getByLabel(new RegExp("/dir3$"), { exact: true }).first().click();
130
.filter({ hasText: "dir4" })
131
.getByRole("checkbox")
133
await page.getByRole("button", { name: "Run" }).click();
135
async function text_files_displayed() {
136
const value = await page.getByLabel("Selected Directory").inputValue();
137
const dirs = value.split(",");
138
return dirs.length === 3 && dirs.every((d) => d.endsWith(".txt"));
141
await expect.poll(text_files_displayed).toBe(true);
144
test("File Explorer correctly excludes text files when ignore_glob is '*.txt'.", async ({
147
const check = page.getByRole("checkbox", {
148
name: "Ignore text files in glob",
153
await page.getByLabel("Select File Explorer Root").click();
154
await page.getByLabel(new RegExp("/dir3$"), { exact: true }).first().click();
158
.filter({ hasText: "dir4" })
159
.getByRole("checkbox")
161
await page.getByRole("button", { name: "Run" }).click();
163
const only_files_displayed = async () => {
164
const value = await page.getByLabel("Selected Directory").inputValue();
165
const files = value.split(",");
167
files.length === 4 &&
168
files.some((f) => f.endsWith(".log")) &&
169
!files.some((f) => f.endsWith(".txt"))
173
await expect.poll(only_files_displayed).toBe(true);