73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
|
import os
|
||
|
import sys
|
||
|
import unittest
|
||
|
from tempfile import mkdtemp
|
||
|
from unittest import mock
|
||
|
|
||
|
from qrcode.console_scripts import main
|
||
|
|
||
|
|
||
|
def bad_read():
|
||
|
raise UnicodeDecodeError('utf-8', b'0x80', 0, 1, 'invalid start byte')
|
||
|
|
||
|
|
||
|
class ScriptTest(unittest.TestCase):
|
||
|
def setUp(self):
|
||
|
self.tmpdir = mkdtemp()
|
||
|
|
||
|
def tearDown(self):
|
||
|
os.rmdir(self.tmpdir)
|
||
|
|
||
|
@mock.patch('os.isatty', lambda *args: True)
|
||
|
@mock.patch('qrcode.main.QRCode.print_ascii')
|
||
|
def test_isatty(self, mock_print_ascii):
|
||
|
main(['testtext'])
|
||
|
mock_print_ascii.assert_called_with(tty=True)
|
||
|
|
||
|
@mock.patch('os.isatty', lambda *args: False)
|
||
|
@mock.patch('sys.stdout')
|
||
|
def test_piped(self, mock_stdout):
|
||
|
main(['testtext'])
|
||
|
|
||
|
@mock.patch('os.isatty', lambda *args: True)
|
||
|
@mock.patch('qrcode.main.QRCode.print_ascii')
|
||
|
def test_stdin(self, mock_print_ascii):
|
||
|
mock_stdin = mock.Mock(sys.stdin)
|
||
|
stdin_buffer = getattr(mock_stdin, 'buffer', mock_stdin)
|
||
|
stdin_buffer.read.return_value = 'testtext'
|
||
|
with mock.patch('sys.stdin', mock_stdin):
|
||
|
main([])
|
||
|
self.assertTrue(stdin_buffer.read.called)
|
||
|
mock_print_ascii.assert_called_with(tty=True)
|
||
|
|
||
|
@mock.patch('os.isatty', lambda *args: True)
|
||
|
@mock.patch('qrcode.main.QRCode.print_ascii')
|
||
|
def test_stdin_py3_unicodedecodeerror(self, mock_print_ascii):
|
||
|
mock_stdin = mock.Mock(sys.stdin)
|
||
|
mock_stdin.buffer.read.return_value = 'testtext'
|
||
|
mock_stdin.read.side_effect = bad_read
|
||
|
with mock.patch('sys.stdin', mock_stdin):
|
||
|
# sys.stdin.read() will raise an error...
|
||
|
self.assertRaises(UnicodeDecodeError, sys.stdin.read)
|
||
|
# ... but it won't be used now.
|
||
|
main([])
|
||
|
mock_print_ascii.assert_called_with(tty=True)
|
||
|
|
||
|
@mock.patch('os.isatty', lambda *args: True)
|
||
|
@mock.patch('qrcode.main.QRCode.print_ascii')
|
||
|
def test_optimize(self, mock_print_ascii):
|
||
|
main('testtext --optimize 0'.split())
|
||
|
|
||
|
@mock.patch('sys.stdout')
|
||
|
def test_factory(self, mock_stdout):
|
||
|
main('testtext --factory svg'.split())
|
||
|
|
||
|
@mock.patch('sys.stderr')
|
||
|
def test_bad_factory(self, mock_stderr):
|
||
|
self.assertRaises(SystemExit, main, 'testtext --factory fish'.split())
|
||
|
|
||
|
def test_output(self):
|
||
|
tmpfile = os.path.join(self.tmpdir, "test.png")
|
||
|
main(['testtext', '--output', tmpfile])
|
||
|
os.remove(tmpfile)
|