Marco Ricci commited on 2024-09-01 18:08:20
Zeige 2 geänderte Dateien mit 5 Einfügungen und 4 Löschungen.
Stop using the `click` facilities to run checks on command-line arguments or option values that are to be treated as paths; treat them like normal strings instead. `click`'s path checking functionality misdiagnoses its own failure cases, is racy, and does not document its own raciness. Instead, use `click`'s `open_file` function to handle the standard streams (an actual useful feature), and use bog-standard operating system calls for everything else. As an added bonus, this makes writing unit tests much easier, because we no longer have to work around `click`'s functionality and can use simpler counterexamples/failure cases. This change was originally prompted by a silently failing test, which did not test the expected error message because it was subject to translation, so `click` could silently sidestep the whole code under test. We now test for the operating system-provided error message directly, via standard operating system facilities that are integrated into the translation/locale system.
... | ... |
@@ -737,7 +737,6 @@ DEFAULT_NOTES_MARKER = '# - - - - - >8 - - - - -' |
737 | 737 |
'--export', |
738 | 738 |
'export_settings', |
739 | 739 |
metavar='PATH', |
740 |
- type=click.Path(file_okay=True, allow_dash=True, exists=False), |
|
741 | 740 |
help='export all saved settings into file PATH', |
742 | 741 |
cls=StorageManagementOption, |
743 | 742 |
) |
... | ... |
@@ -746,7 +745,6 @@ DEFAULT_NOTES_MARKER = '# - - - - - >8 - - - - -' |
746 | 745 |
'--import', |
747 | 746 |
'import_settings', |
748 | 747 |
metavar='PATH', |
749 |
- type=click.Path(file_okay=True, allow_dash=True, exists=False), |
|
750 | 748 |
help='import saved settings from file PATH', |
751 | 749 |
cls=StorageManagementOption, |
752 | 750 |
) |
... | ... |
@@ -5,6 +5,7 @@ |
5 | 5 |
from __future__ import annotations |
6 | 6 |
|
7 | 7 |
import contextlib |
8 |
+import errno |
|
8 | 9 |
import json |
9 | 10 |
import os |
10 | 11 |
import shutil |
... | ... |
@@ -659,8 +660,10 @@ class TestCLI: |
659 | 660 |
assert ( |
660 | 661 |
result.stderr_bytes |
661 | 662 |
), 'program did not print any error message' |
662 |
- # Don't test the actual error message, because it is subject to |
|
663 |
- # locale settings. TODO: find a way anyway. |
|
663 |
+ assert ( |
|
664 |
+ os.strerror(errno.EISDIR).encode('utf-8') |
|
665 |
+ in result.stderr_bytes |
|
666 |
+ ), 'program did not print the expected error message' |
|
664 | 667 |
|
665 | 668 |
def test_214_export_settings_no_stored_settings( |
666 | 669 |
self, |
667 | 670 |