Merge pull request #1095 from nemacysts/file-contents-sorter-mutex

Disallow --unique alongside --ignore-cases in file-contents-sorter
diff --git a/pre_commit_hooks/file_contents_sorter.py b/pre_commit_hooks/file_contents_sorter.py
index bfbeb25..4435d6a 100644
--- a/pre_commit_hooks/file_contents_sorter.py
+++ b/pre_commit_hooks/file_contents_sorter.py
@@ -54,18 +54,21 @@
 def main(argv: Sequence[str] | None = None) -> int:
     parser = argparse.ArgumentParser()
     parser.add_argument('filenames', nargs='+', help='Files to sort')
-    parser.add_argument(
+
+    mutex = parser.add_mutually_exclusive_group(required=False)
+    mutex.add_argument(
         '--ignore-case',
         action='store_const',
         const=bytes.lower,
         default=None,
         help='fold lower case to upper case characters',
     )
-    parser.add_argument(
+    mutex.add_argument(
         '--unique',
         action='store_true',
         help='ensure each line is unique',
     )
+
     args = parser.parse_args(argv)
 
     retv = PASS
diff --git a/tests/file_contents_sorter_test.py b/tests/file_contents_sorter_test.py
index 49b3b79..f178ae6 100644
--- a/tests/file_contents_sorter_test.py
+++ b/tests/file_contents_sorter_test.py
@@ -67,18 +67,6 @@
             FAIL,
             b'Fie\nFoe\nfee\nfum\n',
         ),
-        (
-            b'fee\nFie\nFoe\nfum\n',
-            ['--unique', '--ignore-case'],
-            PASS,
-            b'fee\nFie\nFoe\nfum\n',
-        ),
-        (
-            b'fee\nfee\nFie\nFoe\nfum\n',
-            ['--unique', '--ignore-case'],
-            FAIL,
-            b'fee\nFie\nFoe\nfum\n',
-        ),
     ),
 )
 def test_integration(input_s, argv, expected_retval, output, tmpdir):
@@ -89,3 +77,24 @@
 
     assert path.read_binary() == output
     assert output_retval == expected_retval
+
+
+@pytest.mark.parametrize(
+    ('input_s', 'argv'),
+    (
+        (
+            b'fee\nFie\nFoe\nfum\n',
+            ['--unique', '--ignore-case'],
+        ),
+        (
+            b'fee\nfee\nFie\nFoe\nfum\n',
+            ['--unique', '--ignore-case'],
+        ),
+    ),
+)
+def test_integration_invalid_args(input_s, argv, tmpdir):
+    path = tmpdir.join('file.txt')
+    path.write_binary(input_s)
+
+    with pytest.raises(SystemExit):
+        main([str(path)] + argv)