summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorFabian Neundorf <CommodoreFabianus@gmx.de>2016-07-28 17:25:13 +0000
committerFabian Neundorf <CommodoreFabianus@gmx.de>2016-07-28 19:25:13 +0200
commitad3b4869095dc589c4c72982a101e6bdd6b5c87e (patch)
treeb4cf3736ae8edba597dd7ca6e63a32b418b112a5 /tests
parent53455fdff7e89f83d811feffcdd5238b84113d63 (diff)
downloadflake8-ad3b4869095dc589c4c72982a101e6bdd6b5c87e.tar.gz
Sort reports by line and column
Originally the reports have been sorted by column and message (without the error code), so it didn't order after the line number. Closes #196
Diffstat (limited to 'tests')
-rw-r--r--tests/integration/test_checker.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/integration/test_checker.py b/tests/integration/test_checker.py
index 2a145e7..5c013b6 100644
--- a/tests/integration/test_checker.py
+++ b/tests/integration/test_checker.py
@@ -76,3 +76,71 @@ def test_handle_file_plugins(plugin_target):
line_number=EXPECTED_REPORT[0],
column=EXPECTED_REPORT[1],
text=EXPECTED_REPORT[2])
+
+
+PLACEHOLDER_CODE = 'some_line = "of" * code'
+
+
+@pytest.mark.parametrize('results, expected_order', [
+ # No entries should be added
+ ([], []),
+ # Results are correctly ordered
+ ([('A101', 1, 1, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 2, 1, 'placeholder error', PLACEHOLDER_CODE)], [0, 1]),
+ # Reversed order of lines
+ ([('A101', 2, 1, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 1, 1, 'placeholder error', PLACEHOLDER_CODE)], [1, 0]),
+ # Columns are not ordered correctly (when reports are ordered correctly)
+ ([('A101', 1, 2, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 1, 1, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 2, 1, 'placeholder error', PLACEHOLDER_CODE)], [1, 0, 2]),
+ ([('A101', 2, 1, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 1, 1, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 1, 2, 'placeholder error', PLACEHOLDER_CODE)], [1, 2, 0]),
+ ([('A101', 1, 2, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 2, 2, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 2, 1, 'placeholder error', PLACEHOLDER_CODE)], [0, 2, 1]),
+ ([('A101', 1, 3, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 2, 2, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 3, 1, 'placeholder error', PLACEHOLDER_CODE)], [0, 1, 2]),
+ ([('A101', 1, 1, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 1, 3, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 2, 2, 'placeholder error', PLACEHOLDER_CODE)], [0, 1, 2]),
+ # Previously sort column and message (so reversed) (see bug 196)
+ ([('A101', 1, 1, 'placeholder error', PLACEHOLDER_CODE),
+ ('A101', 2, 1, 'charlie error', PLACEHOLDER_CODE)], [0, 1]),
+])
+def test_report_order(results, expected_order):
+ """
+ Test in which order the results will be reported.
+
+ It gets a list of reports from the file checkers and verifies that the
+ result will be ordered independent from the original report.
+ """
+ def count_side_effect(name, sorted_results):
+ """Side effect for the result handler to tell all are reported."""
+ return len(sorted_results)
+
+ # To simplify the parameters (and prevent copy & pasting) reuse report
+ # tuples to create the expected result lists from the indexes
+ expected_results = [results[index] for index in expected_order]
+
+ file_checker = mock.Mock(spec=['results', 'display_name'])
+ file_checker.results = results
+ file_checker.display_name = 'placeholder'
+
+ style_guide = mock.Mock(spec=['options'])
+
+ # Create a placeholder manager without arguments or plugins
+ # Just add one custom file checker which just provides the results
+ manager = checker.Manager(style_guide, [], [])
+ manager.checkers = [file_checker]
+
+ # _handle_results is the first place which gets the sorted result
+ # Should something non-private be mocked instead?
+ handler = mock.Mock()
+ handler.side_effect = count_side_effect
+ manager._handle_results = handler
+
+ assert manager.report() == (len(results), len(results))
+ handler.assert_called_once_with('placeholder', expected_results)