patx/twig

import importlib.util
import unittest
from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]
spec = importlib.util.spec_from_file_location("twig", ROOT / "twig.py")
twig = importlib.util.module_from_spec(spec)
spec.loader.exec_module(twig)


class HelperTests(unittest.TestCase):
    def test_gtksourceview_guesses_language_from_filename(self):
        manager = twig.GtkSource.LanguageManager.get_default()

        def language_id(filename):
            language = manager.guess_language(filename, None)
            return language.get_id() if language else None

        self.assertEqual(language_id("example.py"), "python")
        self.assertEqual(language_id("index.html"), "html")
        self.assertEqual(language_id("style.css"), "css")
        self.assertEqual(language_id("script.js"), "js")
        self.assertEqual(language_id("README.md"), "markdown")
        self.assertIsNone(language_id("notes.txt"))

    def test_clamp_font_size(self):
        self.assertEqual(twig.clamp_font_size(1), twig.MIN_EDITOR_FONT_SIZE)
        self.assertEqual(twig.clamp_font_size(12), 12)
        self.assertEqual(twig.clamp_font_size(99), twig.MAX_EDITOR_FONT_SIZE)

    def test_line_count_for_text(self):
        self.assertEqual(twig.line_count_for_text(""), 1)
        self.assertEqual(twig.line_count_for_text("one"), 1)
        self.assertEqual(twig.line_count_for_text("one\ntwo"), 2)
        self.assertEqual(twig.line_count_for_text("one\n"), 2)

    def test_select_print_command_prefers_lpr_then_lp(self):
        self.assertEqual(twig.select_print_command(lambda command: command == "lpr"), "lpr")
        self.assertEqual(twig.select_print_command(lambda command: command == "lp"), "lp")
        self.assertIsNone(twig.select_print_command(lambda _command: None))


if __name__ == "__main__":
    unittest.main()