Spaces:
Running
Running
File size: 3,095 Bytes
420aaad | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | """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("<ins>", 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()
|