metadata_helpers_test.py revision 0b080452cca90f215d10d636abfb47701d7518da
1import unittest
2import itertools
3from unittest import TestCase
4from metadata_model import *
5from metadata_helpers import *
6
7class TestHelpers(TestCase):
8
9  def test_enum_calculate_value_string(self):
10    def compare_values_against_list(expected_list, enum):
11      for (idx, val) in enumerate(expected_list):
12        self.assertEquals(val,
13                          enum_calculate_value_string(list(enum.values)[idx]))
14
15    plain_enum = Enum(parent=None, values=['ON', 'OFF'])
16
17    compare_values_against_list(['0', '1'],
18                                plain_enum)
19
20    ###
21    labeled_enum = Enum(parent=None, values=['A', 'B', 'C'], ids={
22      'A': '12345',
23      'B': '0xC0FFEE',
24      'C': '0xDEADF00D'
25    })
26
27    compare_values_against_list(['12345', '0xC0FFEE', '0xDEADF00D'],
28                                labeled_enum)
29
30    ###
31    mixed_enum = Enum(parent=None,
32                      values=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
33                      ids={
34                        'C': '0xC0FFEE',
35                        'E': '123',
36                        'G': '0xDEADF00D'
37                      })
38
39    expected_values = ['0', '1', '0xC0FFEE', '0xC0FFEF', '123', '124',
40                       '0xDEADF00D',
41                       '0xDEADF00E']
42
43    compare_values_against_list(expected_values, mixed_enum)
44
45  def test_enumerate_with_last(self):
46    empty_list = []
47
48    for (x, y) in enumerate_with_last(empty_list):
49      self.fail("Should not return anything for empty list")
50
51    single_value = [1]
52    for (x, last) in enumerate_with_last(single_value):
53      self.assertEquals(1, x)
54      self.assertEquals(True, last)
55
56    multiple_values = [4, 5, 6]
57    lst = list(enumerate_with_last(multiple_values))
58    self.assertListEqual([(4, False), (5, False), (6, True)], lst)
59
60  def test_wbr(self):
61    wbr_string = "<wbr/>"
62    wbr_gen = itertools.repeat(wbr_string)
63
64    # No special characters, do nothing
65    self.assertEquals("no-op", wbr("no-op"))
66    # Insert WBR after characters in [ '.', '/', '_' ]
67    self.assertEquals("word.{0}".format(wbr_string), wbr("word."))
68    self.assertEquals("word/{0}".format(wbr_string), wbr("word/"))
69    self.assertEquals("word_{0}".format(wbr_string), wbr("word_"))
70
71    self.assertEquals("word.{0}break".format(wbr_string), wbr("word.break"))
72    self.assertEquals("word/{0}break".format(wbr_string), wbr("word/break"))
73    self.assertEquals("word_{0}break".format(wbr_string), wbr("word_break"))
74
75    # Test words with more components
76    self.assertEquals("word_{0}break_{0}again".format(wbr_string),
77                      wbr("word_break_again"))
78    self.assertEquals("word_{0}break_{0}again_{0}emphasis".format(wbr_string),
79                      wbr("word_break_again_emphasis"))
80
81    # Words with 2 or less subcomponents are ignored for the capital letters
82    self.assertEquals("word_{0}breakIgnored".format(wbr_string),
83                      wbr("word_breakIgnored"))
84    self.assertEquals("wordIgnored".format(wbr_string),
85                      wbr("wordIgnored"))
86
87    # Words with at least 3 sub components get word breaks before caps
88    self.assertEquals("word_{0}break_{0}again{0}Capitalized".format(wbr_string),
89                      wbr("word_break_againCapitalized"))
90    self.assertEquals("word.{0}break.{0}again{0}Capitalized".format(wbr_string),
91                      wbr("word.break.againCapitalized"))
92    self.assertEquals("a.{0}b{0}C.{0}d{0}E.{0}f{0}G".format(wbr_string),
93                      wbr("a.bC.dE.fG"))
94
95    # Don't be overly aggressive with all caps
96    self.assertEquals("TRANSFORM_{0}MATRIX".format(wbr_string),
97                      wbr("TRANSFORM_MATRIX"))
98
99    self.assertEquals("SCENE_{0}MODE_{0}FACE_{0}PRIORITY".format(wbr_string),
100                      wbr("SCENE_MODE_FACE_PRIORITY"))
101
102    self.assertEquals("android.{0}color{0}Correction.{0}mode is TRANSFORM_{0}MATRIX.{0}".format(wbr_string),
103                      wbr("android.colorCorrection.mode is TRANSFORM_MATRIX."))
104
105    self.assertEquals("The overrides listed for SCENE_{0}MODE_{0}FACE_{0}PRIORITY are ignored".format(wbr_string),
106                      wbr("The overrides listed for SCENE_MODE_FACE_PRIORITY are ignored"));
107
108if __name__ == '__main__':
109    unittest.main()
110