Skip to main content

A pytest fixture for testing flake8 plugins.

Project description

https://img.shields.io/travis/adamchainz/pytest-flake8dir/master.svg https://img.shields.io/pypi/v/pytest-flake8dir.svg

A pytest fixture for testing flake8 plugins.

A quick example:

def test_simple_run(flake8dir):
    flake8dir.make_example_py('''
        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.

If you’re using this to test a flake8 plugin, make sure flake8 is picking up your plugin during tests. Normally this is done with a setup.py entrypoint, which makes tox the easiest way to guarantee this is ready as it will run setup.py install on your project before running tests.

flake8dir.make_py_files(**kwargs: Mapping[str, str])

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 mixed indentation is not a problem in your test files.

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: str)

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: str)

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: str, content: str)

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: List[str]=None) -> Flake8Result

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: str

The full string of output generated by flake8.

Flake8Result.exit_code: int

The exit code that the flake8 run exited with.

Flake8Result.out_lines: List[str]

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.3.0 (2018-10-16)

  • A temporary setup.cfg file is now always created with no options and passed as --config, to avoid flake8 merging in user-specific settings. Use make_setup_cfg to set the contents of this file.

1.2.0 (2018-02-25)

  • The exit code from flake8 is now saved on the Flake8Result object. Any tests that relied on catching SystemExit themselves will need refactoring to use the new attribute for their assertions.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest-flake8dir-1.3.0.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

pytest_flake8dir-1.3.0-py2.py3-none-any.whl (5.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pytest-flake8dir-1.3.0.tar.gz.

File metadata

  • Download URL: pytest-flake8dir-1.3.0.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/2.7

File hashes

Hashes for pytest-flake8dir-1.3.0.tar.gz
Algorithm Hash digest
SHA256 9ff1a8043ecfc4f155a8ad5367c01eefbad52f46856e91ece8c13e98e821e5f1
MD5 1befc5c59b09d2274df867761da0d9b4
BLAKE2b-256 beead2317c324c45532f8c4b73e33f09c761a77a730a76e459238e455c6dd93f

See more details on using hashes here.

File details

Details for the file pytest_flake8dir-1.3.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_flake8dir-1.3.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 13803bc6738ed3a45972fa85365aa99fa011068ca48ab32006b87785bd60557f
MD5 256eef4862329a71da44578381b25591
BLAKE2b-256 d3f91690b2ebd64bce35a56e5f66f3ad577ee4d061d1d9425b69e0b35c63b284

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page