Files
lowobservable.coax/pycoax/tests/test_features.py
Andrew Kay e0af47a299 EAB feature
2020-07-19 13:48:17 -05:00

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()