"""Checks the application callback contract against real Gradio components.""" import os import sys import unittest import warnings from pathlib import Path os.environ["GRADIO_ANALYTICS_ENABLED"] = "False" sys.path.insert(0, str(Path(__file__).resolve().parents[1])) import gradio as gr from studio_ui import create_interface class StubWriter: def humanize_block_text(self, text, *args): if not text.strip(): raise gr.Error("Add a draft first.") return "Thanks for your help." def generate_co_creation(self, text, history, *args): if text == "fail": raise gr.Error("Please try again.") return [*history, {"role": "user", "content": text}, {"role": "assistant", "content": "A draft."}], "" class InterfaceTests(unittest.TestCase): @classmethod def setUpClass(cls): cls.interface = create_interface(StubWriter) cls.handlers = {fn.api_name: fn for fn in cls.interface.fns.values()} def test_rewrite_failure_preserves_text_and_restores_controls(self): with warnings.catch_warnings(): warnings.simplefilter("ignore") result = self.handlers["rewrite"].fn("", 35, 50, "Keep length", "") self.assertEqual(result[:2], (gr.skip(), gr.skip())) self.assertTrue(all(update["interactive"] for update in result[2:])) def test_rewrite_success_returns_real_comparison(self): result = self.handlers["rewrite"].fn("Thank you for your assistance.", 35, 50, "Keep length", "") self.assertEqual(result[0], "Thanks for your help.") self.assertIn("", result[1]) self.assertTrue(all(update["interactive"] for update in result[2:])) def test_composition_failure_restores_all_controls_and_preserves_text(self): with warnings.catch_warnings(): warnings.simplefilter("ignore") result = self.handlers["compose"].fn("fail", [], 35, 50) self.assertEqual(result[0], gr.skip()) self.assertNotIn("value", result[1]) self.assertEqual(len(result), 7) self.assertTrue(all(update["interactive"] for update in result[1:])) def test_composition_success_restores_seed_actions(self): result = self.handlers["compose"].fn("A seed", [], 35, 50) self.assertEqual(result[0][-1]["content"], "A draft.") self.assertEqual(result[1]["value"], "") self.assertEqual(len(result), 7) self.assertTrue(all(update["interactive"] for update in result[1:])) def test_missing_key_keeps_exploration_and_disables_generation(self): def unavailable(): raise EnvironmentError("No key") interface = create_interface(unavailable) buttons = {block.elem_id: block for block in interface.blocks.values() if isinstance(block, gr.Button)} self.assertFalse(buttons["humanize_btn"].interactive) self.assertFalse(buttons["compose_btn"].interactive) self.assertTrue(any(isinstance(block, gr.Radio) for block in interface.blocks.values())) if __name__ == "__main__": unittest.main()