| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- import sys
- from unittest import mock
- import pytest
- from qrcode.console_scripts import commas, main
- def bad_read():
- raise UnicodeDecodeError("utf-8", b"0x80", 0, 1, "invalid start byte")
- @mock.patch("os.isatty", lambda *args: True)
- @mock.patch("qrcode.main.QRCode.print_ascii")
- def test_isatty(mock_print_ascii):
- main(["testtext"])
- mock_print_ascii.assert_called_with(tty=True)
- @mock.patch("os.isatty", lambda *args: False)
- def test_piped():
- pytest.importorskip("PIL", reason="Requires PIL")
- main(["testtext"])
- @mock.patch("os.isatty", lambda *args: True)
- def test_stdin():
- with mock.patch("qrcode.main.QRCode.print_ascii") as mock_print_ascii:
- with mock.patch("sys.stdin") as mock_stdin:
- mock_stdin.buffer.read.return_value = "testtext"
- main([])
- assert mock_stdin.buffer.read.called
- mock_print_ascii.assert_called_with(tty=True)
- @mock.patch("os.isatty", lambda *args: True)
- def test_stdin_py3_unicodedecodeerror():
- with mock.patch("qrcode.main.QRCode.print_ascii") as mock_print_ascii:
- with mock.patch("sys.stdin") as mock_stdin:
- mock_stdin.buffer.read.return_value = "testtext"
- mock_stdin.read.side_effect = bad_read
- # sys.stdin.read() will raise an error...
- with pytest.raises(UnicodeDecodeError):
- sys.stdin.read()
- # ... but it won't be used now.
- main([])
- mock_print_ascii.assert_called_with(tty=True)
- def test_optimize():
- pytest.importorskip("PIL", reason="Requires PIL")
- main("testtext --optimize 0".split())
- def test_factory():
- main(["testtext", "--factory", "svg"])
- def test_bad_factory():
- with pytest.raises(SystemExit):
- main(["testtext", "--factory", "nope"])
- @mock.patch.object(sys, "argv", "qr testtext output".split())
- def test_sys_argv():
- pytest.importorskip("PIL", reason="Requires PIL")
- main()
- def test_output(tmp_path):
- pytest.importorskip("PIL", reason="Requires PIL")
- main(["testtext", "--output", str(tmp_path / "test.png")])
- def test_factory_drawer_none(capsys):
- pytest.importorskip("PIL", reason="Requires PIL")
- with pytest.raises(SystemExit):
- main("testtext --factory pil --factory-drawer nope".split())
- assert "The selected factory has no drawer aliases" in capsys.readouterr()[1]
- def test_factory_drawer_bad(capsys):
- with pytest.raises(SystemExit):
- main("testtext --factory svg --factory-drawer sobad".split())
- assert "sobad factory drawer not found" in capsys.readouterr()[1]
- def test_factory_drawer(capsys):
- main("testtext --factory svg --factory-drawer circle".split())
- def test_commas():
- assert commas([]) == ""
- assert commas(["A"]) == "A"
- assert commas("AB") == "A or B"
- assert commas("ABC") == "A, B or C"
- assert commas("ABC", joiner="and") == "A, B and C"
|