diff --git a/mkdocs/config/config_options.py b/mkdocs/config/config_options.py
index cb95e741..c0c827ff 100644
--- a/mkdocs/config/config_options.py
+++ b/mkdocs/config/config_options.py
@@ -945,11 +945,18 @@ class ExtraScriptValue(Config):
         return self.path
 
 
-class ExtraScript(SubConfig[ExtraScriptValue]):
-    def run_validation(self, value: object) -> ExtraScriptValue:
+class ExtraScript(BaseConfigOption[Union[ExtraScriptValue, str]]):
+    def __init__(self):
+        super().__init__()
+        self.option_type = SubConfig[ExtraScriptValue]()
+
+    def run_validation(self, value: object) -> ExtraScriptValue | str:
+        self.option_type.warnings = self.warnings
         if isinstance(value, str):
-            value = {'path': value, 'type': 'module' if value.endswith('.mjs') else ''}
-        return super().run_validation(value)
+            if value.endswith('.mjs'):
+                return self.option_type.run_validation({'path': value, 'type': 'module'})
+            return value
+        return self.option_type.run_validation(value)
 
 
 class MarkdownExtensions(OptionallyRequired[List[str]]):
diff --git a/mkdocs/structure/pages.py b/mkdocs/structure/pages.py
index 34c0bc76..e42faffc 100644
--- a/mkdocs/structure/pages.py
+++ b/mkdocs/structure/pages.py
@@ -437,7 +437,7 @@ class _ExtractTitleTreeprocessor(markdown.treeprocessors.Treeprocessor):
         for el in root:
             if el.tag == 'h1':
                 # Drop anchorlink from the element, if present.
-                if len(el) > 0 and el[-1].tag == 'a' and not (el.tail or '').strip():
+                if len(el) > 0 and el[-1].tag == 'a' and not (el[-1].tail or '').strip():
                     el = copy.copy(el)
                     del el[-1]
                 # Extract the text only, recursively.
diff --git a/readthedocs.yml b/readthedocs.yml
deleted file mode 100644
index ae64ca7f..00000000
--- a/readthedocs.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-build:
-  image: latest
-
-python:
-  setup_py_install: true
-
-requirements_file: requirements/project.txt

diff --git a/mkdocs/tests/config/config_options_tests.py b/mkdocs/tests/config/config_options_tests.py
index abd7cb20..6101c2e5 100644
--- a/mkdocs/tests/config/config_options_tests.py
+++ b/mkdocs/tests/config/config_options_tests.py
@@ -9,7 +9,7 @@ import re
 import sys
 import textwrap
 import unittest
-from typing import TYPE_CHECKING, Any, Dict, List, Optional, TypeVar
+from typing import TYPE_CHECKING, Any, Dict, List, Optional, TypeVar, Union
 from unittest.mock import patch
 
 if TYPE_CHECKING:
@@ -700,14 +700,14 @@ class ExtraScriptsTest(TestCase):
             option = c.ListOfItems(c.ExtraScript(), default=[])
 
         conf = self.get_config(Schema, {'option': ['foo.js', {'path': 'bar.js', 'async': True}]})
-        assert_type(conf.option, List[c.ExtraScriptValue])
+        assert_type(conf.option, List[Union[c.ExtraScriptValue, str]])
         self.assertEqual(len(conf.option), 2)
-        self.assertIsInstance(conf.option[0], c.ExtraScriptValue)
+        self.assertIsInstance(conf.option[1], c.ExtraScriptValue)
         self.assertEqual(
-            [(x.path, x.type, x.defer, x.async_) for x in conf.option],
+            conf.option,
             [
-                ('foo.js', '', False, False),
-                ('bar.js', '', False, True),
+                'foo.js',
+                {'path': 'bar.js', 'type': '', 'defer': False, 'async': True},
             ],
         )
 
@@ -718,14 +718,14 @@ class ExtraScriptsTest(TestCase):
         conf = self.get_config(
             Schema, {'option': ['foo.mjs', {'path': 'bar.js', 'type': 'module'}]}
         )
