A pytest fixture for testing flake8 plugins.
Project description
A pytest fixture for testing flake8 plugins.
A quick example:
def test_simple_run(flake8dir):
flake8dir.make_py_files(example='''
x = 1
''')
result = flake8dir.run_flake8()
assert result.out_lines == [
'./example.py:1:2: E221 multiple spaces before operator'
]
Installation
Use pip:
pip install pytest-flake8dir
Tested on Python 2.7 and Python 3.6.
API
flake8dir fixture
A pytest fixture that wraps Pytest’s built-in tmpdir fixture (docs), to create a temporary directory, allow adding files, and running flake8.
flake8dir.make_py_files(**kwargs)
Creates one python file for each passed keyword argument, with name corresponding to the keyword argument + ‘.py’, and content according the string value of the argument. The value will be processed with textwrap.dedent() so indentation is not a problem when writing tests.
For example, this creates two python files in the temporary directory, called example1.py and example2.py, each containing one line with an assignment:
def test_sample(flake8dir):
flake8dir.make_py_files(
example1='''
x = 1
''',
example2='''
y = 1
'''
)
flake8dir.make_example_py(content)
A shortcut for make_py_files(example=content), for when you are using a single file over and over. This creates just example.py, which is often all you need for testing a rule.
For example:
def test_sample(flake8dir):
flake8dir.make_example_py('''
x = 1
''')
flake8dir.make_setup_cfg(contents)
Makes the file setup.cfg in the test directory with contents equal to the string passed in. This is again processed with textwrap.dedent() so indentation is not a worry. You’ll probably want to set the [flake8] section header to configure flake8.
For example, this makes flake8 ignore rule E101:
def test_sample(flake8dir):
flake8dir.make_setup_cfg('''
[flake8]
ignore = E101
''')
flake8dir.make_file(filename, content)
Make an arbitrary file with the given filename - this function is the inner implementation for make_py_files and make_setup_cfg. filename may include directories, like mydir/foo.py, and they will be created. content is subject to the same textwrap.dedent() processing as mentioned above.
For example:
def test_sample(flake8dir):
flake8dir.make_file('myfile/foo.py', '''
x = 1
''')
flake8dir.run_flake8(extra_args=None)
Runs flake8 in the current process, and returns a Flake8Result representing the results.
extra_args may be a list of extra flags to pass to flake8, for example passing ['--ignore', 'E101'] would achieve the same thing as the above setup.cfg example. Note some arguments are already passed to ensure it runs in the same process without multiprocessing - see source.
Flake8Result
Represents the parsed output of a flake8 run.
Flake8Result.out
The full string of output generated by flake8.
Flake8Result.out_lines
A list of individual lines of output, without trailing newlines. This is the most useful tool for making assertions against.
For example, given a result you can check for a particular line being output:
result = flake8dir.run_flake8()
expected = './example.py:1:2: E221 multiple spaces before operator'
assert expected in result.out_lines
History
Pending Release
1.1.0 (2017-06-23)
Add convenience methods make_example_py and make_file.
1.0.0 (2017-06-22)
First version with basic fixture supporting make_py_files, make_setup_cfg and run_flake8.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pytest_flake8dir-1.1.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee10d3e987548dd72bc22c9f998d59b7354605473f13a37b131dfde825a7c95b |
|
MD5 | 6c083b979a20947c9dac06aab2efc77c |
|
BLAKE2b-256 | a08fbe886fdac420d40793b94759b2e32eddf12522d5e4f2e2c00db532f7cbd0 |