parent
105e23b187
commit
b9a7466208
@ -0,0 +1,162 @@ |
||||
import sys |
||||
from unittest import TestCase |
||||
from unittest.mock import patch, MagicMock |
||||
from io import StringIO |
||||
|
||||
|
||||
class Test(TestCase): |
||||
def setUp(self): |
||||
print("Real platform: " + sys.platform) |
||||
|
||||
@patch('sys.platform', new='linux') |
||||
def test_all_in_linux_positive(self): |
||||
method, output = self.call_it(True, True, True, None, None) |
||||
self.assertIn('device initialized', output) |
||||
self.assertIsNotNone(method) |
||||
|
||||
method, output = self.call_it(True, True, True, 'libusb', None) |
||||
self.assertIn('device initialized', output) |
||||
self.assertIsNotNone(method) |
||||
|
||||
method, output = self.call_it(True, True, True, 'hidapi', None) |
||||
self.assertIn('device initialized', output) |
||||
self.assertIsNotNone(method) |
||||
|
||||
@patch('sys.platform', new='linux') |
||||
def test_only_one_lib_linux_positive(self): |
||||
method, output = self.call_it(False, True, True, None, None) |
||||
self.assertIn('device initialized', output) |
||||
self.assertIsNotNone(method) |
||||
|
||||
method, output = self.call_it(False, True, True, 'hidapi', None) |
||||
self.assertIn('device initialized', output) |
||||
self.assertIsNotNone(method) |
||||
|
||||
method, output = self.call_it(True, False, True, None, None) |
||||
self.assertIn('device initialized', output) |
||||
self.assertIsNotNone(method) |
||||
|
||||
method, output = self.call_it(True, False, True, 'libusb', None) |
||||
self.assertIn('device initialized', output) |
||||
self.assertIsNotNone(method) |
||||
|
||||
@patch('sys.platform', new='windows') |
||||
def test_windows_positive(self): |
||||
method, output = self.call_it(True, False, True, None, None) |
||||
self.assertIn('device initialized', output) |
||||
self.assertIsNotNone(method) |
||||
|
||||
method, output = self.call_it(True, False, True, 'libusb', None) |
||||
self.assertIn('device initialized', output) |
||||
self.assertIsNotNone(method) |
||||
|
||||
@patch('sys.platform', new='darwin') |
||||
def test_macos_positive(self): |
||||
method, output = self.call_it(False, True, True, None, None) |
||||
self.assertIn('device initialized', output) |
||||
self.assertIsNotNone(method) |
||||
|
||||
method, output = self.call_it(False, True, True, 'hidapi', None) |
||||
self.assertIn('device initialized', output) |
||||
self.assertIsNotNone(method) |
||||
|
||||
|
||||
#-------------------------------------------------------------------------- |
||||
|
||||
|
||||
@patch('sys.platform', new='linux') |
||||
def test_all_in_linux_negative(self): |
||||
method, output = self.call_it(True, True, False, None, None) |
||||
self.assertNotIn('device initialized', output) |
||||
self.assertIn('device is not available', output) |
||||
self.assertIsNone(method) |
||||
|
||||
method, output = self.call_it(True, True, False, 'libusb', None) |
||||
self.assertNotIn('device initialized', output) |
||||
self.assertIn('device is not available', output) |
||||
self.assertIsNone(method) |
||||
|
||||
method, output = self.call_it(True, True, False, 'hidapi', None) |
||||
self.assertNotIn('device initialized', output) |
||||
self.assertIn('device is not available', output) |
||||
self.assertIsNone(method) |
||||
|
||||
@patch('sys.platform', new='linux') |
||||
def test_all_out_linux_negative(self): |
||||
method, output = self.call_it(False, False, False, None, None) |
||||
self.assertNotIn('device initialized', output) |
||||
self.assertIn('device is not available', output) |
||||
self.assertIsNone(method) |
||||
|
||||
method, output = self.call_it(False, False, False, 'libusb', None) |
||||
self.assertNotIn('device initialized', output) |
||||
self.assertIn('is not possible to be used', output) |
||||
self.assertIsNone(method) |
||||
|
||||
method, output = self.call_it(False, False, False, 'hidapi', None) |
||||
self.assertNotIn('device initialized', output) |
||||
self.assertIn('is not possible to be used', output) |
||||
self.assertIsNone(method) |
||||
|
||||
@patch('sys.platform', new='windows') |
||||
def test_windows_negative(self): |
||||
method, output = self.call_it(True, False, True, 'hidapi', None) |
||||
self.assertNotIn('device initialized', output) |
||||
self.assertIn('please use method', output) |
||||
self.assertIsNone(method) |
||||
|
||||
@patch('sys.platform', new='darwin') |
||||
def test_macos_negative(self): |
||||
method, output = self.call_it(False, True, True, 'libusb', None) |
||||
self.assertNotIn('device initialized', output) |
||||
self.assertIn('please use method', output) |
||||
self.assertIsNone(method) |
||||
|
||||
|
||||
#-------------------------------------------------------------------------- |
||||
|
||||
|
||||
def call_it_neg(self, pyusb_available, pyhidapi_available, device_available, method, endpoint): |
||||
method_obj = None |
||||
output = None |
||||
with self.assertRaises(SystemExit): |
||||
method_obj, output = self.call_it(pyusb_available, pyhidapi_available, device_available, method, endpoint) |
||||
return method_obj, output |
||||
|
||||
def call_it(self, pyusb_available, pyhidapi_available, device_available, method, endpoint): |
||||
method_obj = None |
||||
output = None |
||||
with self.do_import_patch(pyusb_available, pyhidapi_available, device_available) as mock: |
||||
with patch('sys.stdout', new_callable=StringIO) as stdio_mock: |
||||
import lednamebadge |
||||
try: |
||||
method_obj = lednamebadge.LedNameBadge._find_write_method(method, endpoint) |
||||
except(SystemExit): |
||||
pass |
||||
output = stdio_mock.getvalue() |
||||
print(output) |
||||
self.assertEqual(pyusb_available, 'pyusb detected' in output) |
||||
self.assertEqual(pyhidapi_available, 'pyhidapi detected' in output) |
||||
return method_obj, output |
||||
|
||||
def do_import_patch(self, pyusb_available, pyhidapi_available, device_available): |
||||
return patch.dict('sys.modules', |
||||
{ |
||||
'pyhidapi': self.create_hid_mock(device_available) if pyhidapi_available else None, |
||||
'usb': self.create_usb_mock(device_available) if pyusb_available else None, |
||||
'usb.core': MagicMock() if pyusb_available else None}) |
||||
|
||||
def create_hid_mock(self, device_available): |
||||
device = MagicMock() |
||||
device.path = 'devicepath' |
||||
|
||||
mock = MagicMock() |
||||
mock.hid_enumerate.return_value = [device] if device_available else None |
||||
mock.hid_open_path.return_value = 'device' if device_available else None |
||||
return mock |
||||
|
||||
def create_usb_mock(self, device_available): |
||||
mock = MagicMock() |
||||
mock.core = MagicMock() |
||||
mock.core.find.return_value = 'device' if device_available else None |
||||
return mock |
Loading…
Reference in new issue