diff tests/test_algpseudo.py @ 53:39151225fb84

Rename the new pseudocode implementation to AlgPseudocode. Because it is modelled after CTAN's algpseudocode(x).
author Franz Glasner <fzglas.hg@dom66.de>
date Sun, 26 Apr 2026 19:16:23 +0200
parents tests/test_pseudo.py@bbef0ac6cfcf
children e8f4af9e20a8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_algpseudo.py	Sun Apr 26 19:16:23 2026 +0200
@@ -0,0 +1,259 @@
+# -*- coding: utf-8 -*-
+# :-
+# SPDX-FileCopyrightText: © 2026 Franz Glasner
+# SPDX-License-Identifier: MIT
+# :-
+
+from _tsetup import ALGLEXERFILENAME, ALGLEXERCLASS
+
+import unittest
+
+import pygments
+import pygments.lexers
+
+import _testhelper
+
+
+class TestSnippets(unittest.TestCase, _testhelper.TokenAssertHelper):
+
+    def setUp(self):
+        self.lexer = pygments.lexers.load_lexer_from_file(
+            ALGLEXERFILENAME, ALGLEXERCLASS)
+
+    def test_lf(self):
+        self.assertTokenStreamEqualComplete(
+            [("Text.Whitespace", "\n")],
+            pygments.lex("\n", self.lexer))
+
+    def test_protected_lf(self):
+        self.assertTokenStreamEqualComplete(
+            [("Text", "\\\n")],
+            pygments.lex("\\\n", self.lexer))
+
+    def test_number_int(self):
+        self.assertTokenStreamEqualComplete(
+            [("Number.Integer", "10"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("10", self.lexer))
+
+    def test_number_float_1(self):
+        self.assertTokenStreamEqualComplete(
+            [("Number.Float", "3.1415926"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("3.1415926", self.lexer))
+
+    def test_number_float_2(self):
+        self.assertTokenStreamEqualComplete(
+            [("Number.Float", "3.14e-12"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("3.14e-12", self.lexer))
+
+    def test_string_s_1(self):
+        self.assertTokenStreamEqualComplete(
+            [("String.Single", "'"),
+             ("String.Single", "HU"),
+             ("String.Single", '"'),
+             ("String.Single", "HE HA"),
+             ("String.Escape", "\\'"),
+             ("String.Single", "HO"),
+             ("String.Single", "'"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("""'HU"HE HA\\'HO'""", self.lexer))
+
+    def test_string_s_2(self):
+        self.assertTokenStreamEqual(
+            [("String.Single", "'"),
+             ("String.Single", "HUHU"),
+             ("Error", "\n"),
+             ],
+            pygments.lex("'HUHU\nHEHE'", self.lexer))
+
+    def test_string_ts_1(self):
+        self.assertTokenStreamEqualComplete(
+            [("String.Single", "'''"),
+             ("String.Single", "HUHU HEHE"),
+             ("String.Single", "'''"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("'''HUHU HEHE'''", self.lexer))
+
+    def test_string_ts_2(self):
+        self.assertTokenStreamEqualComplete(
+            [("String.Single", "'''"),
+             ("String.Single", "HI"),
+             ("String.Single", "'"),
+             ("String.Single", "HU"),
+             ("String.Single", "\n"),
+             ("String.Single", "HE"),
+             ("String.Single", '"'),
+             ("String.Single", "HA"),
+             ("String.Single", "'''"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("""'''HI'HU\nHE"HA'''""", self.lexer))
+
+    def test_string_d_1(self):
+        self.assertTokenStreamEqualComplete(
+            [("String.Double", '"'),
+             ("String.Double", 'HU'),
+             ("String.Double", "'"),
+             ("String.Double", 'HE HA'),
+             ("String.Escape", '\\"'),
+             ("String.Double", 'HO'),
+             ("String.Double", '"'),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex('''"HU'HE HA\\"HO"''', self.lexer))
+
+    def test_string_d_2(self):
+        self.assertTokenStreamEqual(
+            [("String.Double", '"'),
+             ("String.Double", "HUHU"),
+             ("Error", "\n"),
+             ],
+            pygments.lex('"HUHU\nHEHE"', self.lexer))
+
+    def test_string_td_1(self):
+        self.assertTokenStreamEqualComplete(
+            [("String.Double", '"""'),
+             ("String.Double", 'HUHU HAHA'),
+             ("String.Double", '"""'),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex('"""HUHU HAHA"""', self.lexer))
+
+    def test_string_td_2(self):
+        self.assertTokenStreamEqualComplete(
+            [("String.Double", '"""'),
+             ("String.Double", 'HU'),
+             ("String.Double", '"'),
+             ("String.Double", "HO"),
+             ("String.Double", "\n"),
+             ("String.Double", "HE"),
+             ("String.Double", "'"),
+             ("String.Double", "HA"),
+             ("String.Double", '"""'),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex('''"""HU"HO\nHE'HA"""''', self.lexer))
+
+    def test_proc(self):
+        self.assertTokenStreamEqualComplete(
+            [("Keyword", "PROCEDURE"),
+             ("Text.Whitespace", " "),
+             ("Name.Entity", "{"),
+             ("Name.Entity", "the name"),
+             ("Name.Entity", "}"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("\\PROC {the name}", self.lexer))
+
+    def test_proc_de(self):
+        lexer = pygments.lexers.load_lexer_from_file(
+            ALGLEXERFILENAME, "AlgPseudocodeLexer_DE")
+        self.assertTokenStreamEqualComplete(
+            [("Keyword", "PROZEDUR"),
+             ("Text.Whitespace", "  "),
+             ("Name.Entity", "{"),
+             ("Name.Entity", " also {nichtxs"),
+             ("Name.Entity", "\\}"),
+             ("Name.Entity", " hier"),
+             ("Name.Entity", "}"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("\\PROC  { also {nichtxs\\} hier}", lexer))
+
+    def test_function_1(self):
+        self.assertTokenStreamEqualComplete(
+            [("Keyword", "FUNCTION"),
+             ("Name.Entity", "{"),
+             ("Name.Entity", "1"),
+             ("Name.Entity", "}"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("\\FUNC{1}", self.lexer))
+
+    def test_function_2(self):
+        self.assertTokenStreamEqualComplete(
+            [("Keyword", "FUNCTION"),
+             ("Name.Entity", "{"),
+             ("Name.Entity", "line 1\nline 2\n"),
+             ("Name.Entity", "}"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("\\FUNCTION{line 1\nline 2\n}", self.lexer))
+
+    def test_function_3(self):
+        self.assertTokenStreamEqualComplete(
+            [("Keyword", "FUNCTION"),
+             ("Text.Whitespace", " "),
+             ("Name.Entity", "{"),
+             ("Name.Entity", "\\"),
+             ("Name.Entity", "n"),
+             ("Name.Entity", "\\}"),
+             ("Name.Entity", "}"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("\\FN {\\n\\}}", self.lexer))
+
+    def test_class(self):
+        self.assertTokenStreamEqualComplete(
+            [("Keyword", "CLASS"),
+             ("Text.Whitespace", " "),
+             ("Name.Entity", "{"),
+             ("Name.Entity", "\\"),
+             ("Name.Entity", "n"),
+             ("Name.Entity", "\\}"),
+             ("Name.Entity", "}"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("\\CLASS {\\n\\}}", self.lexer))
+
+    def test_class_fr(self):
+        lexer = pygments.lexers.load_lexer_from_file(
+            ALGLEXERFILENAME, "AlgPseudocodeLexer_FR")
+        self.assertTokenStreamEqualComplete(
+            [("Keyword", "CLASSE"),
+             ("Text.Whitespace", " "),
+             ("Name.Entity", "{"),
+             ("Name.Entity", "\\"),
+             ("Name.Entity", "n"),
+             ("Name.Entity", "\\}"),
+             ("Name.Entity", "}"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("\\CLASS {\\n\\}}", lexer))
+
+    def test_remark_1(self):
+        self.assertTokenStreamEqualComplete(
+            [("Comment.Single", "▷"),
+             ("Comment.Single", "  the remark"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex("\\REMARK  the remark\n", self.lexer))
+
+    def test_remark_2(self):
+        self.assertTokenStreamEqualComplete(
+            [("Comment.Single", "▷"),
+             ("Comment.Single", "  the remark 1"),
+             ("Text.Whitespace", "\n"),
+             ("Comment.Single", "▷"),
+             ("Comment.Single", "  the remark 2"),
+             ("Text.Whitespace", "\n"),
+             ("Comment.Single", "▷"),
+             ("Comment.Single", " the remark 3"),
+             ("Text.Whitespace", "\n"),
+             ],
+            pygments.lex(
+                """\\REMARK  the remark 1
+\\Rem  the remark 2
+\\r the remark 3
+""", self.lexer))
+
+
+if __name__ == "__main__":
+    unittest.main()