mirror of
https://github.com/lowobservable/coax.git
synced 2026-02-23 07:52:13 +00:00
70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
import unittest
|
|
from unittest.mock import Mock, call, patch
|
|
|
|
import context
|
|
|
|
from coax.features import Feature, get_features
|
|
|
|
class GetFeaturesTestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
self.interface = Mock()
|
|
|
|
patcher = patch('coax.features.read_feature_id')
|
|
|
|
self.read_feature_id_mock = patcher.start()
|
|
|
|
self.addCleanup(patch.stopall)
|
|
|
|
def test_with_known_feature(self):
|
|
# Arrange
|
|
def read_feature_id(interface, feature_address, **kwargs):
|
|
if feature_address == 7:
|
|
return 0x79
|
|
|
|
return None
|
|
|
|
self.read_feature_id_mock.side_effect = read_feature_id
|
|
|
|
# Act
|
|
features = get_features(self.interface)
|
|
|
|
# Assert
|
|
self.assertEqual(features, { Feature.EAB: 7 })
|
|
|
|
def test_with_unknown_feature(self):
|
|
# Arrange
|
|
def read_feature_id(interface, feature_address, **kwargs):
|
|
if feature_address == 7:
|
|
return 0x99
|
|
|
|
return None
|
|
|
|
self.read_feature_id_mock.side_effect = read_feature_id
|
|
|
|
# Act
|
|
features = get_features(self.interface)
|
|
|
|
# Assert
|
|
self.assertEqual(features, { })
|
|
|
|
def test_all_feature_addresses_are_enumerated(self):
|
|
# Act
|
|
features = get_features(self.interface)
|
|
|
|
# Assert
|
|
calls = self.read_feature_id_mock.call_args_list
|
|
|
|
self.assertEqual(calls, [call(self.interface, address) for address in range(2, 16)])
|
|
|
|
def test_receive_timeout_is_passed_to_read_feature_id(self):
|
|
# Act
|
|
features = get_features(self.interface, receive_timeout=10)
|
|
|
|
# Assert
|
|
calls = self.read_feature_id_mock.call_args_list
|
|
|
|
self.assertEqual(calls, [call(self.interface, address, receive_timeout=10) for address in range(2, 16)])
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|