diff --git a/CHANGES b/CHANGES index 9804a021f..2d063d63a 100644 --- a/CHANGES +++ b/CHANGES @@ -65,6 +65,8 @@ Bugs fixed using `any` role and `sphinx.ext.intersphinx` in same time. * #2121: multiple words search doesn't find pages when words across on the page title and the page content. +* #1884, #1885: plug-in html themes cannot inherit another plug-in theme. Thanks to + Suzumizaki. Release 1.3.1 (released Mar 17, 2015) ===================================== diff --git a/sphinx/theming.py b/sphinx/theming.py index 08fdd7d51..0f1a0e226 100644 --- a/sphinx/theming.py +++ b/sphinx/theming.py @@ -136,9 +136,8 @@ class Theme(object): except configparser.NoOptionError: raise ThemeError('theme %r doesn\'t have "inherit" setting' % name) - if inherit in ['alabaster', 'sphinx_rtd_theme']: - # include 'alabaster' or 'sphinx_themes' automatically #1794 - self.load_extra_theme(inherit) + # load inherited theme automatically #1794, #1884, #1885 + self.load_extra_theme(inherit) if inherit == 'none': self.base = None diff --git a/tests/roots/test-double-inheriting-theme/base_themes_dir/base_theme1/theme.conf b/tests/roots/test-double-inheriting-theme/base_themes_dir/base_theme1/theme.conf new file mode 100644 index 000000000..89e03bbda --- /dev/null +++ b/tests/roots/test-double-inheriting-theme/base_themes_dir/base_theme1/theme.conf @@ -0,0 +1,2 @@ +[theme] +inherit = basic diff --git a/tests/roots/test-double-inheriting-theme/base_themes_dir/base_theme2/theme.conf b/tests/roots/test-double-inheriting-theme/base_themes_dir/base_theme2/theme.conf new file mode 100644 index 000000000..a68c01858 --- /dev/null +++ b/tests/roots/test-double-inheriting-theme/base_themes_dir/base_theme2/theme.conf @@ -0,0 +1,2 @@ +[theme] +inherit = base_theme1 diff --git a/tests/roots/test-double-inheriting-theme/conf.py b/tests/roots/test-double-inheriting-theme/conf.py new file mode 100644 index 000000000..dfdccc49b --- /dev/null +++ b/tests/roots/test-double-inheriting-theme/conf.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +import sys, os + +templates_path = ['_templates'] +master_doc = 'index' +html_theme = 'base_theme2' diff --git a/tests/roots/test-double-inheriting-theme/index.rst b/tests/roots/test-double-inheriting-theme/index.rst new file mode 100644 index 000000000..e67f7ff45 --- /dev/null +++ b/tests/roots/test-double-inheriting-theme/index.rst @@ -0,0 +1,3 @@ +============================ +Test double inheriting theme +============================ diff --git a/tests/test_theming.py b/tests/test_theming.py index 45229c842..3467ca2b8 100644 --- a/tests/test_theming.py +++ b/tests/test_theming.py @@ -14,7 +14,7 @@ import zipfile from sphinx.theming import Theme, ThemeError -from util import with_app, raises, TestApp +from util import with_app, raises, mock, path @with_app(confoverrides={'html_theme': 'ziptheme', @@ -79,3 +79,19 @@ def test_js_source(app, status, warning): assert 'Underscore.js {v}'.format(v=v) in underscore_min, msg underscore_src = (app.outdir / '_static' / 'underscore-{v}.js'.format(v=v)).text() assert 'Underscore.js {v}'.format(v=v) in underscore_src, msg + + +def test_double_inheriting_theme(): + from sphinx.theming import load_theme_plugins # load original before patching + + def load_themes(): + roots = path(__file__).abspath().parent / 'roots' + yield roots / 'test-double-inheriting-theme' / 'base_themes_dir' + for t in load_theme_plugins(): + yield t + + @mock.patch('sphinx.theming.load_theme_plugins', side_effect=load_themes) + @with_app(testroot='double-inheriting-theme') + def test_double_inheriting_theme_(app, status, warning, m_): + pass + yield test_double_inheriting_theme_