Example #1
0
def test_set_temp_config(tmpdir, monkeypatch):
    # Check that we start in an understood state.
    assert configuration._cfgobjs == OLD_CONFIG
    # Temporarily remove any temporary overrides of the configuration dir.
    monkeypatch.setattr(paths.set_temp_config, '_temp_path', None)

    orig_config_dir = paths.get_config_dir(rootname='astropy')
    temp_config_dir = str(tmpdir.mkdir('config'))
    temp_astropy_config = os.path.join(temp_config_dir, 'astropy')

    # Test decorator mode
    @paths.set_temp_config(temp_config_dir)
    def test_func():
        assert paths.get_config_dir(rootname='astropy') == temp_astropy_config

        # Test temporary restoration of original default
        with paths.set_temp_config() as d:
            assert d == orig_config_dir == paths.get_config_dir(
                rootname='astropy')

    test_func()

    # Test context manager mode (with cleanup)
    with paths.set_temp_config(temp_config_dir, delete=True):
        assert paths.get_config_dir(rootname='astropy') == temp_astropy_config

    assert not os.path.exists(temp_config_dir)
    # Check that we have returned to our old configuration.
    assert configuration._cfgobjs == OLD_CONFIG
Example #2
0
    def test_func():
        assert paths.get_config_dir(rootname='astropy') == temp_astropy_config

        # Test temporary restoration of original default
        with paths.set_temp_config() as d:
            assert d == orig_config_dir == paths.get_config_dir(
                rootname='astropy')
Example #3
0
    def run_tests(self, **kwargs):
        # The following option will include eggs inside a .eggs folder in
        # sys.path when running the tests. This is possible so that when
        # running pytest, test dependencies installed via e.g.
        # tests_requires are available here. This is not an advertised option
        # since it is only for internal use
        if kwargs.pop('add_local_eggs_to_path', False):

            # Add each egg to sys.path individually
            for egg in glob.glob(os.path.join('.eggs', '*.egg')):
                sys.path.insert(0, egg)

            # We now need to force reload pkg_resources in case any pytest
            # plugins were added above, so that their entry points are picked up
            import pkg_resources
            importlib.reload(pkg_resources)

        self._has_test_dependencies()  # pragma: no cover

        # The docstring for this method is defined as a class variable.
        # This allows it to be built for each subclass in __new__.

        # Don't import pytest until it's actually needed to run the tests
        import pytest

        # Raise error for undefined kwargs
        allowed_kwargs = set(self.keywords.keys())
        passed_kwargs = set(kwargs.keys())
        if not passed_kwargs.issubset(allowed_kwargs):
            wrong_kwargs = list(passed_kwargs.difference(allowed_kwargs))
            raise TypeError(
                f"run_tests() got an unexpected keyword argument {wrong_kwargs[0]}"
            )

        args = self._generate_args(**kwargs)

        if kwargs.get('plugins', None) is not None:
            plugins = kwargs.pop('plugins')
        elif self.keywords.get('plugins', None) is not None:
            plugins = self.keywords['plugins']
        else:
            plugins = []

        # Override the config locations to not make a new directory nor use
        # existing cache or config. Note that we need to do this here in
        # addition to in conftest.py - for users running tests interactively
        # in e.g. IPython, conftest.py would get read in too late, so we need
        # to do it here - but at the same time the code here doesn't work when
        # running tests in parallel mode because this uses subprocesses which
        # don't know about the temporary config/cache.
        astropy_config = tempfile.mkdtemp('astropy_config')
        astropy_cache = tempfile.mkdtemp('astropy_cache')

        # Have to use nested with statements for cross-Python support
        # Note, using these context managers here is superfluous if the
        # config_dir or cache_dir options to pytest are in use, but it's
        # also harmless to nest the contexts
        with set_temp_config(astropy_config, delete=True):
            with set_temp_cache(astropy_cache, delete=True):
                return pytest.main(args=args, plugins=plugins)
