1import unittest
2from unittest import TestCase
3from metadata_model import *
4from metadata_helpers import *
5
6class TestHelpers(TestCase):
7
8  def test_enum_calculate_value_string(self):
9    def compare_values_against_list(expected_list, enum):
10      for (idx, val) in enumerate(expected_list):
11        self.assertEquals(val,
12                          enum_calculate_value_string(list(enum.values)[idx]))
13
14    plain_enum = Enum(parent=None, values=['ON', 'OFF'])
15
16    compare_values_against_list(['0', '1'],
17                                plain_enum)
18
19    ###
20    labeled_enum = Enum(parent=None, values=['A', 'B', 'C'], ids={
21      'A': '12345',
22      'B': '0xC0FFEE',
23      'C': '0xDEADF00D'
24    })
25
26    compare_values_against_list(['12345', '0xC0FFEE', '0xDEADF00D'],
27                                labeled_enum)
28
29    ###
30    mixed_enum = Enum(parent=None,
31                      values=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
32                      ids={
33                        'C': '0xC0FFEE',
34                        'E': '123',
35                        'G': '0xDEADF00D'
36                      })
37
38    expected_values = ['0', '1', '0xC0FFEE', '0xC0FFEF', '123', '124',
39                       '0xDEADF00D',
40                       '0xDEADF00E']
41
42    compare_values_against_list(expected_values, mixed_enum)
43
44  def test_enumerate_with_last(self):
45    empty_list = []
46
47    for (x, y) in enumerate_with_last(empty_list):
48      self.fail("Should not return anything for empty list")
49
50    single_value = [1]
51    for (x, last) in enumerate_with_last(single_value):
52      self.assertEquals(1, x)
53      self.assertEquals(True, last)
54
55    multiple_values = [4, 5, 6]
56    lst = list(enumerate_with_last(multiple_values))
57    self.assertListEqual([(4, False), (5, False), (6, True)], lst)
58
59if __name__ == '__main__':
60    unittest.main()
61