-        assert_type(conf.option, List[c.ExtraScriptValue])
+        assert_type(conf.option, List[Union[c.ExtraScriptValue, str]])
         self.assertEqual(len(conf.option), 2)
         self.assertIsInstance(conf.option[0], c.ExtraScriptValue)
         self.assertEqual(
-            [(x.path, x.type, x.defer, x.async_) for x in conf.option],
+            conf.option,
             [
-                ('foo.mjs', 'module', False, False),
-                ('bar.js', 'module', False, False),
+                {'path': 'foo.mjs', 'type': 'module', 'defer': False, 'async': False},
+                {'path': 'bar.js', 'type': 'module', 'defer': False, 'async': False},
             ],
         )
 
@@ -748,8 +748,8 @@ class ExtraScriptsTest(TestCase):
             warnings=dict(option="Sub-option 'foo': Unrecognised configuration name: foo"),
         )
         self.assertEqual(
-            [(x.path, x.type, x.defer, x.async_) for x in conf.option],
-            [('foo.js', '', False, False)],
+            conf.option,
+            [{'path': 'foo.js', 'type': '', 'defer': False, 'async': False, 'foo': 'bar'}],
         )
 
 

Unhashable type: 'ExtraScriptValue' Error
I have been encountering the following error when I add an extra_javascript to my yml file:
```
INFO    -  DeprecationWarning: warning_filter doesn't do anything since MkDocs 1.2 and will be removed soon. All messages on the
           `mkdocs` logger get counted automatically.
             File
           "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs_print_site_plugin/plugin.py",
           line 10, in <module>
               from mkdocs.utils import write_file, copy_file, get_relative_url, warning_filter
             File
           "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs/utils/__init__.py",
           line 453, in __getattr__
               warnings.warn(
INFO    -  Building documentation...
INFO    -  Cleaning site directory
INFO    -  The following pages exist in the docs directory, but are not included in the "nav" configuration:
             - pages/integration/export.md
Traceback (most recent call last):
  File "/home/mouhand/work_projects/service-observatory-backend/env/bin/mkdocs", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs/__main__.py", line 270, in serve_command
    serve.serve(**kwargs)
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs/commands/serve.py", line 98, in serve
    builder(config)
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs/commands/serve.py", line 79, in builder
    build(config, live_server=None if is_clean else server, dirty=is_dirty)
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs/commands/build.py", line 340, in build
    _build_theme_template(template, env, files, config, nav)
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs/commands/build.py", line 110, in _build_theme_template
    output = _build_template(template_name, template, files, config, nav)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs/commands/build.py", line 87, in _build_template
    context = config.plugins.on_template_context(context, template_name=name, config=config)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs/plugins.py", line 555, in on_template_context
    return self.run_event(
           ^^^^^^^^^^^^^^^
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs/plugins.py", line 507, in run_event
    result = method(item, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs_print_site_plugin/plugin.py", line 288, in on_template_context
    self.context['extra_javascript'] = [get_relative_url(f, self.print_page.file.url) for f in config.get('extra_javascript')]
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs_print_site_plugin/plugin.py", line 288, in <listcomp>
    self.context['extra_javascript'] = [get_relative_url(f, self.print_page.file.url) for f in config.get('extra_javascript')]
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mouhand/work_projects/service-observatory-backend/env/lib/python3.11/site-packages/mkdocs/utils/__init__.py", line 243, in get_relative_url
    dest_parts = _norm_parts(url)
                 ^^^^^^^^^^^^^^^^
TypeError: unhashable type: 'ExtraScriptValue'
```
in my mkdocs.yml:
```
extra_javascript:
  - javascripts/extra.js
```
mkdocs/tests/config/config_options_tests.py::ExtraScriptsTest::test_js_async
mkdocs/tests/config/config_options_tests.py::TypeTest::test_length mkdocs/tests/config/config_options_tests.py::TypeTest::test_multiple_types mkdocs/tests/config/config_options_tests.py::TypeTest::test_optional_with_default mkdocs/tests/config/config_options_tests.py::TypeTest::test_single_type mkdocs/tests/config/config_options_tests.py::ChoiceTest::test_default mkdocs/tests/config/config_options_tests.py::ChoiceTest::test_invalid_choice mkdocs/tests/config/config_options_tests.py::ChoiceTest::test_invalid_choices mkdocs/tests/config/config_options_tests.py::ChoiceTest::test_invalid_default mkdocs/tests/config/config_options_tests.py::ChoiceTest::test_optional mkdocs/tests/config/config_options_tests.py::ChoiceTest::test_required mkdocs/tests/config/config_options_tests.py::DeprecatedTest::test_deprecated_option_message mkdocs/tests/config/config_options_tests.py::DeprecatedTest::test_deprecated_option_move mkdocs/tests/config/config_options_tests.py::DeprecatedTest::test_deprecated_option_move_complex mkdocs/tests/config/config_options_tests.py::DeprecatedTest::test_deprecated_option_move_existing mkdocs/tests/config/config_options_tests.py::DeprecatedTest::test_deprecated_option_move_invalid mkdocs/tests/config/config_options_tests.py::DeprecatedTest::test_deprecated_option_simple mkdocs/tests/config/config_options_tests.py::DeprecatedTest::test_deprecated_option_with_invalid_type mkdocs/tests/config/config_options_tests.py::DeprecatedTest::test_deprecated_option_with_type mkdocs/tests/config/config_options_tests.py::DeprecatedTest::test_deprecated_option_with_type_undefined mkdocs/tests/config/config_options_tests.py::DeprecatedTest::test_removed_option mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_default_address mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_invalid_address_format mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_invalid_address_missing_port mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_invalid_address_port mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_invalid_address_range mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_invalid_address_type mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_invalid_leading_zeros mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_named_address mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_unsupported_IPv6_address mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_unsupported_address mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_valid_IPv6_address mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_valid_address mkdocs/tests/config/config_options_tests.py::IpAddressTest::test_valid_full_IPv6_address mkdocs/tests/config/config_options_tests.py::URLTest::test_invalid_type mkdocs/tests/config/config_options_tests.py::URLTest::test_invalid_url mkdocs/tests/config/config_options_tests.py::URLTest::test_optional mkdocs/tests/config/config_options_tests.py::URLTest::test_valid_url mkdocs/tests/config/config_options_tests.py::URLTest::test_valid_url_is_dir mkdocs/tests/config/config_options_tests.py::EditURITest::test_edit_uri_bitbucket mkdocs/tests/config/config_options_tests.py::EditURITest::test_edit_uri_custom mkdocs/tests/config/config_options_tests.py::EditURITest::test_edit_uri_github mkdocs/tests/config/config_options_tests.py::EditURITest::test_edit_uri_gitlab mkdocs/tests/config/config_options_tests.py::EditURITest::test_edit_uri_template_errors mkdocs/tests/config/config_options_tests.py::EditURITest::test_edit_uri_template_ok mkdocs/tests/config/config_options_tests.py::EditURITest::test_edit_uri_template_warning mkdocs/tests/config/config_options_tests.py::EditURITest::test_repo_name_bitbucket mkdocs/tests/config/config_options_tests.py::EditURITest::test_repo_name_custom mkdocs/tests/config/config_options_tests.py::EditURITest::test_repo_name_custom_and_empty_edit_uri mkdocs/tests/config/config_options_tests.py::EditURITest::test_repo_name_github mkdocs/tests/config/config_options_tests.py::EditURITest::test_repo_name_gitlab mkdocs/tests/config/config_options_tests.py::ListOfItemsTest::test_combined_float_type mkdocs/tests/config/config_options_tests.py::ListOfItemsTest::test_int_type mkdocs/tests/config/config_options_tests.py::ListOfItemsTest::test_list_default mkdocs/tests/config/config_options_tests.py::ListOfItemsTest::test_list_of_optional mkdocs/tests/config/config_options_tests.py::ListOfItemsTest::test_none_without_default mkdocs/tests/config/config_options_tests.py::ListOfItemsTest::test_optional mkdocs/tests/config/config_options_tests.py::ListOfItemsTest::test_post_validation_error mkdocs/tests/config/config_options_tests.py::ListOfItemsTest::test_string_not_a_list_of_strings mkdocs/tests/config/config_options_tests.py::ListOfItemsTest::test_warning mkdocs/tests/config/config_options_tests.py::ExtraScriptsTest::test_mjs mkdocs/tests/config/config_options_tests.py::ExtraScriptsTest::test_unknown_key mkdocs/tests/config/config_options_tests.py::ExtraScriptsTest::test_wrong_type mkdocs/tests/config/config_options_tests.py::DictOfItemsTest::test_all_keys_are_strings mkdocs/tests/config/config_options_tests.py::DictOfItemsTest::test_combined_float_type mkdocs/tests/config/config_options_tests.py::DictOfItemsTest::test_dict_default mkdocs/tests/config/config_options_tests.py::DictOfItemsTest::test_dict_of_optional mkdocs/tests/config/config_options_tests.py::DictOfItemsTest::test_int_type mkdocs/tests/config/config_options_tests.py::DictOfItemsTest::test_none_without_default mkdocs/tests/config/config_options_tests.py::DictOfItemsTest::test_optional mkdocs/tests/config/config_options_tests.py::DictOfItemsTest::test_post_validation_error mkdocs/tests/config/config_options_tests.py::DictOfItemsTest::test_string_not_a_dict_of_strings mkdocs/tests/config/config_options_tests.py::FilesystemObjectTest::test_config_dir_prepended mkdocs/tests/config/config_options_tests.py::FilesystemObjectTest::test_dir_bytes mkdocs/tests/config/config_options_tests.py::FilesystemObjectTest::test_incorrect_type_error mkdocs/tests/config/config_options_tests.py::FilesystemObjectTest::test_missing_but_required mkdocs/tests/config/config_options_tests.py::FilesystemObjectTest::test_missing_without_exists mkdocs/tests/config/config_options_tests.py::FilesystemObjectTest::test_not_a_dir mkdocs/tests/config/config_options_tests.py::FilesystemObjectTest::test_not_a_file mkdocs/tests/config/config_options_tests.py::FilesystemObjectTest::test_site_dir_is_config_dir_fails mkdocs/tests/config/config_options_tests.py::FilesystemObjectTest::test_valid_dir mkdocs/tests/config/config_options_tests.py::FilesystemObjectTest::test_valid_file mkdocs/tests/config/config_options_tests.py::FilesystemObjectTest::test_with_unicode mkdocs/tests/config/config_options_tests.py::ListOfPathsTest::test_empty_list mkdocs/tests/config/config_options_tests.py::ListOfPathsTest::test_file mkdocs/tests/config/config_options_tests.py::ListOfPathsTest::test_missing_path mkdocs/tests/config/config_options_tests.py::ListOfPathsTest::test_non_list mkdocs/tests/config/config_options_tests.py::ListOfPathsTest::test_non_path mkdocs/tests/config/config_options_tests.py::ListOfPathsTest::test_none mkdocs/tests/config/config_options_tests.py::ListOfPathsTest::test_paths_localized_to_config mkdocs/tests/config/config_options_tests.py::ListOfPathsTest::test_valid_path mkdocs/tests/config/config_options_tests.py::SiteDirTest::test_common_prefix mkdocs/tests/config/config_options_tests.py::SiteDirTest::test_doc_dir_in_site_dir mkdocs/tests/config/config_options_tests.py::SiteDirTest::test_site_dir_in_docs_dir mkdocs/tests/config/config_options_tests.py::ThemeTest::test_post_validation_inexisting_custom_dir mkdocs/tests/config/config_options_tests.py::ThemeTest::test_post_validation_locale mkdocs/tests/config/config_options_tests.py::ThemeTest::test_post_validation_locale_invalid_type mkdocs/tests/config/config_options_tests.py::ThemeTest::test_post_validation_locale_none mkdocs/tests/config/config_options_tests.py::ThemeTest::test_post_validation_none_theme_name_and_missing_custom_dir mkdocs/tests/config/config_options_tests.py::ThemeTest::test_theme_as_complex_config mkdocs/tests/config/config_options_tests.py::ThemeTest::test_theme_as_simple_config mkdocs/tests/config/config_options_tests.py::ThemeTest::test_theme_as_string mkdocs/tests/config/config_options_tests.py::ThemeTest::test_theme_config_missing_name mkdocs/tests/config/config_options_tests.py::ThemeTest::test_theme_default mkdocs/tests/config/config_options_tests.py::ThemeTest::test_theme_invalid_type mkdocs/tests/config/config_options_tests.py::ThemeTest::test_theme_name_is_none mkdocs/tests/config/config_options_tests.py::ThemeTest::test_uninstalled_theme_as_config mkdocs/tests/config/config_options_tests.py::ThemeTest::test_uninstalled_theme_as_string mkdocs/tests/config/config_options_tests.py::NavTest::test_invalid_children_config_int mkdocs/tests/config/config_options_tests.py::NavTest::test_invalid_children_config_none mkdocs/tests/config/config_options_tests.py::NavTest::test_invalid_children_empty_dict mkdocs/tests/config/config_options_tests.py::NavTest::test_invalid_children_oversized_dict mkdocs/tests/config/config_options_tests.py::NavTest::test_invalid_item_int mkdocs/tests/config/config_options_tests.py::NavTest::test_invalid_item_none mkdocs/tests/config/config_options_tests.py::NavTest::test_invalid_nested_list mkdocs/tests/config/config_options_tests.py::NavTest::test_invalid_type_dict mkdocs/tests/config/config_options_tests.py::NavTest::test_invalid_type_int mkdocs/tests/config/config_options_tests.py::NavTest::test_normal_nav mkdocs/tests/config/config_options_tests.py::NavTest::test_old_format mkdocs/tests/config/config_options_tests.py::NavTest::test_provided_dict mkdocs/tests/config/config_options_tests.py::NavTest::test_provided_empty mkdocs/tests/config/config_options_tests.py::NavTest::test_warns_for_dict mkdocs/tests/config/config_options_tests.py::PrivateTest::test_defined mkdocs/tests/config/config_options_tests.py::SubConfigTest::test_config_file_path_pass_through mkdocs/tests/config/config_options_tests.py::SubConfigTest::test_default mkdocs/tests/config/config_options_tests.py::SubConfigTest::test_optional mkdocs/tests/config/config_options_tests.py::SubConfigTest::test_required mkdocs/tests/config/config_options_tests.py::SubConfigTest::test_subconfig_invalid_option mkdocs/tests/config/config_options_tests.py::SubConfigTest::test_subconfig_normal mkdocs/tests/config/config_options_tests.py::SubConfigTest::test_subconfig_unknown_option mkdocs/tests/config/config_options_tests.py::SubConfigTest::test_subconfig_with_multiple_items mkdocs/tests/config/config_options_tests.py::SubConfigTest::test_subconfig_wrong_type mkdocs/tests/config/config_options_tests.py::NestedSubConfigTest::test_sets_nested_and_not_nested mkdocs/tests/config/config_options_tests.py::NestedSubConfigTest::test_sets_nested_different mkdocs/tests/config/config_options_tests.py::NestedSubConfigTest::test_sets_nested_not_dict mkdocs/tests/config/config_options_tests.py::NestedSubConfigTest::test_sets_only_one_nested mkdocs/tests/config/config_options_tests.py::NestedSubConfigTest::test_unspecified mkdocs/tests/config/config_options_tests.py::NestedSubConfigTest::test_wrong_key_nested mkdocs/tests/config/config_options_tests.py::NestedSubConfigTest::test_wrong_type_nested mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_builtins mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_builtins_config mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_configkey mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_dict_of_dicts mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_duplicates mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_invalid_config_item mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_invalid_config_option mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_invalid_dict_item mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_list_dicts mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_missing_default mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_mixed_list mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_multiple_markdown_config_instances mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_none mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_not_list mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_simple_list mkdocs/tests/config/config_options_tests.py::MarkdownExtensionsTest::test_unknown_extension mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_as_dict mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_empty_list_with_default mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_empty_list_with_empty_default mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_multivalue_dict mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_none_with_default mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_none_with_empty_default mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_not_list mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_not_string_or_dict mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_options_not_dict mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_sub_error mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_sub_warning mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_uninstalled mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_with_deduced_theme_namespace mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_with_deduced_theme_namespace_overridden mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_with_explicit_empty_namespace mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_with_explicit_theme_namespace mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_with_multiple_instances mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_with_multiple_instances_and_warning mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_with_options mkdocs/tests/config/config_options_tests.py::PluginsTest::test_plugin_config_without_options mkdocs/tests/config/config_options_tests.py::HooksTest::test_hooks mkdocs/tests/config/config_options_tests.py::HooksTest::test_hooks_wrong_type mkdocs/tests/config/config_options_tests.py::SchemaTest::test_copy mkdocs/tests/config/config_options_tests.py::SchemaTest::test_subclass