Example #4
0
    def run_tests(self, **kwargs):

        # The following option will include eggs inside a .eggs folder in
        # sys.path when running the tests. This is possible so that when
        # runnning python setup.py test, test dependencies installed via e.g.
        # tests_requires are available here. This is not an advertised option
        # since it is only for internal use
        if kwargs.pop('add_local_eggs_to_path', False):

            # Add each egg to sys.path individually
            for egg in glob.glob(os.path.join('.eggs', '*.egg')):
                sys.path.insert(0, egg)

            # We now need to force reload pkg_resources in case any pytest
            # plugins were added above, so that their entry points are picked up
            import pkg_resources
            importlib.reload(pkg_resources)

        self._has_test_dependencies()  # pragma: no cover

        # The docstring for this method is defined as a class variable.
        # This allows it to be built for each subclass in __new__.

        # Don't import pytest until it's actually needed to run the tests
        import pytest

        # Raise error for undefined kwargs
        allowed_kwargs = set(self.keywords.keys())
        passed_kwargs = set(kwargs.keys())
        if not passed_kwargs.issubset(allowed_kwargs):
            wrong_kwargs = list(passed_kwargs.difference(allowed_kwargs))
            raise TypeError("run_tests() got an unexpected keyword argument {}".format(wrong_kwargs[0]))

        args = self._generate_args(**kwargs)

        if kwargs.get('plugins', None) is not None:
            plugins = kwargs.pop('plugins')
        elif self.keywords.get('plugins', None) is not None:
            plugins = self.keywords['plugins']
        else:
            plugins = []

        # If we are running the astropy tests with the astropy plugins handle
        # the config stuff, otherwise ignore it.
        if 'astropy.tests.plugins.config' not in plugins:
            return pytest.main(args=args, plugins=plugins)

        # override the config locations to not make a new directory nor use
        # existing cache or config
        astropy_config = tempfile.mkdtemp('astropy_config')
        astropy_cache = tempfile.mkdtemp('astropy_cache')

        # Have to use nested with statements for cross-Python support
        # Note, using these context managers here is superfluous if the
        # config_dir or cache_dir options to py.test are in use, but it's
        # also harmless to nest the contexts
        with set_temp_config(astropy_config, delete=True):
            with set_temp_cache(astropy_cache, delete=True):
                return pytest.main(args=args, plugins=plugins)
Example #5
0
def pytest_runtest_setup(item):
    config_dir = item.config.getini('astropy_config_dir')
    cache_dir = item.config.getini('astropy_cache_dir')

    # Command-line options can override, however
    config_dir = item.config.getoption('astropy_config_dir') or config_dir
    cache_dir = item.config.getoption('astropy_cache_dir') or cache_dir

    # We can't really use context managers directly in py.test (although
    # py.test 2.7 adds the capability), so this may look a bit hacky
    if config_dir:
        item.set_temp_config = set_temp_config(config_dir)
        item.set_temp_config.__enter__()
    if cache_dir:
        item.set_temp_cache = set_temp_cache(cache_dir)
        item.set_temp_cache.__enter__()
Example #6
0
def test_set_temp_config(tmpdir, monkeypatch):
    monkeypatch.setattr(paths.set_temp_config, '_temp_path', None)

    orig_config_dir = paths.get_config_dir()
    temp_config_dir = str(tmpdir.mkdir('config'))
    temp_astropy_config = os.path.join(temp_config_dir, 'astropy')

    # Test decorator mode
    @paths.set_temp_config(temp_config_dir)
    def test_func():
        assert paths.get_config_dir() == temp_astropy_config

        # Test temporary restoration of original default
        with paths.set_temp_config() as d:
            assert d == orig_config_dir == paths.get_config_dir()

    test_func()

    # Test context manager mode (with cleanup)
    with paths.set_temp_config(temp_config_dir, delete=True):
        assert paths.get_config_dir() == temp_astropy_config

    assert not os.path.exists(temp_config_dir)
Example #7
0
def test_set_temp_config(tmpdir, monkeypatch):
    monkeypatch.setattr(paths.set_temp_config, '_temp_path', None)

    orig_config_dir = paths.get_config_dir()
    temp_config_dir = str(tmpdir.mkdir('config'))
    temp_astropy_config = os.path.join(temp_config_dir, 'astropy')

    # Test decorator mode
    @paths.set_temp_config(temp_config_dir)
    def test_func():
        assert paths.get_config_dir() == temp_astropy_config

        # Test temporary restoration of original default
        with paths.set_temp_config() as d:
            assert d == orig_config_dir == paths.get_config_dir()

    test_func()

    # Test context manager mode (with cleanup)
    with paths.set_temp_config(temp_config_dir, delete=True):
        assert paths.get_config_dir() == temp_astropy_config

    assert not os.path.exists(temp_config_dir)
Example #8
0
    def test_func():
        assert paths.get_config_dir() == temp_astropy_config

        # Test temporary restoration of original default
        with paths.set_temp_config() as d:
            assert d == orig_config_dir == paths.get_config_dir()