comparison tests/test_algpseudo.py @ 123:4d96ace53ba1

Make it work on Python2 too with all tests by explicitely declaring some strings to be Unicode strings. No tests need to be skipped on Python2 now.
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 06 May 2026 15:53:24 +0200
parents d84f1fd10e64
children 380d2607d5c7
comparison
equal deleted inserted replaced
122:e39ca08b0609 123:4d96ace53ba1
4 # SPDX-License-Identifier: MIT 4 # SPDX-License-Identifier: MIT
5 # :- 5 # :-
6 6
7 from _tsetup import ALGLEXERFILENAME, ALGLEXERCLASS 7 from _tsetup import ALGLEXERFILENAME, ALGLEXERCLASS
8 8
9 import sys
10 import unittest 9 import unittest
11 10
12 import pygments 11 import pygments
13 import pygments.lexers 12 import pygments.lexers
14 import pygments.formatters 13 import pygments.formatters
319 ], 318 ],
320 pygments.lex("\\CLASS {\\n\\}}\n\\ENDCLASS {end class}", lexer)) 319 pygments.lex("\\CLASS {\\n\\}}\n\\ENDCLASS {end class}", lexer))
321 320
322 def test_remark_1(self): 321 def test_remark_1(self):
323 self.assertTokenStreamEqualComplete( 322 self.assertTokenStreamEqualComplete(
324 [("Comment.Single", "▷"), 323 [("Comment.Single", u"▷"),
325 ("Comment.Single", " the remark"), 324 ("Comment.Single", " the remark"),
326 ("Text.Whitespace", "\n"), 325 ("Text.Whitespace", "\n"),
327 ], 326 ],
328 pygments.lex("\\REMARK the remark\n", self.lexer)) 327 pygments.lex("\\REMARK the remark\n", self.lexer))
329 328
330 def test_remark_2(self): 329 def test_remark_2(self):
331 self.assertTokenStreamEqualComplete( 330 self.assertTokenStreamEqualComplete(
332 [("Comment.Single", "▷"), 331 [("Comment.Single", u"▷"),
333 ("Comment.Single", " the remark 1"), 332 ("Comment.Single", " the remark 1"),
334 ("Text.Whitespace", "\n"), 333 ("Text.Whitespace", "\n"),
335 ("Comment.Single", "▷"), 334 ("Comment.Single", u"▷"),
336 ("Comment.Single", " the remark 2"), 335 ("Comment.Single", " the remark 2"),
337 ("Text.Whitespace", "\n"), 336 ("Text.Whitespace", "\n"),
338 ], 337 ],
339 pygments.lex( 338 pygments.lex(
340 """\\remArk the remark 1 339 """\\remArk the remark 1
344 def test_remark_custom(self): 343 def test_remark_custom(self):
345 # With the APL comment symbol 344 # With the APL comment symbol
346 lexer = pygments.lexers.load_lexer_from_file( 345 lexer = pygments.lexers.load_lexer_from_file(
347 ALGLEXERFILENAME, ALGLEXERCLASS, remark=u"⍝") 346 ALGLEXERFILENAME, ALGLEXERCLASS, remark=u"⍝")
348 self.assertTokenStreamEqualComplete( 347 self.assertTokenStreamEqualComplete(
349 [("Comment.Single", "⍝"), # U+235D ⍝ APL FUNC. SYMBOL UP SHOE JOT 348 [("Comment.Single", u"⍝"), # U+235D ⍝ APL FUNC. SYMBOL UP SHOE JOT
350 ("Comment.Single", " another remark"), 349 ("Comment.Single", " another remark"),
351 ("Text.Whitespace", "\n"), 350 ("Text.Whitespace", "\n"),
352 ], 351 ],
353 pygments.lex("\\REMARK another remark\n", lexer)) 352 pygments.lex(u"\\REMARK another remark\n", lexer))
354 353
355 def test_remark_in_text(self): 354 def test_remark_in_text(self):
356 self.assertTokenStreamEqualComplete( 355 self.assertTokenStreamEqualComplete(
357 [("Text", "the text "), 356 [("Text", "the text "),
358 ("Comment.Single", "▷"), 357 ("Comment.Single", u"▷"),
359 ("Comment.Single", " the remark"), 358 ("Comment.Single", " the remark"),
360 ("Text.Whitespace", "\n"), 359 ("Text.Whitespace", "\n"),
361 ("Text", "the next text line"), 360 ("Text", "the next text line"),
362 ("Text.Whitespace", "\n"), 361 ("Text.Whitespace", "\n"),
363 ], 362 ],
443 ], 442 ],
444 pygments.lex(r"{}:(),;[]?@", self.lexer)) 443 pygments.lex(r"{}:(),;[]?@", self.lexer))
445 444
446 def test_block_empty(self): 445 def test_block_empty(self):
447 self.assertTokenStreamEqualComplete( 446 self.assertTokenStreamEqualComplete(
448 [("Text", "◆"), 447 [("Text", u"◆"),
449 ("Text.Whitespace", " "), 448 ("Text.Whitespace", " "),
450 ("Text.Whitespace", "\n"), 449 ("Text.Whitespace", "\n"),
451 ], 450 ],
452 pygments.lex(r"\block{}", self.lexer)) 451 pygments.lex(r"\block{}", self.lexer))
453 452
454 def test_block_with_text(self): 453 def test_block_with_text(self):
455 self.assertTokenStreamEqualComplete( 454 self.assertTokenStreamEqualComplete(
456 [("Text", "◆"), 455 [("Text", u"◆"),
457 ("Text.Whitespace", " "), 456 ("Text.Whitespace", " "),
458 ("Text", "a b c"), 457 ("Text", "a b c"),
459 ("Text.Whitespace", "\n"), 458 ("Text.Whitespace", "\n"),
460 ], 459 ],
461 pygments.lex(r"\block{\text{a b c}}", self.lexer)) 460 pygments.lex(r"\block{\text{a b c}}", self.lexer))
462 461
463 def test_block_with_escaped_text(self): 462 def test_block_with_escaped_text(self):
464 self.assertTokenStreamEqualComplete( 463 self.assertTokenStreamEqualComplete(
465 [("Text", "◆"), 464 [("Text", u"◆"),
466 ("Text.Whitespace", " "), 465 ("Text.Whitespace", " "),
467 ("Text", "\\"), 466 ("Text", "\\"),
468 ("Name.Entity", "text"), 467 ("Name.Entity", "text"),
469 ("Punctuation", "{"), 468 ("Punctuation", "{"),
470 ("Name.Entity", "a"), 469 ("Name.Entity", "a"),
477 ], 476 ],
478 pygments.lex(r"\block{\\text{a b c\}}", self.lexer)) 477 pygments.lex(r"\block{\\text{a b c\}}", self.lexer))
479 478
480 def test_block(self): 479 def test_block(self):
481 self.assertTokenStreamEqualComplete( 480 self.assertTokenStreamEqualComplete(
482 [("Text", "◆"), 481 [("Text", u"◆"),
483 ("Text.Whitespace", " "), 482 ("Text.Whitespace", " "),
484 ("Name.Entity", "a"), 483 ("Name.Entity", "a"),
485 ("Text", " "), 484 ("Text", " "),
486 ("Number.Float", "1.2"), 485 ("Number.Float", "1.2"),
487 ("Text", " "), 486 ("Text", " "),
498 ], 497 ],
499 pygments.lex(r"\state{a 1.2 {x in X\} c}", self.lexer)) 498 pygments.lex(r"\state{a 1.2 {x in X\} c}", self.lexer))
500 499
501 def test_tstate_empty(self): 500 def test_tstate_empty(self):
502 self.assertTokenStreamEqualComplete( 501 self.assertTokenStreamEqualComplete(
503 [("Text", "▪"), 502 [("Text", u"▪"),
504 ("Text.Whitespace", " "), 503 ("Text.Whitespace", " "),
505 ("Text.Whitespace", "\n"), 504 ("Text.Whitespace", "\n"),
506 ], 505 ],
507 pygments.lex(r"\tstate{}", self.lexer)) 506 pygments.lex(r"\tstate{}", self.lexer))
508 507
509 def test_tstate_with_expr(self): 508 def test_tstate_with_expr(self):
510 self.assertTokenStreamEqualComplete( 509 self.assertTokenStreamEqualComplete(
511 [("Text", "▪"), 510 [("Text", u"▪"),
512 ("Text.Whitespace", " "), 511 ("Text.Whitespace", " "),
513 ("Text", "a 1.2 "), 512 ("Text", "a 1.2 "),
514 ("Name.Entity", "x"), 513 ("Name.Entity", "x"),
515 ("Text", " "), 514 ("Text", " "),
516 ("Operator.Word", "in"), 515 ("Operator.Word", "in"),
522 ], 521 ],
523 pygments.lex(r"\tstate{a 1.2 \expr{x in X\}} c}", self.lexer)) 522 pygments.lex(r"\tstate{a 1.2 \expr{x in X\}} c}", self.lexer))
524 523
525 def test_tstate_with_escaped_expr(self): 524 def test_tstate_with_escaped_expr(self):
526 self.assertTokenStreamEqualComplete( 525 self.assertTokenStreamEqualComplete(
527 [("Text", "▪"), 526 [("Text", u"▪"),
528 ("Text.Whitespace", " "), 527 ("Text.Whitespace", " "),
529 ("Text", "a 1.2 "), 528 ("Text", "a 1.2 "),
530 ("Text", "\\"), 529 ("Text", "\\"),
531 ("Text", "expr{x in X"), 530 ("Text", "expr{x in X"),
532 ("Text", "}"), 531 ("Text", "}"),
626 625
627 def test_explicit_tokentype_with_remark(self): 626 def test_explicit_tokentype_with_remark(self):
628 self.assertTokenStreamEqualComplete( 627 self.assertTokenStreamEqualComplete(
629 [("Operator", u"∈ ∌"), 628 [("Operator", u"∈ ∌"),
630 ("Text", " "), 629 ("Text", " "),
631 ("Comment.Single", "▷"), 630 ("Comment.Single", u"▷"),
632 ("Comment.Single", u" ∈ ∌ as (ordinary) operators"), 631 ("Comment.Single", u" ∈ ∌ as (ordinary) operators"),
633 ("Text.Whitespace", "\n"), 632 ("Text.Whitespace", "\n"),
634 ], 633 ],
635 pygments.lex( 634 pygments.lex(
636 u"""\\ttx-o<∈ ∌> \\rem ∈ ∌ as (ordinary) operators""", 635 u"""\\ttx-o<∈ ∌> \\rem ∈ ∌ as (ordinary) operators""",
638 637
639 def test_explicit_tokentype_with_remark_2(self): 638 def test_explicit_tokentype_with_remark_2(self):
640 self.assertTokenStreamEqualComplete( 639 self.assertTokenStreamEqualComplete(
641 [("Operator", "new_operator"), 640 [("Operator", "new_operator"),
642 ("Text", " "), 641 ("Text", " "),
643 ("Comment.Single", "▷"), 642 ("Comment.Single", u"▷"),
644 ("Comment.Single", " a (synthesized) operator"), 643 ("Comment.Single", " a (synthesized) operator"),
645 ("Text.Whitespace", "\n"), 644 ("Text.Whitespace", "\n"),
646 ], 645 ],
647 pygments.lex( 646 pygments.lex(
648 r"""\ttx-o<new_operator> \rem a (synthesized) operator""", 647 r"""\ttx-o<new_operator> \rem a (synthesized) operator""",
671 ("Punctuation", ","), 670 ("Punctuation", ","),
672 ("Text", " "), 671 ("Text", " "),
673 ("Name.Entity", "p2"), 672 ("Name.Entity", "p2"),
674 ("Punctuation", ")"), 673 ("Punctuation", ")"),
675 ("Text", " "), 674 ("Text", " "),
676 ("Comment.Single", "▷"), 675 ("Comment.Single", u"▷"),
677 ("Comment.Single", " (Python) decorator"), 676 ("Comment.Single", " (Python) decorator"),
678 ("Text.Whitespace", "\n"), 677 ("Text.Whitespace", "\n"),
679 ], 678 ],
680 pygments.lex( 679 pygments.lex(
681 r"""\ttx-nd<a_Decorator>(p1, p2) \rem (Python) decorator""", 680 r"""\ttx-nd<a_Decorator>(p1, p2) \rem (Python) decorator""",
689 ("Punctuation", ","), 688 ("Punctuation", ","),
690 ("Text", " "), 689 ("Text", " "),
691 ("Name.Entity", "p2"), 690 ("Name.Entity", "p2"),
692 ("Punctuation", ")"), 691 ("Punctuation", ")"),
693 ("Text", " "), 692 ("Text", " "),
694 ("Comment.Single", "▷"), 693 ("Comment.Single", u"▷"),
695 ("Comment.Single", " (Python) annotation"), 694 ("Comment.Single", " (Python) annotation"),
696 ("Text.Whitespace", "\n"), 695 ("Text.Whitespace", "\n"),
697 ], 696 ],
698 pygments.lex( 697 pygments.lex(
699 r"""\ttx-nd[a_Decorator](p1, p2) \rem (Python) annotation""", 698 r"""\ttx-nd[a_Decorator](p1, p2) \rem (Python) annotation""",
755 ("Operator", "~"), 754 ("Operator", "~"),
756 ("Text.Whitespace", "\n"), 755 ("Text.Whitespace", "\n"),
757 ], 756 ],
758 pygments.lex("=!&< >+-*/%|~", self.lexer)) 757 pygments.lex("=!&< >+-*/%|~", self.lexer))
759 758
760 @unittest.skipIf(sys.version_info[0] <= 2, "Unicode issues on Python 2")
761 def test_ascii_math_operator_with_replacements(self): 759 def test_ascii_math_operator_with_replacements(self):
762 self.assertTokenStreamEqualComplete( 760 self.assertTokenStreamEqualComplete(
763 [("Operator", u"⇔"), 761 [("Operator", u"⇔"),
764 ("Text", " "), 762 ("Text", " "),
765 ("Operator", u"⟷"), 763 ("Operator", u"⟷"),
888 886
889 def test_gets_default(self): 887 def test_gets_default(self):
890 self.assertTokenStreamEqualComplete( 888 self.assertTokenStreamEqualComplete(
891 [("Name.Entity", "a"), 889 [("Name.Entity", "a"),
892 ("Text", " "), 890 ("Text", " "),
893 ("Operator", "⟵"), # U+27F5 (Supplemental Arrows-A) 891 ("Operator", u"⟵"), # U+27F5 (Supplemental Arrows-A)
894 ("Text", " "), 892 ("Text", " "),
895 ("Number.Integer", "2"), 893 ("Number.Integer", "2"),
896 ("Text.Whitespace", "\n"), 894 ("Text.Whitespace", "\n"),
897 ], 895 ],
898 pygments.lex(r"a \gets 2", self.lexer)) 896 pygments.lex(r"a \gets 2", self.lexer))