diff options
author | Eevee (Alex Munroe) <eevee.git@veekun.com> | 2014-08-26 13:03:48 -0700 |
---|---|---|
committer | Eevee (Alex Munroe) <eevee.git@veekun.com> | 2014-08-26 14:32:01 -0700 |
commit | e045cd72c467eacd16aaee2613ef0850e559a3ce (patch) | |
tree | fd6dec2df10907e5f2c912a8ab83f070223e4278 /scss/tests | |
parent | 77f24e0a2e8fb394004023191c8662febd8ceda0 (diff) | |
download | pyscss-e045cd72c467eacd16aaee2613ef0850e559a3ce.tar.gz |
Revamp py.test's handling of test files.
Each .scss file is now its own test -- you can run them directly, with
`py.test scss/tests/files/foo/bar.scss`, or use wildcards, or specify a
partial directory, or whatever.
Accordingly, `test_files.py` is gone, as is the `--test-file-filter`
option that was so cumbersome I never actually used it.
Regressions:
- xfail is no longer supported.
- Ruby tests are now not collected at all, rather than marked as
skipped.
Diffstat (limited to 'scss/tests')
-rw-r--r-- | scss/tests/conftest.py | 81 | ||||
-rw-r--r-- | scss/tests/test_files.py | 50 |
2 files changed, 0 insertions, 131 deletions
diff --git a/scss/tests/conftest.py b/scss/tests/conftest.py deleted file mode 100644 index b2036ff..0000000 --- a/scss/tests/conftest.py +++ /dev/null @@ -1,81 +0,0 @@ -"""py.test plugin configuration.""" - -import glob -import os.path -import re - -import pytest - -try: - import fontforge -except ImportError: - fontforge = None - -FILES_DIR = os.path.relpath(os.path.join(os.path.dirname(__file__), 'files')) - -# Globals, yuck! Populated below. -test_file_tuples = None -test_file_ids = None - - -def pytest_configure(config): - """Scan for test files. Done here because other hooks tend to run once - *per test*, and there's no reason to do this work more than once. - """ - global test_file_tuples - global test_file_ids - - include_ruby = config.getoption('include_ruby') - test_file_filter = config.getoption('test_file_filter') - if test_file_filter: - file_filters = [ - re.compile(filt) - for filt in test_file_filter.split(',') - ] - else: - file_filters = [] - - # Tuples are 3-tuples of the form (scss filename, css filename, pytest - # marker). That last one is used to carry xfail/skip, and is None for - # regular tests. - # "ids" are just names for the tests, in a parellel list. We just use - # relative paths to the input file. - test_file_tuples = [] - test_file_ids = [] - for fn in glob.glob(os.path.join(FILES_DIR, '*%s*.scss' % os.sep)): - if os.path.basename(fn)[0] == '_': - continue - - relfn = os.path.relpath(fn, FILES_DIR) - pytest_trigger = None - - if relfn.startswith(('from-sassc' + os.sep, 'from-ruby' + os.sep)): - pytest_trigger = pytest.mark.skipif( - not include_ruby, reason="skipping ruby tests by default") - elif relfn.startswith('xfail' + os.sep): - pytest_trigger = pytest.mark.xfail - elif relfn.startswith('fonts' + os.sep): - pytest_trigger = pytest.mark.skipif( - not fontforge, reason="font tests require fontforge") - - if file_filters and not any(rx.search(relfn) for rx in file_filters): - pytest_trigger = pytest.mark.skipif( - reason="skipping due to --test-file-filter") - - pair = (fn, fn[:-5] + '.css') - if pytest_trigger: - pair = pytest_trigger(pair) - - test_file_tuples.append(pair) - test_file_ids.append(fn) - - -def pytest_generate_tests(metafunc): - """Inject the test files as parametrizations. - - Relies on the command-line option `--test-file-filter`, set by the root - conftest.py. - """ - - if 'scss_file_pair' in metafunc.fixturenames: - metafunc.parametrize('scss_file_pair', test_file_tuples, ids=test_file_ids) diff --git a/scss/tests/test_files.py b/scss/tests/test_files.py deleted file mode 100644 index eaaba4c..0000000 --- a/scss/tests/test_files.py +++ /dev/null @@ -1,50 +0,0 @@ -"""Evaluates all the tests that live in `scss/tests/files`. - -A test is any file with a `.scss` extension. It'll be compiled, and the output -will be compared to the contents of a file named `foo.css`. - -Currently, test files must be nested exactly one directory below `files/`. -This limitation is completely arbitrary. Files starting with '_' are skipped. - -""" - -from __future__ import absolute_import, unicode_literals - -import os.path -import logging - -import six - -import scss - - -if six.PY2: - from io import open - - -console = logging.StreamHandler() -logger = logging.getLogger('scss') -logger.setLevel(logging.ERROR) -logger.addHandler(console) - - -def test_pair_programmatic(scss_file_pair): - scss_fn, css_fn = scss_file_pair - - with open(scss_fn, 'rb') as fh: - source = fh.read() - with open(css_fn, 'r', encoding='utf8') as fh: - expected = fh.read() - - directory, _ = os.path.split(scss_fn) - include_dir = os.path.join(directory, 'include') - scss.config.STATIC_ROOT = os.path.join(directory, 'static') - - compiler = scss.Scss(scss_opts=dict(style='expanded'), search_paths=[include_dir, directory]) - actual = compiler.compile(source) - - # Normalize leading and trailing newlines - actual = actual.strip('\n') - expected = expected.strip('\n') - - assert expected == actual |