File size: 5,536 Bytes
5caedb4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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 = "<p>This is <b>bold</b> text</p><br><script>Script</script>"
        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()