diff --git a/nested_diff/cli.py b/nested_diff/cli.py index 9f7ca0d..13cc65a 100644 --- a/nested_diff/cli.py +++ b/nested_diff/cli.py @@ -157,8 +157,12 @@ def get_dumper(fmt, **kwargs): raise RuntimeError(f'Unsupported output format: {fmt}') - @staticmethod - def guess_fmt(fp, default, ignore_fps=(sys.stdin, sys.stdout, sys.stderr)): + def guess_fmt( + self, + fp, + default, + ignore_fps=(sys.stdin, sys.stdout, sys.stderr), + ): """Guess format of a file object according it's extension.""" if fp in ignore_fps: return default @@ -168,7 +172,7 @@ def guess_fmt(fp, default, ignore_fps=(sys.stdin, sys.stdout, sys.stderr)): if fmt == 'yml': fmt = 'yaml' - return fmt if fmt else default + return fmt if fmt in self.supported_ifmts else default @staticmethod def get_loader(fmt, **kwargs): @@ -209,7 +213,7 @@ def load(self, file_): """ if self.args.ifmt == 'auto': - fmt = self.guess_fmt(file_, 'json') + fmt = self.guess_fmt(file_, 'plaintext') else: fmt = self.args.ifmt diff --git a/tests/cli/shared.a.txt b/tests/cli/shared.a.txt new file mode 100644 index 0000000..4cb29ea --- /dev/null +++ b/tests/cli/shared.a.txt @@ -0,0 +1,3 @@ +one +two +three diff --git a/tests/cli/shared.b.txt b/tests/cli/shared.b.txt new file mode 100644 index 0000000..814f4a4 --- /dev/null +++ b/tests/cli/shared.b.txt @@ -0,0 +1,2 @@ +one +two diff --git a/tests/cli/test_cli.py b/tests/cli/test_cli.py index ef0c37b..e21fc9a 100644 --- a/tests/cli/test_cli.py +++ b/tests/cli/test_cli.py @@ -72,18 +72,22 @@ def test_excepthook_raise_system_exit_127(): assert e.value.code == 127 -def test_guess_fmt_aliases(): +def test_guess_fmt(): class FakeFP: name = None - aliases = { + exts = { + 'ini': 'ini', + 'json': 'json', + 'py': 'default', + 'txt': 'default', 'yml': 'yaml', } fake_fp = FakeFP() - for ext in sorted(aliases): + for ext, fmt in sorted(exts.items()): fake_fp.name = f'filename.{ext}' - assert cli.App(args=()).guess_fmt(fake_fp, 'default') == aliases[ext] + assert cli.App(args=()).guess_fmt(fake_fp, 'default') == fmt def test_guess_fmt_ignore_fp_defaults(): diff --git a/tests/cli/test_diff_tool.py b/tests/cli/test_diff_tool.py index aa4531f..858263a 100644 --- a/tests/cli/test_diff_tool.py +++ b/tests/cli/test_diff_tool.py @@ -284,6 +284,21 @@ def test_html_ofmt_wrappings(capsys, expected, rpath): assert captured.out == expected +def test_fallback_ifmt(capsys, expected, rpath): + exit_code = nested_diff.diff_tool.App( + args=( + rpath('shared.a.txt'), + rpath('shared.b.txt'), + ), + ).run() + + captured = capsys.readouterr() + assert captured.err == '' + assert exit_code == 1 + + assert captured.out == expected + + def test_plaintext_ifmt(capsys, expected, rpath): exit_code = nested_diff.diff_tool.App( args=( diff --git a/tests/cli/test_diff_tool.test_fallback_ifmt.exp b/tests/cli/test_diff_tool.test_fallback_ifmt.exp new file mode 100644 index 0000000..bc10e83 --- /dev/null +++ b/tests/cli/test_diff_tool.test_fallback_ifmt.exp @@ -0,0 +1,6 @@ +# + @@ -1,4 +1,3 @@ + one + two +- three +