88
99from sphinx .builders .html import StandaloneHTMLBuilder
1010from sphinx .builders .latex import LaTeXBuilder
11+ from sphinx .config import Config
1112from sphinx .environment import (
1213 CONFIG_CHANGED ,
1314 CONFIG_EXTENSIONS_CHANGED ,
1415 CONFIG_NEW ,
1516 CONFIG_OK ,
17+ _differing_config_keys ,
1618)
19+ from sphinx .util .console import strip_colors
1720
1821
1922@pytest .mark .sphinx ('dummy' , testroot = 'basic' )
@@ -24,13 +27,17 @@ def test_config_status(make_app, app_params):
2427 app1 = make_app (* args , freshenv = True , ** kwargs )
2528 assert app1 .env .config_status == CONFIG_NEW
2629 app1 .build ()
27- assert '[new config] 1 added' in app1 ._status .getvalue ()
30+ output = strip_colors (app1 .status .getvalue ())
31+ # assert 'The configuration has changed' not in output
32+ assert '[new config] 1 added' in output
2833
2934 # incremental build (no config changed)
3035 app2 = make_app (* args , ** kwargs )
3136 assert app2 .env .config_status == CONFIG_OK
3237 app2 .build ()
33- assert '0 added, 0 changed, 0 removed' in app2 ._status .getvalue ()
38+ output = strip_colors (app2 .status .getvalue ())
39+ assert 'The configuration has changed' not in output
40+ assert '0 added, 0 changed, 0 removed' in output
3441
3542 # incremental build (config entry changed)
3643 app3 = make_app (* args , confoverrides = {'root_doc' : 'indexx' }, ** kwargs )
@@ -40,7 +47,9 @@ def test_config_status(make_app, app_params):
4047 assert app3 .env .config_status == CONFIG_CHANGED
4148 app3 .build ()
4249 shutil .move (fname [:- 4 ] + 'x.rst' , fname )
43- assert "[config changed ('master_doc')] 1 added" in app3 ._status .getvalue ()
50+ output = strip_colors (app3 .status .getvalue ())
51+ assert 'The configuration has changed' in output
52+ assert "[config changed ('master_doc')] 1 added," in output
4453
4554 # incremental build (extension changed)
4655 app4 = make_app (
@@ -49,7 +58,9 @@ def test_config_status(make_app, app_params):
4958 assert app4 .env .config_status == CONFIG_EXTENSIONS_CHANGED
5059 app4 .build ()
5160 want_str = "[extensions changed ('sphinx.ext.autodoc')] 1 added"
52- assert want_str in app4 ._status .getvalue ()
61+ output = strip_colors (app4 .status .getvalue ())
62+ assert 'The configuration has changed' not in output
63+ assert want_str in output
5364
5465
5566@pytest .mark .sphinx ('dummy' , testroot = 'root' )
@@ -181,3 +192,31 @@ def test_env_relfn2path(app):
181192 app .env .temp_data .clear ()
182193 with pytest .raises (KeyError ):
183194 app .env .relfn2path ('images/logo.jpg' )
195+
196+
197+ def test_differing_config_keys ():
198+ diff = _differing_config_keys
199+
200+ old = Config ({'project' : 'old' })
201+ new = Config ({'project' : 'new' })
202+ assert diff (old , new ) == frozenset ({'project' })
203+
204+ old = Config ({'project' : 'project' , 'release' : 'release' })
205+ new = Config ({'project' : 'project' , 'version' : 'version' })
206+ assert diff (old , new ) == frozenset ({'release' , 'version' })
207+
208+ old = Config ({'project' : 'project' , 'release' : 'release' })
209+ new = Config ({'project' : 'project' })
210+ assert diff (old , new ) == frozenset ({'release' })
211+
212+ old = Config ({'project' : 'project' })
213+ new = Config ({'project' : 'project' , 'version' : 'version' })
214+ assert diff (old , new ) == frozenset ({'version' })
215+
216+ old = Config ({'project' : 'project' , 'release' : 'release' , 'version' : 'version' })
217+ new = Config ({'project' : 'project' , 'release' : 'release' , 'version' : 'version' })
218+ assert diff (old , new ) == frozenset ()
219+
220+ old = Config ({'project' : 'old' , 'release' : 'release' })
221+ new = Config ({'project' : 'new' , 'version' : 'version' })
222+ assert diff (old , new ) == frozenset ({'project' , 'release' , 'version' })
0 commit comments