|
1 # This Source Code Form is subject to the terms of the Mozilla Public |
|
2 # License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
|
4 |
|
5 import unittest |
|
6 import mozunit |
|
7 from mozpack.chrome.flags import ( |
|
8 Flag, |
|
9 StringFlag, |
|
10 VersionFlag, |
|
11 Flags, |
|
12 ) |
|
13 from mozpack.errors import ErrorMessage |
|
14 |
|
15 |
|
16 class TestFlag(unittest.TestCase): |
|
17 def test_flag(self): |
|
18 flag = Flag('flag') |
|
19 self.assertEqual(str(flag), '') |
|
20 self.assertTrue(flag.matches(False)) |
|
21 self.assertTrue(flag.matches('false')) |
|
22 self.assertFalse(flag.matches('true')) |
|
23 self.assertRaises(ErrorMessage, flag.add_definition, 'flag=') |
|
24 self.assertRaises(ErrorMessage, flag.add_definition, 'flag=42') |
|
25 self.assertRaises(ErrorMessage, flag.add_definition, 'flag!=false') |
|
26 |
|
27 flag.add_definition('flag=1') |
|
28 self.assertEqual(str(flag), 'flag=1') |
|
29 self.assertTrue(flag.matches(True)) |
|
30 self.assertTrue(flag.matches('1')) |
|
31 self.assertFalse(flag.matches('no')) |
|
32 |
|
33 flag.add_definition('flag=true') |
|
34 self.assertEqual(str(flag), 'flag=true') |
|
35 self.assertTrue(flag.matches(True)) |
|
36 self.assertTrue(flag.matches('true')) |
|
37 self.assertFalse(flag.matches('0')) |
|
38 |
|
39 flag.add_definition('flag=no') |
|
40 self.assertEqual(str(flag), 'flag=no') |
|
41 self.assertTrue(flag.matches('false')) |
|
42 self.assertFalse(flag.matches('1')) |
|
43 |
|
44 flag.add_definition('flag') |
|
45 self.assertEqual(str(flag), 'flag') |
|
46 self.assertFalse(flag.matches('false')) |
|
47 self.assertTrue(flag.matches('true')) |
|
48 self.assertFalse(flag.matches(False)) |
|
49 |
|
50 def test_string_flag(self): |
|
51 flag = StringFlag('flag') |
|
52 self.assertEqual(str(flag), '') |
|
53 self.assertTrue(flag.matches('foo')) |
|
54 self.assertRaises(ErrorMessage, flag.add_definition, 'flag>=2') |
|
55 |
|
56 flag.add_definition('flag=foo') |
|
57 self.assertEqual(str(flag), 'flag=foo') |
|
58 self.assertTrue(flag.matches('foo')) |
|
59 self.assertFalse(flag.matches('bar')) |
|
60 |
|
61 flag.add_definition('flag=bar') |
|
62 self.assertEqual(str(flag), 'flag=foo flag=bar') |
|
63 self.assertTrue(flag.matches('foo')) |
|
64 self.assertTrue(flag.matches('bar')) |
|
65 self.assertFalse(flag.matches('baz')) |
|
66 |
|
67 flag = StringFlag('flag') |
|
68 flag.add_definition('flag!=bar') |
|
69 self.assertEqual(str(flag), 'flag!=bar') |
|
70 self.assertTrue(flag.matches('foo')) |
|
71 self.assertFalse(flag.matches('bar')) |
|
72 |
|
73 def test_version_flag(self): |
|
74 flag = VersionFlag('flag') |
|
75 self.assertEqual(str(flag), '') |
|
76 self.assertTrue(flag.matches('1.0')) |
|
77 self.assertRaises(ErrorMessage, flag.add_definition, 'flag!=2') |
|
78 |
|
79 flag.add_definition('flag=1.0') |
|
80 self.assertEqual(str(flag), 'flag=1.0') |
|
81 self.assertTrue(flag.matches('1.0')) |
|
82 self.assertFalse(flag.matches('2.0')) |
|
83 |
|
84 flag.add_definition('flag=2.0') |
|
85 self.assertEqual(str(flag), 'flag=1.0 flag=2.0') |
|
86 self.assertTrue(flag.matches('1.0')) |
|
87 self.assertTrue(flag.matches('2.0')) |
|
88 self.assertFalse(flag.matches('3.0')) |
|
89 |
|
90 flag = VersionFlag('flag') |
|
91 flag.add_definition('flag>=2.0') |
|
92 self.assertEqual(str(flag), 'flag>=2.0') |
|
93 self.assertFalse(flag.matches('1.0')) |
|
94 self.assertTrue(flag.matches('2.0')) |
|
95 self.assertTrue(flag.matches('3.0')) |
|
96 |
|
97 flag.add_definition('flag<1.10') |
|
98 self.assertEqual(str(flag), 'flag>=2.0 flag<1.10') |
|
99 self.assertTrue(flag.matches('1.0')) |
|
100 self.assertTrue(flag.matches('1.9')) |
|
101 self.assertFalse(flag.matches('1.10')) |
|
102 self.assertFalse(flag.matches('1.20')) |
|
103 self.assertTrue(flag.matches('2.0')) |
|
104 self.assertTrue(flag.matches('3.0')) |
|
105 self.assertRaises(Exception, flag.add_definition, 'flag<') |
|
106 self.assertRaises(Exception, flag.add_definition, 'flag>') |
|
107 self.assertRaises(Exception, flag.add_definition, 'flag>=') |
|
108 self.assertRaises(Exception, flag.add_definition, 'flag<=') |
|
109 self.assertRaises(Exception, flag.add_definition, 'flag!=1.0') |
|
110 |
|
111 |
|
112 class TestFlags(unittest.TestCase): |
|
113 def setUp(self): |
|
114 self.flags = Flags('contentaccessible=yes', |
|
115 'appversion>=3.5', |
|
116 'application=foo', |
|
117 'application=bar', |
|
118 'appversion<2.0', |
|
119 'platform', |
|
120 'abi!=Linux_x86-gcc3') |
|
121 |
|
122 def test_flags_str(self): |
|
123 self.assertEqual(str(self.flags), 'contentaccessible=yes ' + |
|
124 'appversion>=3.5 appversion<2.0 application=foo ' + |
|
125 'application=bar platform abi!=Linux_x86-gcc3') |
|
126 |
|
127 def test_flags_match_unset(self): |
|
128 self.assertTrue(self.flags.match(os='WINNT')) |
|
129 |
|
130 def test_flags_match(self): |
|
131 self.assertTrue(self.flags.match(application='foo')) |
|
132 self.assertFalse(self.flags.match(application='qux')) |
|
133 |
|
134 def test_flags_match_different(self): |
|
135 self.assertTrue(self.flags.match(abi='WINNT_x86-MSVC')) |
|
136 self.assertFalse(self.flags.match(abi='Linux_x86-gcc3')) |
|
137 |
|
138 def test_flags_match_version(self): |
|
139 self.assertTrue(self.flags.match(appversion='1.0')) |
|
140 self.assertTrue(self.flags.match(appversion='1.5')) |
|
141 self.assertFalse(self.flags.match(appversion='2.0')) |
|
142 self.assertFalse(self.flags.match(appversion='3.0')) |
|
143 self.assertTrue(self.flags.match(appversion='3.5')) |
|
144 self.assertTrue(self.flags.match(appversion='3.10')) |
|
145 |
|
146 |
|
147 if __name__ == '__main__': |
|
148 mozunit.main() |