gradio/js/audio/audio.test.ts
Hannah f816136a03
Add volume control to Audio (#6254)
* fix autoplay and add trim_region_color setting

* add changeset

* add changeset

* add changeset

* remove unused param

* add changeset

* add volume control functionality

* add changeset

* corrent change event to stop_recording

* controls tweak

* add tests

* add changeset

* hide volume when blurred

* change bar height

* normalise -> normalize

* style tweaks

* clean up volume control

* add more tests

* formatting

* fix dispatch event

* amend refs to source

* add audio e2e

* add changeset

* fix test

* clean up ids + refs

* style tweak

---------

Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com>
2023-11-15 13:19:02 +01:00

123 lines
3.2 KiB
TypeScript

import { test, describe, assert, afterEach, vi } from "vitest";
import { cleanup, render } from "@gradio/tootils";
import Audio from "./";
import type { LoadingStatus } from "@gradio/statustracker";
import { setupi18n } from "../app/src/i18n";
import ResizeObserver from "resize-observer-polyfill";
global.ResizeObserver = ResizeObserver;
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 default_values = {
loading_status,
label: "music",
value: {
url: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3",
path: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3",
orig_name: "SoundHelix-Song-1.mp3"
},
root: "",
proxy_url: "",
show_label: true
};
describe("Audio", () => {
setupi18n();
afterEach(() => cleanup());
test("renders audio component", async () => {
const { getAllByTestId } = await render(Audio, {
...default_values,
interactive: true,
sources: ["microphone", "upload"],
pending: false,
streaming: false
});
assert.exists(getAllByTestId("waveform-music"));
});
test("renders audio component with audio controls", async () => {
const { getAllByTestId, getAllByLabelText, getAllByText } = await render(
Audio,
{
...default_values,
streaming: false,
pending: false,
sources: ["microphone"],
interactive: true
}
);
assert.exists(getAllByTestId("waveform-controls"));
assert.exists(getAllByLabelText("Trim audio to selection"));
assert.exists(getAllByLabelText("Reset audio"));
assert.exists(getAllByText("0:00"));
assert.exists(getAllByLabelText("audio.play"));
assert.exists(getAllByLabelText("Adjust volume"));
assert.exists(getAllByLabelText("Adjust playback speed to 1.5x"));
assert.exists(getAllByLabelText("Skip forward by 5 seconds"));
});
test("does not render with audio editing controls when not interactive", async () => {
const { getAllByTestId, queryByLabelText } = await render(Audio, {
...default_values,
streaming: false,
pending: false,
sources: ["microphone"],
interactive: false
});
assert.exists(getAllByTestId("waveform-controls"));
assert.notExists(queryByLabelText("Trim audio to selection"));
assert.notExists(queryByLabelText("Reset audio"));
});
test("renders source selection with correct selected source", async () => {
const { getByTestId, getByLabelText } = await render(Audio, {
...default_values,
streaming: false,
pending: false,
sources: ["microphone", "upload"],
interactive: true
});
assert.exists(getByTestId("source-select"));
assert.lengthOf(getByTestId("source-select").children, 2);
assert.exists(getByLabelText("Record audio"));
assert.equal(
getByLabelText("Record audio").classList.contains("selected"),
true
);
assert.equal(
getByLabelText("Upload file").classList.contains("selected"),
false
);
});
test("does not render source selection when upload is only source", async () => {
const { queryByTestId } = await render(Audio, {
...default_values,
streaming: false,
pending: false,
sources: ["upload"],
interactive: true
});
assert.notExists(queryByTestId("source-select"));
});
});