diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 2fb9c7a..b722d5d 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.7.1 +current_version = 3.8.0 [bumpversion:file:mkdocs_include_markdown_plugin/__init__.py] diff --git a/README.md b/README.md index 7ebbe90..91f28e6 100644 --- a/README.md +++ b/README.md @@ -38,16 +38,27 @@ plugins: > Make sure that you define `include-markdown` before other plugins that could conflict, like [`mkdocs-macros-plugin`][mkdocs-macros-plugin-link]. -### Custom opening and closing tags +### Configuration -The default opening and closing tags are `{%` and `%}`. You can change this -default with the configuration fields `opening_tag` and `closing_tag`: +The global behaviour of the plugin can be customized in the configuration. + +- # **opening_tag** and + **closing_tag**: The default opening and closing tags. By default are + `{%` and `%}`. + +The rest of the options will define the default values passed to arguments +of directives and are documented in the [reference](#reference). ```yaml plugins: - include-markdown: opening_tag: "{!" closing_tag: "!}" + encoding: ascii + preserve_includer_indent: false + dedent: true + trailing_newlines: false + comments: false ``` ### Reference diff --git a/locale/es/README.md b/locale/es/README.md index 835803e..9af7275 100644 --- a/locale/es/README.md +++ b/locale/es/README.md @@ -31,17 +31,26 @@ plugins: > Asegúrate que defines `include-markdown` antes de otros plugins que pudieran entrar en conflicto, como [`mkdocs-macros-plugin`][mkdocs-macros-plugin-link]. -### Etiquetas de apertura y cierre personalizadas +### Configuración -Las etiquetas de apertura y cierre por defecto son `{%` y `%}`. Se puede cambiar -este valor por defecto con los campos de configuración `opening_tag` y -`closing_tag`. +El comportamiento global del plugin puede ser personalizado en la configuración. + +- # **opening_tag** and **closing_tag**: +Las etiquetas de apertura y cierre. Por defecto son `{%` y `%}`. + +El resto de las opciones definirán los valores por defecto pasados a los +argumentos de las directivas y están documentados en la [referencia](#reference). ```yaml plugins: - include-markdown: opening_tag: "{!" closing_tag: "!}" + encoding: ascii + preserve_includer_indent: false + dedent: true + trailing_newlines: false + comments: false ``` ### Referencia diff --git a/locale/es/README.md.po b/locale/es/README.md.po index bbadaf5..ed15914 100644 --- a/locale/es/README.md.po +++ b/locale/es/README.md.po @@ -305,17 +305,6 @@ msgstr "" "envolver con comillas dobles `\"` o simples `'`, que se pueden escapar " "anteponiendo un carácter `\\` como `\\\"` y `\\'`." -msgid "Custom opening and closing tags" -msgstr "Etiquetas de apertura y cierre personalizadas" - -msgid "" -"The default opening and closing tags are `{%` and `%}`. You can change this " -"default with the configuration fields `opening_tag` and `closing_tag`:" -msgstr "" -"Las etiquetas de apertura y cierre por defecto son `{%` y `%}`. Se puede " -"cambiar este valor por defecto con los campos de configuración `opening_tag`" -" y `closing_tag`." - msgid "" "# **encoding** (*utf-8*): Specify the encoding of " @@ -333,3 +322,29 @@ msgstr "" "# **encoding** " "(*utf-8*): Especifica la codificación del archivo incluído. Si no se define," " se usará `utf-8`." + +msgid "Configuration" +msgstr "Configuración" + +msgid "" +"The global behaviour of the plugin can be customized in the configuration." +msgstr "" +"El comportamiento global del plugin puede ser personalizado en la " +"configuración." + +msgid "" +"# **opening_tag** and " +"**closing_tag**: The default opening and closing tags. By default are `{%` " +"and `%}`." +msgstr "" +"# **opening_tag** and " +"**closing_tag**: Las etiquetas de apertura y cierre. Por defecto son `{%` y " +"`%}`." + +msgid "" +"The rest of the options will define the default values passed to arguments " +"of directives and are documented in the [reference](#reference)." +msgstr "" +"El resto de las opciones definirán los valores por defecto pasados a los " +"argumentos de las directivas y están documentados en la " +"[referencia](#reference)." diff --git a/locale/fr/README.md b/locale/fr/README.md index 05d5cdf..944cd55 100644 --- a/locale/fr/README.md +++ b/locale/fr/README.md @@ -31,17 +31,26 @@ plugins: > Assurez-vous de définir `include-markdown` avant d'autres plugins qui pourraient entrer en conflit, comme [`mkdocs-macros-plugin`][mkdocs-macros-plugin-link]. -### Balises d'ouverture et de fermeture personnalisées +### Configuration -Les balises d'ouverture et de fermeture par défaut sont `{%` et `%}`. Vous -pouvez changer ces balises avec les paramètres de configuration `opening_tag` et -`closing_tag`: +Le comportement global du plugin peut être personnalisé dans la configuration. + +- # **opening_tag** and **closing_tag**: +Les balises d'ouverture et de fermeture par défaut. Par défaut sont `{%` et `%}`. + +Le reste des options définira les valeurs par défaut passées aux arguments des +directives et sont documentées dans la [référence](#reference). ```yaml plugins: - include-markdown: opening_tag: "{!" closing_tag: "!}" + encoding: ascii + preserve_includer_indent: false + dedent: true + trailing_newlines: false + comments: false ``` ### Référence diff --git a/locale/fr/README.md.po b/locale/fr/README.md.po index 8b20afc..d39f711 100644 --- a/locale/fr/README.md.po +++ b/locale/fr/README.md.po @@ -305,17 +305,6 @@ msgstr "" "peuvent être entourés de guillemets doubles `\"` ou simples `'`, qui peuvent" " être échappés en leur ajoutant un caractère `\\` comme `\\\"` et `\\'`." -msgid "Custom opening and closing tags" -msgstr "Balises d'ouverture et de fermeture personnalisées" - -msgid "" -"The default opening and closing tags are `{%` and `%}`. You can change this " -"default with the configuration fields `opening_tag` and `closing_tag`:" -msgstr "" -"Les balises d'ouverture et de fermeture par défaut sont `{%` et `%}`. Vous " -"pouvez changer ces balises avec les paramètres de configuration " -"`opening_tag` et `closing_tag`:" - msgid "" "# **encoding** (*utf-8*): Specify the encoding of " @@ -333,3 +322,28 @@ msgstr "" "# **encoding** " "(*utf-8*): Spécifiez l'encodage du fichier inclus. S'il n'est pas défini, " "`utf-8` sera utilisé." + +msgid "Configuration" +msgstr "Configuration" + +msgid "" +"# **opening_tag** and " +"**closing_tag**: The default opening and closing tags. By default are `{%` " +"and `%}`." +msgstr "" +"# **opening_tag** and " +"**closing_tag**: Les balises d'ouverture et de fermeture par défaut. Par " +"défaut sont `{%` et `%}`." + +msgid "" +"The global behaviour of the plugin can be customized in the configuration." +msgstr "" +"Le comportement global du plugin peut être personnalisé dans la " +"configuration." + +msgid "" +"The rest of the options will define the default values passed to arguments " +"of directives and are documented in the [reference](#reference)." +msgstr "" +"Le reste des options définira les valeurs par défaut passées aux arguments " +"des directives et sont documentées dans la [référence](#reference)." diff --git a/mkdocs_include_markdown_plugin/__init__.py b/mkdocs_include_markdown_plugin/__init__.py index a5f51ca..345f426 100644 --- a/mkdocs_include_markdown_plugin/__init__.py +++ b/mkdocs_include_markdown_plugin/__init__.py @@ -1,2 +1,2 @@ __title__ = 'mkdocs_include_markdown_plugin' -__version__ = '3.7.1' +__version__ = '3.8.0' diff --git a/mkdocs_include_markdown_plugin/config.py b/mkdocs_include_markdown_plugin/config.py new file mode 100644 index 0000000..8d7e10d --- /dev/null +++ b/mkdocs_include_markdown_plugin/config.py @@ -0,0 +1,57 @@ +import mkdocs.config.config_options + + +CONFIG_DEFAULTS = { + 'opening_tag': '{%', + 'closing_tag': '%}', + 'encoding': 'utf-8', + 'preserve_includer_indent': True, + 'dedent': False, + 'trailing_newlines': True, + 'comments': True, +} + +CONFIG_SCHEME = ( + ( + 'opening_tag', + mkdocs.config.config_options.Type( + str, default=CONFIG_DEFAULTS['opening_tag'], + ), + ), + ( + 'closing_tag', + mkdocs.config.config_options.Type( + str, default=CONFIG_DEFAULTS['closing_tag'], + ), + ), + ( + 'encoding', + mkdocs.config.config_options.Type( + str, default=CONFIG_DEFAULTS['encoding'], + ), + ), + ( + 'preserve_includer_indent', + mkdocs.config.config_options.Type( + bool, default=CONFIG_DEFAULTS['preserve_includer_indent'], + ), + ), + ( + 'dedent', + mkdocs.config.config_options.Type( + bool, default=CONFIG_DEFAULTS['dedent'], + ), + ), + ( + 'trailing_newlines', + mkdocs.config.config_options.Type( + bool, default=CONFIG_DEFAULTS['trailing_newlines'], + ), + ), + ( + 'comments', + mkdocs.config.config_options.Type( + bool, default=CONFIG_DEFAULTS['comments'], + ), + ), +) diff --git a/mkdocs_include_markdown_plugin/event.py b/mkdocs_include_markdown_plugin/event.py index 41d210d..11b06fa 100644 --- a/mkdocs_include_markdown_plugin/event.py +++ b/mkdocs_include_markdown_plugin/event.py @@ -8,6 +8,7 @@ import textwrap from mkdocs_include_markdown_plugin import process +from mkdocs_include_markdown_plugin.config import CONFIG_DEFAULTS logger = logging.getLogger('mkdocs.plugins.mkdocs_include_markdown_plugin') @@ -64,11 +65,11 @@ 'encoding': str_arg('encoding'), # bool - 'rewrite-relative-urls': bool_arg('rewrite-relative-urls'), 'comments': bool_arg('comments'), 'preserve-includer-indent': bool_arg('preserve-includer-indent'), 'dedent': bool_arg('dedent'), 'trailing-newlines': bool_arg('trailing-newlines'), + 'rewrite-relative-urls': bool_arg('rewrite-relative-urls'), # int 'heading-offset': re.compile(r'heading-offset=(-?\d+)'), @@ -114,6 +115,11 @@ def get_file_content( docs_dir, include_tag_regex, include_markdown_tag_regex, + default_encoding, + default_preserve_includer_indent, + default_dedent, + default_trailing_newlines, + default_comments=CONFIG_DEFAULTS['comments'], cumulative_heading_offset=0, ): @@ -195,15 +201,15 @@ def found_include_tag(match): bool_options = { 'preserve-includer-indent': { - 'value': True, + 'value': default_preserve_includer_indent, 'regex': ARGUMENT_REGEXES['preserve-includer-indent'], }, 'dedent': { - 'value': False, + 'value': default_dedent, 'regex': ARGUMENT_REGEXES['dedent'], }, 'trailing-newlines': { - 'value': True, + 'value': default_trailing_newlines, 'regex': ARGUMENT_REGEXES['trailing-newlines'], }, } @@ -275,7 +281,7 @@ def found_include_tag(match): f'{os.path.relpath(page_src_path, docs_dir)}:{lineno}', ) else: - encoding = 'utf-8' + encoding = default_encoding text_to_include = '' expected_but_any_found = [start is not None, end is not None] @@ -301,6 +307,10 @@ def found_include_tag(match): docs_dir, include_tag_regex, include_markdown_tag_regex, + default_encoding, + default_preserve_includer_indent, + default_dedent, + default_trailing_newlines, ) # trailing newlines right stripping @@ -427,19 +437,19 @@ def found_include_markdown_tag(match): 'regex': ARGUMENT_REGEXES['rewrite-relative-urls'], }, 'comments': { - 'value': True, + 'value': default_comments, 'regex': ARGUMENT_REGEXES['comments'], }, 'preserve-includer-indent': { - 'value': True, + 'value': default_preserve_includer_indent, 'regex': ARGUMENT_REGEXES['preserve-includer-indent'], }, 'dedent': { - 'value': False, + 'value': default_dedent, 'regex': ARGUMENT_REGEXES['dedent'], }, 'trailing-newlines': { - 'value': True, + 'value': default_trailing_newlines, 'regex': ARGUMENT_REGEXES['trailing-newlines'], }, } @@ -515,7 +525,7 @@ def found_include_markdown_tag(match): f'{os.path.relpath(page_src_path, docs_dir)}:{lineno}', ) else: - encoding = 'utf-8' + encoding = default_encoding # heading offset offset = 0 @@ -556,6 +566,11 @@ def found_include_markdown_tag(match): docs_dir, include_tag_regex, include_markdown_tag_regex, + default_encoding, + default_preserve_includer_indent, + default_dedent, + default_trailing_newlines, + default_comments=default_comments, ) # trailing newlines right stripping @@ -645,16 +660,18 @@ def on_page_markdown( markdown, page, docs_dir, - opening_tag='{%', - closing_tag='%}', + config={}, ): + escaped_opening_tag = re.escape( + config.get('opening_tag', CONFIG_DEFAULTS['opening_tag']), + ) + escaped_closing_tag = re.escape( + config.get('closing_tag', CONFIG_DEFAULTS['closing_tag']), + ) - escaped_opening_tag = re.escape(opening_tag) - escaped_closing_tag = re.escape(closing_tag) - - # Replace the substrings "$OPENING_TAG" and "$CLOSING_TAG" from - # "INCLUDE_TAG_REGEX" and "INCLUDE_MARKDOWN_TAG_REGEX" by the effective - # tags + # Replace the substrings OPENING_TAG and CLOSING_TAG from + # INCLUDE_TAG_REGEX and INCLUDE_MARKDOWN_TAG_REGEX by the + # effective tags include_tag_regex = re.compile( INCLUDE_TAG_REGEX.pattern.replace( '$OPENING_TAG', escaped_opening_tag, @@ -675,4 +692,12 @@ def on_page_markdown( docs_dir, include_tag_regex, include_markdown_tag_regex, + config.get('encoding', CONFIG_DEFAULTS['encoding']), + config.get( + 'preserve_includer_indent', + CONFIG_DEFAULTS['preserve_includer_indent'], + ), + config.get('dedent', CONFIG_DEFAULTS['dedent']), + config.get('trailing_newlines', CONFIG_DEFAULTS['trailing_newlines']), + default_comments=config.get('comments', CONFIG_DEFAULTS['comments']), ) diff --git a/mkdocs_include_markdown_plugin/plugin.py b/mkdocs_include_markdown_plugin/plugin.py index 3180dfa..7640e35 100644 --- a/mkdocs_include_markdown_plugin/plugin.py +++ b/mkdocs_include_markdown_plugin/plugin.py @@ -1,21 +1,18 @@ import mkdocs +from mkdocs_include_markdown_plugin.config import CONFIG_SCHEME from mkdocs_include_markdown_plugin.event import ( on_page_markdown as _on_page_markdown, ) class IncludeMarkdownPlugin(mkdocs.plugins.BasePlugin): - config_scheme = ( - ('opening_tag', mkdocs.config.config_options.Type(str, default='{%')), - ('closing_tag', mkdocs.config.config_options.Type(str, default='%}')), - ) + config_scheme = CONFIG_SCHEME def on_page_markdown(self, markdown, page, **kwargs): return _on_page_markdown( markdown, page, kwargs['config']['docs_dir'], - self.config['opening_tag'], - self.config['closing_tag'], + config=self.config, ) diff --git a/setup.cfg b/setup.cfg index eb9750c..88aded5 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = mkdocs_include_markdown_plugin -version = 3.7.1 +version = 3.8.0 description = Mkdocs Markdown includer plugin. long_description = file: README.md long_description_content_type = text/markdown diff --git a/tests/test_arguments.py b/tests/test_arguments.py index d4f83ab..7208a31 100644 --- a/tests/test_arguments.py +++ b/tests/test_arguments.py @@ -1,22 +1,12 @@ import functools import os import re -import sys import pytest from mkdocs_include_markdown_plugin.event import on_page_markdown -from testing_helpers import parametrize_directives - - -double_quotes_windows_path_skip = pytest.mark.skipif( - sys.platform.startswith('win'), - reason=( - 'Double quotes are reserved characters not allowed for' - ' paths under Windows' - ), -) +from testing_helpers import parametrize_directives, unix_only @pytest.mark.parametrize( @@ -129,7 +119,7 @@ def test_invalid_start_end_arguments(directive, page, caplog, tmp_path): assert len(records_messages) == len(expected_args) -@double_quotes_windows_path_skip +@unix_only @parametrize_directives def test_exclude_double_quote_escapes(directive, page, tmp_path): drectory_to_include = tmp_path / 'exclude_double_quote_escapes' @@ -157,7 +147,7 @@ def test_exclude_double_quote_escapes(directive, page, tmp_path): assert result == 'Content that should be included\n' -@double_quotes_windows_path_skip +@unix_only @parametrize_directives def test_invalid_exclude_argument(directive, page, tmp_path, caplog): drectory_to_include = tmp_path / 'exclude_double_quote_escapes' @@ -191,6 +181,29 @@ def test_invalid_exclude_argument(directive, page, tmp_path, caplog): ) +@parametrize_directives +def test_empty_encoding_argument(directive, page, tmp_path, caplog): + page_to_include_filepath = tmp_path / 'included.md' + page_to_include_filepath.write_text('Content to include') + + result = on_page_markdown( + f'''{{% + {directive} "{page_to_include_filepath}" + comments=false + encoding= +%}}''', + page(tmp_path / 'includer.md'), + tmp_path, + ) + assert result == 'Content to include' + + assert len(caplog.records) == 1 + assert caplog.records[0].msg == ( + f"Invalid empty 'encoding' argument in '{directive}'" + ' directive at includer.md:1' + ) + + class TestFilename: double_quoted_filenames = [ 'inc"luded.md', 'inc"lude"d.md', 'included.md"', '"included.md', @@ -199,7 +212,7 @@ class TestFilename: fname.replace('"', "'") for fname in double_quoted_filenames ] - @double_quotes_windows_path_skip + @unix_only @parametrize_directives @pytest.mark.parametrize('filename', double_quoted_filenames) def test_not_escaped_double_quotes( @@ -221,7 +234,7 @@ def test_not_escaped_double_quotes( caplog.records[0].msg, ) - @double_quotes_windows_path_skip + @unix_only @parametrize_directives @pytest.mark.parametrize('filename', double_quoted_filenames) def test_escaped_double_quotes( @@ -268,7 +281,7 @@ def test_escaped_single_quotes( ) assert result == included_content - @double_quotes_windows_path_skip + @unix_only @parametrize_directives @pytest.mark.parametrize('filename', double_quoted_filenames) def test_unescaped_double_quotes( @@ -307,7 +320,7 @@ def test_unescaped_single_quotes( ) assert result == included_content - @double_quotes_windows_path_skip + @unix_only @parametrize_directives @pytest.mark.parametrize( 'filename', ["inc'luded\".md", "''i\"nc\"lude'd.md"], diff --git a/tests/test_config.py b/tests/test_config.py new file mode 100644 index 0000000..40280be --- /dev/null +++ b/tests/test_config.py @@ -0,0 +1,216 @@ +'''``include`` directive tests.''' + +import pytest + +from mkdocs_include_markdown_plugin.event import on_page_markdown + +from testing_helpers import unix_only + + +TESTS_ARGUMENTS = ( + 'includer_schema', + 'content_to_include', + 'expected_result', + 'config', +) + + +def _run_test( + includer_schema, + content_to_include, + expected_result, + config, + page, + caplog, + tmp_path, +): + included_filepath = tmp_path / 'included.md' + includer_filepath = tmp_path / 'includer.md' + + included_filepath.write_text(content_to_include) + includer_filepath.write_text( + content_to_include.replace('{filepath}', included_filepath.as_posix()), + ) + + # assert content + page_content = includer_schema.replace( + '{filepath}', + included_filepath.as_posix(), + ) + includer_filepath.write_text(page_content) + + expected_result = expected_result.replace( + '{filepath}', + included_filepath.as_posix(), + ) + + assert ( + on_page_markdown( + page_content, + page(includer_filepath), + tmp_path, + config, + ) + == expected_result + ) + + assert len(caplog.records) == 0 + + +@pytest.mark.parametrize( + TESTS_ARGUMENTS, + ( + # opening_tag and closing_tag + pytest.param( + '# Header\n\n{! include "{filepath}" !}\n', + 'This must be included.', + '# Header\n\nThis must be included.\n', + {'opening_tag': '{!', 'closing_tag': '!}'}, + id='custom-tag {! ... !}', + ), + pytest.param( + '# Header\n\n{* include "{filepath}" *}\n', + 'This must be included.', + '# Header\n\nThis must be included.\n', + {'opening_tag': '{*', 'closing_tag': '*}'}, + id='custom-tag {* ... *}', + ), + pytest.param( + '# Header\n\n#INC[ include "{filepath}" ]\n', + 'This must be included.', + '# Header\n\nThis must be included.\n', + {'opening_tag': '#INC[', 'closing_tag': ']'}, + id='custom-tag #INC[ ...]', + ), + pytest.param( + '# Header\n\n.^$*+-?{}[]\\|():<>=!/#%,; include "{filepath}" }\n', + 'This must be included.', + '# Header\n\nThis must be included.\n', + {'opening_tag': '.^$*+-?{}[]\\|():<>=!/#%,;', 'closing_tag': '}'}, + id='custom-tag-all-escaped-char', + ), + + # preserve_includer_indent + pytest.param( + ' {% include "{filepath}" %}', + 'foo\nbar\n', + ' foo\n bar\n', + {}, + id='default-preserve_includer_indent', + ), + pytest.param( + ' {% include "{filepath}" %}', + 'foo\nbar\n', + ' foo\nbar\n', + {'preserve_includer_indent': False}, + id='custom-preserve_includer_indent', + ), + + # dedent + pytest.param( + '{% include "{filepath}" %}', + 'foo\n bar\n', + 'foo\n bar\n', + {}, + id='default-dedent', + ), + pytest.param( + '{% include "{filepath}" %}', + ' foo\n bar\n', + 'foo\nbar\n', + {'dedent': True}, + id='custom-dedent', + ), + + # trailing_newlines + pytest.param( + '{% include "{filepath}" %}', + 'foo\n\n\n', + 'foo\n\n\n', + {}, + id='default-trailing_newlines', + ), + pytest.param( + '{% include "{filepath}" %}', + 'foo\n\n\n', + 'foo', + {'trailing_newlines': False}, + id='custom-trailing_newlines', + ), + + # comments + pytest.param( + '{% include-markdown "{filepath}" %}', + 'foo\n', + '\nfoo\n\n', + {}, + id='default-comments', + ), + pytest.param( + '{% include-markdown "{filepath}" %}', + 'foo\n', + 'foo\n', + {'comments': False}, + id='custom-comments', + ), + ), +) +def test_config_options( + includer_schema, + content_to_include, + expected_result, + config, + page, + caplog, + tmp_path, +): + return _run_test( + includer_schema, + content_to_include, + expected_result, + config, + page, + caplog, + tmp_path, + ) + + +@unix_only +@pytest.mark.parametrize( + TESTS_ARGUMENTS, + ( + # encoding + pytest.param( + '# Header\n\n{% include "{filepath}" %}', + 'bóg wąż wąską dróżką', + '# Header\n\nbóg wąż wąską dróżką', + {}, + id='default-encoding', + ), + pytest.param( + '# Header\n\n{% include "{filepath}" %}', + 'bóg wąż wąską dróżką', + '# Header\n\nbĂłg wÄ…ĹĽ wÄ…skÄ… dróżkÄ…', + {'encoding': 'cp1250'}, + id='custom-encoding', + ), + ), +) +def test_config_encoding_option( + includer_schema, + content_to_include, + expected_result, + config, + page, + caplog, + tmp_path, +): + return _run_test( + includer_schema, + content_to_include, + expected_result, + config, + page, + caplog, + tmp_path, + ) diff --git a/tests/test_encoding.py b/tests/test_encoding.py index 7681cdb..8bd8f1b 100644 --- a/tests/test_encoding.py +++ b/tests/test_encoding.py @@ -1,10 +1,8 @@ -import sys - import pytest from mkdocs_include_markdown_plugin.event import on_page_markdown -from testing_helpers import parametrize_directives +from testing_helpers import parametrize_directives, unix_only @parametrize_directives @@ -31,10 +29,7 @@ def test_encoding(directive, page, tmp_path): ) -@pytest.mark.skipif( - sys.platform != 'linux', - reason='On Windows CI the utf-8 encoding does not work', -) +@unix_only @parametrize_directives def test_default_encoding(directive, page, tmp_path): page_to_include_file = tmp_path / 'included.md' @@ -49,7 +44,7 @@ def test_default_encoding(directive, page, tmp_path): f'''{{% {directive} "{page_to_include_file}" comments=false - start='' + start="" end="" %}}''', page(tmp_path / 'includer.md'), @@ -58,10 +53,7 @@ def test_default_encoding(directive, page, tmp_path): assert result == '\nContent to include\n' -@pytest.mark.skipif( - sys.platform != 'linux', - reason='On Windows CI the utf-8 encoding does not work', -) +@unix_only @parametrize_directives def test_explicit_default_encoding(directive, page, tmp_path): page_to_include_file = tmp_path / 'included.md' diff --git a/tests/test_tags.py b/tests/test_tags.py deleted file mode 100644 index 2f71779..0000000 --- a/tests/test_tags.py +++ /dev/null @@ -1,81 +0,0 @@ -'''``include`` directive tests.''' - -import pytest - -from mkdocs_include_markdown_plugin.event import on_page_markdown - - -@pytest.mark.parametrize( - ( - 'includer_schema', - 'content_to_include', - 'expected_result', - 'tags', - ), - ( - pytest.param( - '# Header\n\n{! include "{filepath}" !}\n', - 'This must be included.', - '# Header\n\nThis must be included.\n', - ('{!', '!}'), - id='custom-tag {! ... !}', - ), - pytest.param( - '# Header\n\n{* include "{filepath}" *}\n', - 'This must be included.', - '# Header\n\nThis must be included.\n', - ('{*', '*}'), - id='custom-tag {* ... *}', - ), - pytest.param( - '# Header\n\n#INC[ include "{filepath}" ]\n', - 'This must be included.', - '# Header\n\nThis must be included.\n', - ('#INC[', ']'), - id='custom-tag #INC[ ...]', - ), - pytest.param( - '# Header\n\n.^$*+-?{}[]\\|():<>=!/#%,; include "{filepath}" }\n', - 'This must be included.', - '# Header\n\nThis must be included.\n', - ('.^$*+-?{}[]\\|():<>=!/#%,;', '}'), - id='custom-tag-all-escaped-char', - ), - ), -) -def test_include( - includer_schema, - content_to_include, - expected_result, - tags, - page, - caplog, - tmp_path, -): - included_filepath = tmp_path / 'included.md' - includer_filepath = tmp_path / 'includer.md' - - included_filepath.write_text(content_to_include) - includer_filepath.write_text( - content_to_include.replace('{filepath}', included_filepath.as_posix()), - ) - - # assert content - page_content = includer_schema.replace( - '{filepath}', - included_filepath.as_posix(), - ) - includer_filepath.write_text(page_content) - - assert ( - on_page_markdown( - page_content, - page(includer_filepath), - tmp_path, - opening_tag=tags[0], - closing_tag=tags[1], - ) - == expected_result - ) - - assert len(caplog.records) == 0 diff --git a/tests/testing_helpers.py b/tests/testing_helpers.py index 87c1cb2..de0a666 100644 --- a/tests/testing_helpers.py +++ b/tests/testing_helpers.py @@ -1,4 +1,5 @@ import os +import sys import pytest @@ -9,4 +10,9 @@ ids=('directive=include', 'directive=include-markdown'), ) +unix_only = pytest.mark.skipif( + sys.platform.startswith('win'), + reason='Test only supported on Unix systems', +) + rootdir = os.path.join(os.path.dirname(__file__), '..')