Fri, 16 Jan 2015 18:13:44 +0100
Integrate suggestion from review to improve consistency with existing code.
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/.
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
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')
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'))
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'))
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'))
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))
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')
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'))
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'))
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'))
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')
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'))
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'))
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'))
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')
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')
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')
127 def test_flags_match_unset(self):
128 self.assertTrue(self.flags.match(os='WINNT'))
130 def test_flags_match(self):
131 self.assertTrue(self.flags.match(application='foo'))
132 self.assertFalse(self.flags.match(application='qux'))
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'))
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'))
147 if __name__ == '__main__':
148 mozunit.main()