Skip to content

Commit

Permalink
Add markers to linter tests, move linter imports (#576)
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 Sep 2, 2023
1 parent c8995e3 commit e6cf296
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 e6cf296

Please sign in to comment.