sphinx / tests /

Full commit
georg.brandl cbc5331 

Georg Brandl 3a0071d 
Georg Brandl 4da052f 
georg.brandl cbc5331 

Georg Brandl 220b8f9 
Georg Brandl 2a22e62 
Georg Brandl 220b8f9 
georg.brandl cbc5331 

Georg Brandl 5810331 

georg.brandl 7187a9f 

georg.brandl cbc5331 

Georg Brandl bd164de 
georg.brandl cbc5331 

Georg Brandl 5810331 
georg.brandl cbc5331 

Georg Brandl 22893e5 

Georg Brandl bc803ad 
georg.brandl cbc5331 

Georg Brandl eaba038 
georg.brandl cbc5331 

georg.brandl 5ddec89 
georg.brandl cbc5331 

georg.brandl 72370f1 
georg.brandl 7187a9f 
georg.brandl cbc5331 

Georg Brandl 2a22e62 

Georg Brandl 220b8f9 

# -*- coding: utf-8 -*-

    Test the sphinx.config.Config class and its handling in the
    Application class.

    :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.

from util import *

import sphinx
from sphinx.config import Config
from sphinx.errors import ExtensionError, ConfigError, VersionRequirementError

@with_app(confoverrides={'master_doc': 'master', 'nonexisting_value': 'True',
                         'latex_elements.docclass': 'scrartcl'})
def test_core_config(app):
    cfg = app.config

    # simple values
    assert 'project' in cfg.__dict__
    assert cfg.project == 'Sphinx <Tests>'
    assert cfg.templates_path == ['_templates']

    # overrides
    assert cfg.master_doc == 'master'
    assert cfg.latex_elements['docclass'] == 'scrartcl'

    # simple default values
    assert 'locale_dirs' not in cfg.__dict__
    assert cfg.locale_dirs == []
    assert cfg.trim_footnote_reference_space == False

    # complex default values
    assert 'html_title' not in cfg.__dict__
    assert cfg.html_title == 'Sphinx <Tests> v0.6alpha1 documentation'

    # complex default values mustn't raise
    for valuename in cfg.config_values:
        getattr(cfg, valuename)

    # "contains" gives True both for set and unset values
    assert 'project' in cfg
    assert 'html_title' in cfg
    assert 'nonexisting_value' not in cfg

    # invalid values
    raises(AttributeError, getattr, cfg, '_value')
    raises(AttributeError, getattr, cfg, 'nonexisting_value')

    # non-value attributes are deleted from the namespace
    raises(AttributeError, getattr, cfg, 'sys')

    # setting attributes
    cfg.project = 'Foo'
    assert cfg.project == 'Foo'

    # alternative access via item interface
    cfg['project'] = 'Sphinx Tests'
    assert cfg['project'] == cfg.project == 'Sphinx Tests'

def test_extension_values(app):
    cfg = app.config

    # default value
    assert cfg.value_from_ext == []
    # non-default value
    assert cfg.value_from_conf_py == 84

    # no duplicate values allowed
    raises_msg(ExtensionError, 'already present', app.add_config_value,
               'html_title', 'x', True)
    raises_msg(ExtensionError, 'already present', app.add_config_value,
               'value_from_ext', 'x', True)

def test_errors_warnings(dir):
    # test the error for syntax errors in the config file
    write_file(dir / '', 'project = \n')
    raises_msg(ConfigError, '', Config, dir, '', {}, None)

    # test the warning for bytestrings with non-ascii content
    write_file(dir / '', '# -*- coding: latin-1\nproject = "foo\xe4"\n')
    cfg = Config(dir, '', {}, None)
    warned = [False]
    def warn(msg):
        warned[0] = True
    assert warned[0]

def test_needs_sphinx():
    raises(VersionRequirementError, TestApp,
           confoverrides={'needs_sphinx': '9.9'})