Skip to content

Commit

Permalink
Add markers to linter tests, move linter imports
Browse files Browse the repository at this point in the history
Test markers can be used to easily (de-)select tests, and colcon exposes
mechanisms to do so. Linters are a category of tests that are commonly
called out.

Additionally, if we move the imports for some of our single-purpose
tests into the test function, we can avoid installing the linter
dependencies entirely. This is a common case in platform packaging, where
linter errors are not actionable and the dependencies are not typically
installed.
  • Loading branch information
cottsay committed Aug 30, 2023
1 parent c8995e3 commit 0178aa8
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 11 deletions.
3 changes: 3 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ filterwarnings =
# Suppress resource warnings pending investigation
always::ResourceWarning
junit_suite_name = colcon-core
markers =
flake8
linter
python_classes = !TestFailure

[options.entry_points]
Expand Down
1 change: 1 addition & 0 deletions test/spell_check.words
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ junit
levelname
libexec
lineno
linter
linux
lstrip
mkdtemp
Expand Down
3 changes: 3 additions & 0 deletions test/test_copyright_license.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
from pathlib import Path
import sys

import pytest


@pytest.mark.linter
def test_copyright_license():
missing = check_files([
Path(__file__).parents[1],
Expand Down
15 changes: 8 additions & 7 deletions test/test_flake8.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,20 @@
from pathlib import Path
import sys

from flake8 import LOG
from flake8.api.legacy import get_style_guide
from pydocstyle.utils import log
import pytest


# avoid debug / info / warning messages from flake8 internals
LOG.setLevel(logging.ERROR)
@pytest.mark.flake8
@pytest.mark.linter
def test_flake8():
from flake8.api.legacy import get_style_guide

# avoid debug / info / warning messages from flake8 internals
logging.getLogger('flake8').setLevel(logging.ERROR)

def test_flake8():
# for some reason the pydocstyle logger changes to an effective level of 1
# set higher level to prevent the output to be flooded with debug messages
log.setLevel(logging.WARNING)
logging.getLogger('pydocstyle').setLevel(logging.WARNING)

style_guide = get_style_guide(
extend_ignore=['D100', 'D104'],
Expand Down
11 changes: 7 additions & 4 deletions test/test_spell_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,6 @@
from pathlib import Path

import pytest
from scspell import Report
from scspell import SCSPELL_BUILTIN_DICT
from scspell import spell_check


spell_check_words_path = Path(__file__).parent / 'spell_check.words'

Expand All @@ -18,7 +14,12 @@ def known_words():
return spell_check_words_path.read_text().splitlines()


@pytest.mark.linter
def test_spell_check(known_words):
from scspell import Report
from scspell import SCSPELL_BUILTIN_DICT
from scspell import spell_check

source_filenames = [
Path(__file__).parents[1] / 'bin' / 'colcon',
Path(__file__).parents[1] / 'setup.py'] + \
Expand Down Expand Up @@ -46,11 +47,13 @@ def test_spell_check(known_words):
', '.join(sorted(unused_known_words))


@pytest.mark.linter
def test_spell_check_word_list_order(known_words):
assert known_words == sorted(known_words), \
'The word list should be ordered alphabetically'


@pytest.mark.linter
def test_spell_check_word_list_duplicates(known_words):
assert len(known_words) == len(set(known_words)), \
'The word list should not contain duplicates'

0 comments on commit 0178aa8

Please sign in to comment.