mirror of
https://github.com/pre-commit/pre-commit-hooks.git
synced 2026-03-31 10:36:54 +00:00
This commit uses capsys to test the output of the diff, which is now hidden behind the autofix flag if it's disabled
157 lines
3.9 KiB
Python
157 lines
3.9 KiB
Python
import shutil
|
|
|
|
import pytest
|
|
from six import PY2
|
|
|
|
from pre_commit_hooks.pretty_format_json import main
|
|
from pre_commit_hooks.pretty_format_json import parse_num_to_int
|
|
from testing.util import get_resource_path
|
|
|
|
|
|
def test_parse_num_to_int():
|
|
assert parse_num_to_int('0') == 0
|
|
assert parse_num_to_int('2') == 2
|
|
assert parse_num_to_int('\t') == '\t'
|
|
assert parse_num_to_int(' ') == ' '
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
('filename', 'expected_retval'), (
|
|
('not_pretty_formatted_json.json', 1),
|
|
('unsorted_pretty_formatted_json.json', 1),
|
|
('non_ascii_pretty_formatted_json.json', 1),
|
|
('pretty_formatted_json.json', 0),
|
|
),
|
|
)
|
|
def test_main(filename, expected_retval):
|
|
ret = main([get_resource_path(filename)])
|
|
assert ret == expected_retval
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
('filename', 'expected_retval'), (
|
|
('not_pretty_formatted_json.json', 1),
|
|
('unsorted_pretty_formatted_json.json', 0),
|
|
('non_ascii_pretty_formatted_json.json', 1),
|
|
('pretty_formatted_json.json', 0),
|
|
),
|
|
)
|
|
def test_unsorted_main(filename, expected_retval):
|
|
ret = main(['--no-sort-keys', get_resource_path(filename)])
|
|
assert ret == expected_retval
|
|
|
|
|
|
@pytest.mark.skipif(PY2, reason='Requires Python3')
|
|
@pytest.mark.parametrize(
|
|
('filename', 'expected_retval'), (
|
|
('not_pretty_formatted_json.json', 1),
|
|
('unsorted_pretty_formatted_json.json', 1),
|
|
('non_ascii_pretty_formatted_json.json', 1),
|
|
('pretty_formatted_json.json', 1),
|
|
('tab_pretty_formatted_json.json', 0),
|
|
),
|
|
)
|
|
def test_tab_main(filename, expected_retval): # pragma: no cover
|
|
ret = main(['--indent', '\t', get_resource_path(filename)])
|
|
assert ret == expected_retval
|
|
|
|
|
|
def test_non_ascii_main():
|
|
ret = main((
|
|
'--no-ensure-ascii',
|
|
get_resource_path('non_ascii_pretty_formatted_json.json'),
|
|
))
|
|
assert ret == 0
|
|
|
|
|
|
def test_autofix_main(tmpdir):
|
|
srcfile = tmpdir.join('to_be_json_formatted.json')
|
|
shutil.copyfile(
|
|
get_resource_path('not_pretty_formatted_json.json'),
|
|
srcfile.strpath,
|
|
)
|
|
|
|
# now launch the autofix on that file
|
|
ret = main(['--autofix', srcfile.strpath])
|
|
# it should have formatted it
|
|
assert ret == 1
|
|
|
|
# file was formatted (shouldn't trigger linter again)
|
|
ret = main([srcfile.strpath])
|
|
assert ret == 0
|
|
|
|
|
|
def test_orderfile_get_pretty_format():
|
|
ret = main((
|
|
'--top-keys=alist', get_resource_path('pretty_formatted_json.json'),
|
|
))
|
|
assert ret == 0
|
|
|
|
|
|
def test_not_orderfile_get_pretty_format():
|
|
ret = main((
|
|
'--top-keys=blah', get_resource_path('pretty_formatted_json.json'),
|
|
))
|
|
assert ret == 1
|
|
|
|
|
|
def test_top_sorted_get_pretty_format():
|
|
ret = main((
|
|
'--top-keys=01-alist,alist', get_resource_path('top_sorted_json.json'),
|
|
))
|
|
assert ret == 0
|
|
|
|
|
|
def test_badfile_main():
|
|
ret = main([get_resource_path('ok_yaml.yaml')])
|
|
assert ret == 1
|
|
|
|
|
|
def test_diffing_output(capsys):
|
|
resource_path = get_resource_path('not_pretty_formatted_json.json')
|
|
expected_retval = 1
|
|
expected_diff = '''
|
|
{
|
|
- "foo":
|
|
- "bar",
|
|
- "alist": [2, 34, 234],
|
|
+ "alist": [
|
|
+ 2,
|
|
+ 34,
|
|
+ 234
|
|
+ ],
|
|
- "blah": null
|
|
+ "blah": null,
|
|
? +
|
|
+ "foo": "bar"
|
|
}
|
|
|
|
{
|
|
- "foo":
|
|
- "bar",
|
|
- "alist": [2, 34, 234],
|
|
+ "alist": [
|
|
+ 2,
|
|
+ 34,
|
|
+ 234
|
|
+ ],
|
|
- "blah": null
|
|
+ "blah": null,
|
|
? +
|
|
+ "foo": "bar"
|
|
}
|
|
|
|
|
|
'''
|
|
# output should include a line with the filepath, build it here
|
|
file_output_line = 'File {} is not pretty-formatted'.format(resource_path)
|
|
# prepend the above line to the diff
|
|
expected_output = file_output_line + expected_diff
|
|
|
|
actual_retval = main([resource_path])
|
|
actual_output = capsys.readouterr()
|
|
|
|
assert actual_retval == expected_retval
|
|
|
|
actual_output = '\n'.join(actual_output)
|
|
assert actual_output == expected_output
|