import unittest from sbp.tui.term import display_width, pad, truncate, wrap_display class WidthTest(unittest.TestCase): def test_ascii_width(self) -> None: self.assertEqual(display_width("hello"), 5) def test_cjk_width(self) -> None: self.assertEqual(display_width("中文"), 4) self.assertEqual(display_width("a中"), 3) def test_truncate_ascii(self) -> None: self.assertEqual(truncate("abcdef", 10), "abcdef") self.assertEqual(truncate("abcdef", 4), "abc…") def test_truncate_cjk(self) -> None: self.assertEqual(truncate("中文字符", 5), "中文…") def test_pad(self) -> None: self.assertEqual(display_width(pad("中", 5)), 5) def test_wrap_display_keeps_long_uri_visible(self) -> None: uri = "vless://" + "a" * 200 lines = wrap_display(uri, 40) self.assertTrue(all(display_width(line) <= 40 for line in lines)) self.assertEqual("".join(lines), uri) def test_wrap_display_cjk(self) -> None: lines = wrap_display("中文字符", 4) self.assertEqual(lines, ["中文", "字符"]) if __name__ == "__main__": unittest.main()