summaryrefslogtreecommitdiffstats
path: root/tests/trailing_whitespace_fixer_test.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/trailing_whitespace_fixer_test.py103
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/trailing_whitespace_fixer_test.py b/tests/trailing_whitespace_fixer_test.py
new file mode 100644
index 0000000..c07497a
--- /dev/null
+++ b/tests/trailing_whitespace_fixer_test.py
@@ -0,0 +1,103 @@
+from __future__ import annotations
+
+import pytest
+
+from pre_commit_hooks.trailing_whitespace_fixer import main
+
+
+@pytest.mark.parametrize(
+ ('input_s', 'expected'),
+ (
+ ('foo \nbar \n', 'foo\nbar\n'),
+ ('bar\t\nbaz\t\n', 'bar\nbaz\n'),
+ ),
+)
+def test_fixes_trailing_whitespace(input_s, expected, tmpdir):
+ path = tmpdir.join('file.md')
+ path.write(input_s)
+ assert main((str(path),)) == 1
+ assert path.read() == expected
+
+
+def test_ok_no_newline_end_of_file(tmpdir):
+ filename = tmpdir.join('f')
+ filename.write_binary(b'foo\nbar')
+ ret = main((str(filename),))
+ assert filename.read_binary() == b'foo\nbar'
+ assert ret == 0
+
+
+def test_ok_with_dos_line_endings(tmpdir):
+ filename = tmpdir.join('f')
+ filename.write_binary(b'foo\r\nbar\r\nbaz\r\n')
+ ret = main((str(filename),))
+ assert filename.read_binary() == b'foo\r\nbar\r\nbaz\r\n'
+ assert ret == 0
+
+
+@pytest.mark.parametrize('ext', ('md', 'Md', '.md', '*'))
+def test_fixes_markdown_files(tmpdir, ext):
+ path = tmpdir.join('test.md')
+ path.write(
+ 'foo \n' # leaves alone
+ 'bar \n' # less than two so it is removed
+ 'baz \n' # more than two so it becomes two spaces
+ '\t\n' # trailing tabs are stripped anyway
+ '\n ', # whitespace at the end of the file is removed
+ )
+ ret = main((str(path), f'--markdown-linebreak-ext={ext}'))
+ assert ret == 1
+ assert path.read() == (
+ 'foo \n'
+ 'bar\n'
+ 'baz \n'
+ '\n'
+ '\n'
+ )
+
+
+@pytest.mark.parametrize('arg', ('--', 'a.b', 'a/b', ''))
+def test_markdown_linebreak_ext_badopt(arg):
+ with pytest.raises(SystemExit) as excinfo:
+ main(['--markdown-linebreak-ext', arg])
+ assert excinfo.value.code == 2
+
+
+def test_prints_warning_with_no_markdown_ext(capsys, tmpdir):
+ f = tmpdir.join('f').ensure()
+ assert main((str(f), '--no-markdown-linebreak-ext')) == 0
+ out, _ = capsys.readouterr()
+ assert out == '--no-markdown-linebreak-ext now does nothing!\n'
+
+
+def test_preserve_non_utf8_file(tmpdir):
+ non_utf8_bytes_content = b'<a>\xe9 \n</a>\n'
+ path = tmpdir.join('file.txt')
+ path.write_binary(non_utf8_bytes_content)
+ ret = main([str(path)])
+ assert ret == 1
+ assert path.size() == (len(non_utf8_bytes_content) - 1)
+
+
+def test_custom_charset_change(tmpdir):
+ # strip spaces only, no tabs
+ path = tmpdir.join('file.txt')
+ path.write('\ta \t \n')
+ ret = main([str(path), '--chars', ' '])
+ assert ret == 1
+ assert path.read() == '\ta \t\n'
+
+
+def test_custom_charset_no_change(tmpdir):
+ path = tmpdir.join('file.txt')
+ path.write('\ta \t\n')
+ ret = main([str(path), '--chars', ' '])
+ assert ret == 0
+
+
+def test_markdown_with_custom_charset(tmpdir):
+ path = tmpdir.join('file.md')
+ path.write('\ta \t \n')
+ ret = main([str(path), '--chars', ' ', '--markdown-linebreak-ext', '*'])
+ assert ret == 1
+ assert path.read() == '\ta \t \n'