From e02ed390666930ce8640d4cebcac51059e9a34d8 Mon Sep 17 00:00:00 2001 From: Waylan Limberg Date: Thu, 8 Oct 2020 15:33:43 -0400 Subject: [PATCH] Skip tests with pygments version mismatch. If pygments is installed and the version doesn't match the expected version. then any relevant tests will fail. To avoid failing tests due to different output by pygments, those tests will be skipped. The pygments tox env sets the `PYGMENTS_VERSION environment variable, so that env will always run those tests against the expected version. --- .../extensions/test_code_hilite.py | 14 + .../extensions/test_fenced_code.py | 529 +++++++++--------- 2 files changed, 282 insertions(+), 261 deletions(-) diff --git a/tests/test_syntax/extensions/test_code_hilite.py b/tests/test_syntax/extensions/test_code_hilite.py index 3e36ae506..709aa963d 100644 --- a/tests/test_syntax/extensions/test_code_hilite.py +++ b/tests/test_syntax/extensions/test_code_hilite.py @@ -21,6 +21,7 @@ from markdown.test_tools import TestCase from markdown.extensions.codehilite import CodeHiliteExtension, CodeHilite +import os try: import pygments # noqa @@ -28,10 +29,19 @@ except ImportError: has_pygments = False +# The version required by the tests is the version specified and installed in the 'pygments' tox env. +# In any environment where the PYGMENTS_VERSION environment variabe is either not defined or doesn't +# match the version of Pygments installed, all tests which rely in pygments will be skipped. +required_pygments_version = os.environ.get('PYGMENTS_VERSION', '') + class TestCodeHiliteClass(TestCase): """ Test the markdown.extensions.codehilite.CodeHilite class. """ + def setUp(self): + if has_pygments and pygments.__version__ != required_pygments_version: + self.skipTest(f'Pygments=={required_pygments_version} is required') + maxDiff = None def assertOutputEquals(self, source, expected, **options): @@ -340,6 +350,10 @@ def test_codehilite_startinline(self): class TestCodeHiliteExtension(TestCase): """ Test codehilite extension. """ + def setUp(self): + if has_pygments and pygments.__version__ != required_pygments_version: + self.skipTest(f'Pygments=={required_pygments_version} is required') + maxDiff = None def testBasicCodeHilite(self): diff --git a/tests/test_syntax/extensions/test_fenced_code.py b/tests/test_syntax/extensions/test_fenced_code.py index a78c18c0b..ac6ce17ab 100644 --- a/tests/test_syntax/extensions/test_fenced_code.py +++ b/tests/test_syntax/extensions/test_fenced_code.py @@ -23,19 +23,19 @@ import markdown import os +try: + import pygments # noqa + has_pygments = True +except ImportError: + has_pygments = False -class TestFencedCode(TestCase): +# The version required by the tests is the version specified and installed in the 'pygments' tox env. +# In any environment where the PYGMENTS_VERSION environment variabe is either not defined or doesn't +# match the version of Pygments installed, all tests which rely in pygments will be skipped. +required_pygments_version = os.environ.get('PYGMENTS_VERSION', '') - def setUp(self): - # Only set self.has_pygments to True if pygments is installed and the version matches - # the version expected by the tests. The version expected by the tests is the version - # specified and installed in the 'pygments' tox env. Outside of the tox env, an environment - # variable named PYGMENTS_VERSION will need to be defined to force the tests to use pygments. - try: - import pygments # noqa - self.has_pygments = pygments.__version__ == os.environ.get('PYGMENTS_VERSION', '') - except ImportError: - self.has_pygments = False + +class TestFencedCode(TestCase): def testBasicFence(self): self.assertMarkdownRenders( @@ -134,8 +134,255 @@ def testFencedLanguageWithDot(self): extensions=['fenced_code'] ) + def test_fenced_code_in_raw_html(self): + self.assertMarkdownRenders( + self.dedent( + """ +
+ ``` + Begone placeholders! + ``` +
+ """ + ), + self.dedent( + """ +
+ +
Begone placeholders!
+                
+ +
+ """ + ), + extensions=['fenced_code'] + ) + + def testFencedLanguageInAttr(self): + self.assertMarkdownRenders( + self.dedent( + ''' + ``` {.python} + # Some python code + ``` + ''' + ), + self.dedent( + ''' +
# Some python code
+                
+ ''' + ), + extensions=['fenced_code'] + ) + + def testFencedMultipleClassesInAttr(self): + self.assertMarkdownRenders( + self.dedent( + ''' + ``` {.python .foo .bar} + # Some python code + ``` + ''' + ), + self.dedent( + ''' +
# Some python code
+                
+ ''' + ), + extensions=['fenced_code'] + ) + + def testFencedIdInAttr(self): + self.assertMarkdownRenders( + self.dedent( + ''' + ``` { #foo } + # Some python code + ``` + ''' + ), + self.dedent( + ''' +
# Some python code
+                
+ ''' + ), + extensions=['fenced_code'] + ) + + def testFencedIdAndLangInAttr(self): + self.assertMarkdownRenders( + self.dedent( + ''' + ``` { .python #foo } + # Some python code + ``` + ''' + ), + self.dedent( + ''' +
# Some python code
+                
+ ''' + ), + extensions=['fenced_code'] + ) + + def testFencedIdAndLangAndClassInAttr(self): + self.assertMarkdownRenders( + self.dedent( + ''' + ``` { .python #foo .bar } + # Some python code + ``` + ''' + ), + self.dedent( + ''' +
# Some python code
+                
+ ''' + ), + extensions=['fenced_code'] + ) + + def testFencedLanguageIdAndPygmentsDisabledInAttrNoCodehilite(self): + self.assertMarkdownRenders( + self.dedent( + ''' + ``` { .python #foo use_pygments=False } + # Some python code + ``` + ''' + ), + self.dedent( + ''' +
# Some python code
+                
+ ''' + ), + extensions=['fenced_code'] + ) + + def testFencedLanguageIdAndPygmentsEnabledInAttrNoCodehilite(self): + self.assertMarkdownRenders( + self.dedent( + ''' + ``` { .python #foo use_pygments=True } + # Some python code + ``` + ''' + ), + self.dedent( + ''' +
# Some python code
+                
+ ''' + ), + extensions=['fenced_code'] + ) + + def testFencedLanguageNoCodehiliteWithAttrList(self): + self.assertMarkdownRenders( + self.dedent( + ''' + ``` { .python foo=bar } + # Some python code + ``` + ''' + ), + self.dedent( + ''' +
# Some python code
+                
+ ''' + ), + extensions=['fenced_code', 'attr_list'] + ) + + def testFencedLanguagePygmentsDisabledInAttrNoCodehiliteWithAttrList(self): + self.assertMarkdownRenders( + self.dedent( + ''' + ``` { .python foo=bar use_pygments=False } + # Some python code + ``` + ''' + ), + self.dedent( + ''' +
# Some python code
+                
+ ''' + ), + extensions=['fenced_code', 'attr_list'] + ) + + def testFencedLanguagePygmentsEnabledInAttrNoCodehiliteWithAttrList(self): + self.assertMarkdownRenders( + self.dedent( + ''' + ``` { .python foo=bar use_pygments=True } + # Some python code + ``` + ''' + ), + self.dedent( + ''' +
# Some python code
+                
+ ''' + ), + extensions=['fenced_code', 'attr_list'] + ) + + def testFencedLanguageNoPrefix(self): + self.assertMarkdownRenders( + self.dedent( + ''' + ``` python + # Some python code + ``` + ''' + ), + self.dedent( + ''' +
# Some python code
+                
+ ''' + ), + extensions=[markdown.extensions.fenced_code.FencedCodeExtension(lang_prefix='')] + ) + + def testFencedLanguageAltPrefix(self): + self.assertMarkdownRenders( + self.dedent( + ''' + ``` python + # Some python code + ``` + ''' + ), + self.dedent( + ''' +
# Some python code
+                
+ ''' + ), + extensions=[markdown.extensions.fenced_code.FencedCodeExtension(lang_prefix='lang-')] + ) + + +class TestFencedCodeWithCodehilite(TestCase): + + def setUp(self): + if has_pygments and pygments.__version__ != required_pygments_version: + self.skipTest(f'Pygments=={required_pygments_version} is required') + def testFencedCodeWithHighlightLines(self): - if self.has_pygments: + if has_pygments: expected = self.dedent( '''
line 1
@@ -171,7 +418,7 @@ def testFencedCodeWithHighlightLines(self):
         )
 
     def testFencedLanguageAndHighlightLines(self):
-        if self.has_pygments:
+        if has_pygments:
             expected = (
                 '
'
                 'line 1\n'
@@ -227,7 +474,7 @@ def testFencedLanguageAndPygmentsDisabled(self):
         )
 
     def testFencedLanguageDoubleEscape(self):
-        if self.has_pygments:
+        if has_pygments:
             expected = (
                 '
'
                 '<span'
@@ -258,7 +505,7 @@ def testFencedLanguageDoubleEscape(self):
         )
 
     def testFencedAmps(self):
-        if self.has_pygments:
+        if has_pygments:
             expected = self.dedent(
                 '''
                 
&
@@ -293,122 +540,8 @@ def testFencedAmps(self):
             ]
         )
 
-    def test_fenced_code_in_raw_html(self):
-        self.assertMarkdownRenders(
-            self.dedent(
-                """
-                
- ``` - Begone placeholders! - ``` -
- """ - ), - self.dedent( - """ -
- -
Begone placeholders!
-                
- -
- """ - ), - extensions=['fenced_code'] - ) - - def testFencedLanguageInAttr(self): - self.assertMarkdownRenders( - self.dedent( - ''' - ``` {.python} - # Some python code - ``` - ''' - ), - self.dedent( - ''' -
# Some python code
-                
- ''' - ), - extensions=['fenced_code'] - ) - - def testFencedMultipleClassesInAttr(self): - self.assertMarkdownRenders( - self.dedent( - ''' - ``` {.python .foo .bar} - # Some python code - ``` - ''' - ), - self.dedent( - ''' -
# Some python code
-                
- ''' - ), - extensions=['fenced_code'] - ) - - def testFencedIdInAttr(self): - self.assertMarkdownRenders( - self.dedent( - ''' - ``` { #foo } - # Some python code - ``` - ''' - ), - self.dedent( - ''' -
# Some python code
-                
- ''' - ), - extensions=['fenced_code'] - ) - - def testFencedIdAndLangInAttr(self): - self.assertMarkdownRenders( - self.dedent( - ''' - ``` { .python #foo } - # Some python code - ``` - ''' - ), - self.dedent( - ''' -
# Some python code
-                
- ''' - ), - extensions=['fenced_code'] - ) - - def testFencedIdAndLangAndClassInAttr(self): - self.assertMarkdownRenders( - self.dedent( - ''' - ``` { .python #foo .bar } - # Some python code - ``` - ''' - ), - self.dedent( - ''' -
# Some python code
-                
- ''' - ), - extensions=['fenced_code'] - ) - def testFencedCodeWithHighlightLinesInAttr(self): - if self.has_pygments: + if has_pygments: expected = self.dedent( '''
line 1
@@ -444,7 +577,7 @@ def testFencedCodeWithHighlightLinesInAttr(self):
         )
 
     def testFencedLanguageAndHighlightLinesInAttr(self):
-        if self.has_pygments:
+        if has_pygments:
             expected = (
                 '
'
                 'line 1\n'
@@ -517,44 +650,8 @@ def testFencedLanguageIdAndPygmentsDisabledInAttr(self):
             extensions=['codehilite', 'fenced_code']
         )
 
-    def testFencedLanguageIdAndPygmentsDisabledInAttrNoCodehilite(self):
-        self.assertMarkdownRenders(
-            self.dedent(
-                '''
-                ``` { .python #foo use_pygments=False }
-                # Some python code
-                ```
-                '''
-            ),
-            self.dedent(
-                '''
-                
# Some python code
-                
- ''' - ), - extensions=['fenced_code'] - ) - - def testFencedLanguageIdAndPygmentsEnabledInAttrNoCodehilite(self): - self.assertMarkdownRenders( - self.dedent( - ''' - ``` { .python #foo use_pygments=True } - # Some python code - ``` - ''' - ), - self.dedent( - ''' -
# Some python code
-                
- ''' - ), - extensions=['fenced_code'] - ) - def testFencedLanguageAttrCssclass(self): - if self.has_pygments: + if has_pygments: expected = self.dedent( '''
# Some python code
@@ -579,7 +676,7 @@ def testFencedLanguageAttrCssclass(self):
         )
 
     def testFencedLanguageAttrLinenums(self):
-        if self.has_pygments:
+        if has_pygments:
             expected = (
                 ''
                 ''
@@ -606,7 +703,7 @@ def testFencedLanguageAttrLinenums(self):
         )
 
     def testFencedLanguageAttrGuesslang(self):
-        if self.has_pygments:
+        if has_pygments:
             expected = self.dedent(
                 '''
                 
# Some python code
@@ -631,7 +728,7 @@ def testFencedLanguageAttrGuesslang(self):
         )
 
     def testFencedLanguageAttrNoclasses(self):
-        if self.has_pygments:
+        if has_pygments:
             expected = (
                 '
' '
'
@@ -654,93 +751,3 @@ def testFencedLanguageAttrNoclasses(self):
             expected,
             extensions=['codehilite', 'fenced_code']
         )
-
-    def testFencedLanguageNoCodehiliteWithAttrList(self):
-        self.assertMarkdownRenders(
-            self.dedent(
-                '''
-                ``` { .python foo=bar }
-                # Some python code
-                ```
-                '''
-            ),
-            self.dedent(
-                '''
-                
# Some python code
-                
- ''' - ), - extensions=['fenced_code', 'attr_list'] - ) - - def testFencedLanguagePygmentsDisabledInAttrNoCodehiliteWithAttrList(self): - self.assertMarkdownRenders( - self.dedent( - ''' - ``` { .python foo=bar use_pygments=False } - # Some python code - ``` - ''' - ), - self.dedent( - ''' -
# Some python code
-                
- ''' - ), - extensions=['fenced_code', 'attr_list'] - ) - - def testFencedLanguagePygmentsEnabledInAttrNoCodehiliteWithAttrList(self): - self.assertMarkdownRenders( - self.dedent( - ''' - ``` { .python foo=bar use_pygments=True } - # Some python code - ``` - ''' - ), - self.dedent( - ''' -
# Some python code
-                
- ''' - ), - extensions=['fenced_code', 'attr_list'] - ) - - def testFencedLanguageNoPrefix(self): - self.assertMarkdownRenders( - self.dedent( - ''' - ``` python - # Some python code - ``` - ''' - ), - self.dedent( - ''' -
# Some python code
-                
- ''' - ), - extensions=[markdown.extensions.fenced_code.FencedCodeExtension(lang_prefix='')] - ) - - def testFencedLanguageAltPrefix(self): - self.assertMarkdownRenders( - self.dedent( - ''' - ``` python - # Some python code - ``` - ''' - ), - self.dedent( - ''' -
# Some python code
-                
- ''' - ), - extensions=[markdown.extensions.fenced_code.FencedCodeExtension(lang_prefix='lang-')] - )
1