from pathlib import Path from unittest.mock import patch import numpy as np import pandas as pd import gradio as gr class TestDataset: def test_preprocessing(self): test_file_dir = Path(__file__).parent / "test_files" bus = str(Path(test_file_dir, "bus.png").resolve()) dataset = gr.Dataset( components=["number", "textbox", "image", "html", "markdown"], samples=[ [5, "hello", bus, "Bold", "**Bold**"], [15, "hi", bus, "Italics", "*Italics*"], ], ) row = dataset.preprocess(1) assert isinstance(row, list) assert row[0] == 15 assert row[1] == "hi" assert row[2].endswith("bus.png") assert row[3] == "Italics" assert row[4] == "*Italics*" dataset = gr.Dataset( components=["number", "textbox", "image", "html", "markdown"], samples=[ [5, "hello", bus, "Bold", "**Bold**"], [15, "hi", bus, "Italics", "*Italics*"], ], type="index", ) assert dataset.preprocess(1) == 1 radio = gr.Radio(choices=[("name 1", "value 1"), ("name 2", "value 2")]) dataset = gr.Dataset(samples=[["value 1"], ["value 2"]], components=[radio]) assert dataset.samples == [["value 1"], ["value 2"]] def test_postprocessing(self): dataset = gr.Dataset( components=["number", "textbox", "image", "html", "markdown"], type="index" ) assert dataset.postprocess(1) == 1 @patch( "gradio.components.Component.process_example", spec=gr.components.Component.process_example, ) @patch("gradio.components.Image.process_example", spec=gr.Image.process_example) @patch("gradio.components.File.process_example", spec=gr.File.process_example) @patch("gradio.components.Dataframe.process_example", spec=gr.DataFrame.process_example) @patch("gradio.components.Model3D.process_example", spec=gr.Model3D.process_example) def test_dataset_calls_process_example(*mocks): gr.Dataset( components=[gr.Dataframe(), gr.File(), gr.Image(), gr.Model3D(), gr.Textbox()], samples=[ [ pd.DataFrame({"a": np.array([1, 2, 3])}), "foo.png", "bar.jpeg", "duck.obj", "hello", ] ], ) assert all(m.called for m in mocks)