PCQRSCANER/venv/Lib/site-packages/pyzbar/tests/test_zbar_library.py

139 lines
4.2 KiB
Python
Raw Permalink Normal View History

2019-12-22 21:51:47 +01:00
import unittest
from pathlib import Path
try:
from unittest.mock import call, patch
except ImportError:
# Python 2
from mock import call, patch
from pyzbar import zbar_library
class TestLoad(unittest.TestCase):
def setUp(self):
self.addCleanup(patch.stopall)
self.cdll = patch(
'pyzbar.zbar_library.cdll', autospec=True
).start()
self.find_library = patch(
'pyzbar.zbar_library.find_library', autospec=True
).start()
self.platform = patch(
'pyzbar.zbar_library.platform', autospec=True
).start()
self.windows_fnames = patch(
'pyzbar.zbar_library._windows_fnames', autospec=True,
return_value=('dll fname', ['dependency fname'])
).start()
def test_found_non_windows(self):
"zbar loaded ok on non-Windows platform"
self.platform.system.return_value = 'Not windows'
res = zbar_library.load()
self.platform.system.assert_called_once_with()
self.find_library.assert_called_once_with('zbar')
self.cdll.LoadLibrary.assert_called_once_with(
self.find_library.return_value
)
self.assertEqual((self.cdll.LoadLibrary.return_value, []), res)
self.assertEqual(0, self.windows_fnames.call_count)
def test_not_found_non_windows(self):
"zbar not found on non-Windows platform"
self.platform.system.return_value = 'Not windows'
self.find_library.return_value = None
self.assertRaises(ImportError, zbar_library.load)
self.platform.system.assert_called_once_with()
self.find_library.assert_called_once_with('zbar')
def test_found_windows(self):
"zbar found on Windows"
self.platform.system.return_value = 'Windows'
res = zbar_library.load()
self.platform.system.assert_called_once_with()
self.cdll.LoadLibrary.assert_has_calls([
call('dependency fname'),
call('dll fname'),
])
self.assertEqual(
(
self.cdll.LoadLibrary.return_value,
[self.cdll.LoadLibrary.return_value]
),
res
)
def test_found_second_attempt_windows(self):
"zbar found on the second attempt on Windows"
self.platform.system.return_value = 'Windows'
self.cdll.LoadLibrary.side_effect = [
OSError, # First call does not load dependent DLL
'loaded dependency', # Second call loads dependent DLL
'loaded zbar', # Third call loads dependent DLL
]
res = zbar_library.load()
self.platform.system.assert_called_once_with()
self.cdll.LoadLibrary.assert_has_calls([
call('dependency fname'),
call(str(Path(zbar_library.__file__).parent.joinpath(
'dependency fname'
))),
call(str(Path(zbar_library.__file__).parent.joinpath(
'dll fname'
))),
])
self.assertEqual(('loaded zbar', ['loaded dependency']), res)
def test_not_found_windows(self):
"zbar not found on Windows"
self.platform.system.return_value = 'Windows'
self.cdll.LoadLibrary.side_effect = OSError
self.assertRaises(OSError, zbar_library.load)
self.platform.system.assert_called_once_with()
# Two attempts at loading
self.cdll.LoadLibrary.assert_has_calls([
call('dependency fname'),
call(str(Path(zbar_library.__file__).parent.joinpath(
'dependency fname'
))),
])
class TestWindowsFnames(unittest.TestCase):
def setUp(self):
self.addCleanup(patch.stopall)
self.sys = patch('pyzbar.zbar_library.sys', autospec=True).start()
def test_32bit(self):
self.sys.maxsize = 2**32
self.assertEqual(
('libzbar-32.dll', ['libiconv-2.dll']),
zbar_library._windows_fnames()
)
def test_64bit(self):
# This is a 'long' on a 32-bit interpreter
self.sys.maxsize = 2**32 + 1
self.assertEqual(
('libzbar-64.dll', ['libiconv.dll']),
zbar_library._windows_fnames()
)
if __name__ == '__main__':
unittest.main()