from __future__ import absolute_import from __future__ import unicode_literals import sys import pytest from pre_commit_hooks.trailing_whitespace_fixer import fix_trailing_whitespace from testing.util import cwd def test_fixes_trailing_whitespace(tmpdir): with cwd(tmpdir.strpath): for filename, contents in ( ('foo.py', 'foo \nbar \n'), ('bar.py', 'bar\t\nbaz\t\n'), ): with open(filename, 'w') as file_obj: file_obj.write(contents) # pragma: no branch (26 coverage bug) ret = fix_trailing_whitespace(['foo.py', 'bar.py']) assert ret == 1 for filename, after_contents in ( ('foo.py', 'foo\nbar\n'), ('bar.py', 'bar\nbaz\n'), ): assert open(filename).read() == after_contents # filename, expected input, expected output MD_TESTS_1 = ( ('foo.md', 'foo \nbar \n ', 'foo \nbar\n\n'), ('bar.Markdown', 'bar \nbaz\t\n\t\n', 'bar \nbaz\n\n'), ('.md', 'baz \nquux \t\n\t\n', 'baz\nquux\n\n'), ('txt', 'foo \nbaz \n\t\n', 'foo\nbaz\n\n'), ) @pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_1) def test_fixes_trailing_markdown_whitespace(filename, input_s, output, tmpdir): with cwd(tmpdir.strpath): with open(filename, 'w') as file_obj: file_obj.write(input_s) # pragma: no branch (26 coverage bug) ret = fix_trailing_whitespace([filename]) assert ret == 1 assert open(filename).read() == output # filename, expected input, expected output MD_TESTS_2 = ( ('foo.txt', 'foo \nbar \n \n', 'foo \nbar\n\n'), ('bar.Markdown', 'bar \nbaz\t\n\t\n', 'bar \nbaz\n\n'), ('bar.MD', 'bar \nbaz\t \n\t\n', 'bar \nbaz\n\n'), ('.txt', 'baz \nquux \t\n\t\n', 'baz\nquux\n\n'), ('txt', 'foo \nbaz \n\t\n', 'foo\nbaz\n\n'), ) @pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_2) def test_markdown_linebreak_ext_opt(filename, input_s, output, tmpdir): with cwd(tmpdir.strpath): with open(filename, 'w') as file_obj: file_obj.write(input_s) # pragma: no branch (26 coverage bug) ret = fix_trailing_whitespace(['--markdown-linebreak-ext=TxT', filename]) assert ret == 1 assert open(filename).read() == output # filename, expected input, expected output MD_TESTS_3 = ( ('foo.baz', 'foo \nbar \n ', 'foo \nbar\n\n'), ('bar', 'bar \nbaz\t\n\t\n', 'bar \nbaz\n\n'), ) @pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_3) def test_markdown_linebreak_ext_opt_all(filename, input_s, output, tmpdir): with cwd(tmpdir.strpath): with open(filename, 'w') as file_obj: file_obj.write(input_s) # pragma: no branch (26 coverage bug) # need to make sure filename is not treated as argument to option ret = fix_trailing_whitespace(['--markdown-linebreak-ext=*', filename]) assert ret == 1 assert open(filename).read() == output @pytest.mark.parametrize(('arg'), ('--', 'a.b', 'a/b')) def test_markdown_linebreak_ext_badopt(arg): try: ret = fix_trailing_whitespace(['--markdown-linebreak-ext', arg]) except SystemExit: ret = sys.exc_info()[1].code finally: assert ret == 2 # filename, expected input, expected output MD_TESTS_4 = ( ('bar.md', 'bar \nbaz\t \n\t\n', 'bar\nbaz\n\n'), ('bar.markdown', 'baz \nquux \n', 'baz\nquux\n'), ) @pytest.mark.parametrize(('filename', 'input_s', 'output'), MD_TESTS_4) def test_no_markdown_linebreak_ext_opt(filename, input_s, output, tmpdir): with cwd(tmpdir.strpath): with open(filename, 'w') as file_obj: file_obj.write(input_s) # pragma: no branch (26 coverage bug) ret = fix_trailing_whitespace(['--no-markdown-linebreak-ext', filename]) assert ret == 1 assert open(filename).read() == output def test_returns_zero_for_no_changes(): assert fix_trailing_whitespace([__file__]) == 0