summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorIan Cordasco <graffatcolmingov@gmail.com>2016-10-23 07:02:43 -0500
committerIan Cordasco <graffatcolmingov@gmail.com>2016-10-23 07:37:08 -0500
commit7998734fe62ce1d037b6b7932e51ec37e949ac59 (patch)
treea852190ca59634db3ace410d6573c4b7324b5bb3 /tests
parentc17043ff3f245e2ead27c6edde3c9f9ddca0e99f (diff)
downloadflake8-7998734fe62ce1d037b6b7932e51ec37e949ac59.tar.gz
Handle SyntaxErrors after new-lines specially
In some cases, when we handle SyntaxErrors we need to ensure that the column number is correct for a 1-indexed report. In some cases, we also need to account for the fact that the SyntaxError has happened "after" a new-line. To extract and alter the row and column numbers, we've moved the logic to a private static method on the FileChecker object to avoid an overly complex method. Closes #237
Diffstat (limited to 'tests')
-rw-r--r--tests/fixtures/example-code/invalid-syntax.py1
-rw-r--r--tests/unit/test_file_checker.py25
2 files changed, 26 insertions, 0 deletions
diff --git a/tests/fixtures/example-code/invalid-syntax.py b/tests/fixtures/example-code/invalid-syntax.py
new file mode 100644
index 0000000..db2cc27
--- /dev/null
+++ b/tests/fixtures/example-code/invalid-syntax.py
@@ -0,0 +1 @@
+foo(
diff --git a/tests/unit/test_file_checker.py b/tests/unit/test_file_checker.py
new file mode 100644
index 0000000..a2d33fc
--- /dev/null
+++ b/tests/unit/test_file_checker.py
@@ -0,0 +1,25 @@
+"""Unit tests for the FileChecker class."""
+import mock
+
+from flake8 import checker
+
+
+@mock.patch('flake8.processor.FileProcessor')
+def test_run_ast_checks_handles_SyntaxErrors(FileProcessor):
+ """Stress our SyntaxError handling.
+
+ Related to: https://gitlab.com/pycqa/flake8/issues/237
+ """
+ processor = mock.Mock(lines=[])
+ FileProcessor.return_value = processor
+ processor.build_ast.side_effect = SyntaxError('Failed to build ast',
+ ('', 1, 5, 'foo(\n'))
+ file_checker = checker.FileChecker(__file__, checks={}, options=object())
+
+ with mock.patch.object(file_checker, 'report') as report:
+ file_checker.run_ast_checks()
+
+ report.assert_called_once_with(
+ 'E999', 1, 3,
+ 'SyntaxError: Failed to build ast',
+ )