import unittest
from unittest.mock import mock_open, patch
from llm_studio.src.tooltips import (
Tooltip,
Tooltips,
clean_docusaurus_tags,
clean_md_links,
cleanhtml,
read_tooltip_file,
)
class TestTooltipFunctions(unittest.TestCase):
def test_read_tooltip_file_mock_file(self):
mock_content = "This is a test file content\n\nwith multiple lines."
with patch("builtins.open", mock_open(read_data=mock_content)):
result = read_tooltip_file("dummy/path.mdx")
self.assertEqual(result, mock_content)
def test_read_tooltip_file_real_file(self):
expected_content = "Adds EOS token at end of answer."
result = read_tooltip_file(
"documentation/docs/tooltips/experiments/_add-eos-token-to-answer.mdx"
)
self.assertEqual(result, expected_content)
def test_read_tooltip_file_nonexistent_file(self):
with self.assertRaises(FileNotFoundError):
read_tooltip_file("nonexistent/path.mdx")
def test_cleanhtml(self):
html = "
This is bold text
"
expected = "This is bold textScript"
self.assertEqual(cleanhtml(html), expected)
def test_clean_docusaurus_tags_note(self):
text = ":::info note Some note :::"
expected = "Some note"
self.assertEqual(clean_docusaurus_tags(text), expected)
text = ":::info Note Some note :::"
expected = "Some note"
self.assertEqual(clean_docusaurus_tags(text), expected)
def test_clean_docusaurus_tags_tip(self):
text = ":::tip tip Some tip :::"
expected = "Some tip"
self.assertEqual(clean_docusaurus_tags(text), expected)
def test_clean_md_links(self):
md_text = "This is a [link](https://example.com) in text"
expected = "This is a link in text"
self.assertEqual(clean_md_links(md_text), expected)
class TestTooltip(unittest.TestCase):
def test_tooltip_creation(self):
tooltip = Tooltip("test", "This is a test tooltip")
self.assertEqual(tooltip.name, "test")
self.assertEqual(tooltip.text, "This is a test tooltip")
def test_tooltip_repr(self):
tooltip = Tooltip("test", "This is a test tooltip")
self.assertEqual(repr(tooltip), "test: This is a test tooltip")
class TestTooltips(unittest.TestCase):
@patch("llm_studio.src.tooltips.read_tooltip_file")
def setUp(self, mock_read):
mock_files = [
"documentation/docs/tooltips/section1/_file1.mdx",
"documentation/docs/tooltips/section1/_file2.mdx",
"documentation/docs/tooltips/section2/_file1.mdx",
"documentation/docs/tooltips/section2/_file2.mdx",
]
mock_read.side_effect = ["Content 1", "Content 2", "Content 3", "Content 4"]
self.tooltips = Tooltips(tooltip_files=mock_files)
@patch("llm_studio.src.tooltips.read_tooltip_file")
def test_tooltips_no_underscore(self, mock_read):
mock_files = [
"documentation/docs/tooltips/section1/_file1.mdx",
"documentation/docs/tooltips/section2/file2.mdx",
]
mock_read.side_effect = ["Content 1", "Content 2"]
with self.assertRaises(ValueError):
Tooltips(tooltip_files=mock_files)
def test_tooltips_initialization(self):
self.assertEqual(len(self.tooltips), 4)
self.assertIn("section1_file1", self.tooltips.tooltips)
self.assertIn("section1_file2", self.tooltips.tooltips)
self.assertIn("section2_file1", self.tooltips.tooltips)
self.assertIn("section2_file2", self.tooltips.tooltips)
def test_add_tooltip(self):
length_before = len(self.tooltips)
new_tooltip = Tooltip("new", "New tooltip")
self.tooltips.add_tooltip(new_tooltip)
self.assertEqual(len(self.tooltips), length_before + 1)
self.assertEqual(self.tooltips["new"], "New tooltip")
def test_getitem(self):
self.assertEqual(self.tooltips["section1_file1"], "Content 1")
self.assertEqual(self.tooltips["section1_file2"], "Content 2")
self.assertEqual(self.tooltips["section2_file1"], "Content 3")
self.assertEqual(self.tooltips["section2_file2"], "Content 4")
self.assertIsNone(self.tooltips["nonexistent"])
def test_len(self):
self.assertEqual(len(self.tooltips), 4)
def test_repr(self):
repr_string = repr(self.tooltips)
self.assertIn("section1_file1", repr_string)
self.assertIn("section1_file2", repr_string)
self.assertIn("section2_file1", repr_string)
self.assertIn("section2_file2", repr_string)
def test_get(self):
self.assertEqual(self.tooltips.get("section1_file1"), "Content 1")
self.assertEqual(self.tooltips.get("section1_file1", "default"), "Content 1")
self.assertEqual(self.tooltips.get("nonexistent", "default"), "default")
@patch("llm_studio.src.tooltips.read_tooltip_file")
def test_duplicate_tooltip_name(self, mock_read):
with self.assertRaises(ValueError):
mock_files = [
"documentation/docs/tooltips/section1/_file1.mdx",
"documentation/docs/tooltips/section1/_file2.mdx",
"documentation/docs/tooltips/section1/_file1.mdx",
]
mock_read.side_effect = ["Content 1", "Content 2", "Content 3"]
Tooltips(tooltip_files=mock_files)
if __name__ == "__main__":
unittest.main()