summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorIan Cordasco <graffatcolmingov@gmail.com>2016-08-06 14:16:08 -0500
committerIan Cordasco <graffatcolmingov@gmail.com>2016-08-07 12:31:14 -0500
commitf67f481beea1f32e503d346e9d4d3f2f2a8b2ebe (patch)
treea147072597dfff8d3df7333a744573f29ef95fee /tests
parentf768ed6fd0101de656e19d3029952e69a437549e (diff)
downloadflake8-f67f481beea1f32e503d346e9d4d3f2f2a8b2ebe.tar.gz
Add --bug-report flag to help bug reporters
When invoked it will print out JSON that has all of the debugging information needed by the maintainers to diagnose or reproduce a bug. Closes #207
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/test_debug.py86
1 files changed, 86 insertions, 0 deletions
diff --git a/tests/unit/test_debug.py b/tests/unit/test_debug.py
new file mode 100644
index 0000000..dbafe2e
--- /dev/null
+++ b/tests/unit/test_debug.py
@@ -0,0 +1,86 @@
+"""Tests for our debugging module."""
+import mock
+import pytest
+import setuptools
+
+from flake8.main import debug
+
+
+def test_dependencies():
+ """Verify that we format our dependencies appropriately."""
+ expected = [{'dependency': 'setuptools',
+ 'version': setuptools.__version__}]
+ assert expected == debug.dependencies()
+
+
+@pytest.mark.parametrize('plugins, expected', [
+ ([], []),
+ ([('pycodestyle', '2.0.0')], [{'plugin': 'pycodestyle',
+ 'version': '2.0.0'}]),
+ ([('pycodestyle', '2.0.0'), ('mccabe', '0.5.9')],
+ [{'plugin': 'mccabe', 'version': '0.5.9'},
+ {'plugin': 'pycodestyle', 'version': '2.0.0'}]),
+])
+def test_plugins_from(plugins, expected):
+ """Test that we format plugins appropriately."""
+ option_manager = mock.Mock(registered_plugins=set(plugins))
+ assert expected == debug.plugins_from(option_manager)
+
+
+@mock.patch('platform.python_implementation', return_value='CPython')
+@mock.patch('platform.python_version', return_value='3.5.3')
+@mock.patch('platform.system', return_value='Linux')
+def test_information(system, pyversion, pyimpl):
+ """Verify that we return all the information we care about."""
+ expected = {
+ 'version': '3.1.0',
+ 'plugins': [{'plugin': 'mccabe', 'version': '0.5.9'},
+ {'plugin': 'pycodestyle', 'version': '2.0.0'}],
+ 'dependencies': [{'dependency': 'setuptools',
+ 'version': setuptools.__version__}],
+ 'platform': {
+ 'python_implementation': 'CPython',
+ 'python_version': '3.5.3',
+ 'system': 'Linux',
+ },
+ }
+ option_manager = mock.Mock(
+ registered_plugins=set([('pycodestyle', '2.0.0'),
+ ('mccabe', '0.5.9')]),
+ version='3.1.0',
+ )
+ assert expected == debug.information(option_manager)
+ pyimpl.assert_called_once_with()
+ pyversion.assert_called_once_with()
+ system.assert_called_once_with()
+
+
+@mock.patch('flake8.main.debug.print')
+@mock.patch('flake8.main.debug.information', return_value={})
+@mock.patch('json.dumps', return_value='{}')
+def test_print_information_no_plugins(dumps, information, print_mock):
+ """Verify we print and exit only when we have plugins."""
+ plugins = []
+ option_manager = mock.Mock(registered_plugins=set(plugins))
+ assert debug.print_information(
+ None, None, None, None, option_manager=option_manager,
+ ) is None
+ assert dumps.called is False
+ assert information.called is False
+ assert print_mock.called is False
+
+
+@mock.patch('flake8.main.debug.print')
+@mock.patch('flake8.main.debug.information', return_value={})
+@mock.patch('json.dumps', return_value='{}')
+def test_print_information(dumps, information, print_mock):
+ """Verify we print and exit only when we have plugins."""
+ plugins = [('pycodestyle', '2.0.0'), ('mccabe', '0.5.9')]
+ option_manager = mock.Mock(registered_plugins=set(plugins))
+ with pytest.raises(SystemExit):
+ debug.print_information(
+ None, None, None, None, option_manager=option_manager,
+ )
+ print_mock.assert_called_once_with('{}')
+ dumps.assert_called_once_with({}, indent=2, sort_keys=True)
+ information.assert_called_once_with(option_manager)