1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/python/mozbuild/mozpack/test/test_chrome_flags.py Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,148 @@ 1.4 +# This Source Code Form is subject to the terms of the Mozilla Public 1.5 +# License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 +# file, You can obtain one at http://mozilla.org/MPL/2.0/. 1.7 + 1.8 +import unittest 1.9 +import mozunit 1.10 +from mozpack.chrome.flags import ( 1.11 + Flag, 1.12 + StringFlag, 1.13 + VersionFlag, 1.14 + Flags, 1.15 +) 1.16 +from mozpack.errors import ErrorMessage 1.17 + 1.18 + 1.19 +class TestFlag(unittest.TestCase): 1.20 + def test_flag(self): 1.21 + flag = Flag('flag') 1.22 + self.assertEqual(str(flag), '') 1.23 + self.assertTrue(flag.matches(False)) 1.24 + self.assertTrue(flag.matches('false')) 1.25 + self.assertFalse(flag.matches('true')) 1.26 + self.assertRaises(ErrorMessage, flag.add_definition, 'flag=') 1.27 + self.assertRaises(ErrorMessage, flag.add_definition, 'flag=42') 1.28 + self.assertRaises(ErrorMessage, flag.add_definition, 'flag!=false') 1.29 + 1.30 + flag.add_definition('flag=1') 1.31 + self.assertEqual(str(flag), 'flag=1') 1.32 + self.assertTrue(flag.matches(True)) 1.33 + self.assertTrue(flag.matches('1')) 1.34 + self.assertFalse(flag.matches('no')) 1.35 + 1.36 + flag.add_definition('flag=true') 1.37 + self.assertEqual(str(flag), 'flag=true') 1.38 + self.assertTrue(flag.matches(True)) 1.39 + self.assertTrue(flag.matches('true')) 1.40 + self.assertFalse(flag.matches('0')) 1.41 + 1.42 + flag.add_definition('flag=no') 1.43 + self.assertEqual(str(flag), 'flag=no') 1.44 + self.assertTrue(flag.matches('false')) 1.45 + self.assertFalse(flag.matches('1')) 1.46 + 1.47 + flag.add_definition('flag') 1.48 + self.assertEqual(str(flag), 'flag') 1.49 + self.assertFalse(flag.matches('false')) 1.50 + self.assertTrue(flag.matches('true')) 1.51 + self.assertFalse(flag.matches(False)) 1.52 + 1.53 + def test_string_flag(self): 1.54 + flag = StringFlag('flag') 1.55 + self.assertEqual(str(flag), '') 1.56 + self.assertTrue(flag.matches('foo')) 1.57 + self.assertRaises(ErrorMessage, flag.add_definition, 'flag>=2') 1.58 + 1.59 + flag.add_definition('flag=foo') 1.60 + self.assertEqual(str(flag), 'flag=foo') 1.61 + self.assertTrue(flag.matches('foo')) 1.62 + self.assertFalse(flag.matches('bar')) 1.63 + 1.64 + flag.add_definition('flag=bar') 1.65 + self.assertEqual(str(flag), 'flag=foo flag=bar') 1.66 + self.assertTrue(flag.matches('foo')) 1.67 + self.assertTrue(flag.matches('bar')) 1.68 + self.assertFalse(flag.matches('baz')) 1.69 + 1.70 + flag = StringFlag('flag') 1.71 + flag.add_definition('flag!=bar') 1.72 + self.assertEqual(str(flag), 'flag!=bar') 1.73 + self.assertTrue(flag.matches('foo')) 1.74 + self.assertFalse(flag.matches('bar')) 1.75 + 1.76 + def test_version_flag(self): 1.77 + flag = VersionFlag('flag') 1.78 + self.assertEqual(str(flag), '') 1.79 + self.assertTrue(flag.matches('1.0')) 1.80 + self.assertRaises(ErrorMessage, flag.add_definition, 'flag!=2') 1.81 + 1.82 + flag.add_definition('flag=1.0') 1.83 + self.assertEqual(str(flag), 'flag=1.0') 1.84 + self.assertTrue(flag.matches('1.0')) 1.85 + self.assertFalse(flag.matches('2.0')) 1.86 + 1.87 + flag.add_definition('flag=2.0') 1.88 + self.assertEqual(str(flag), 'flag=1.0 flag=2.0') 1.89 + self.assertTrue(flag.matches('1.0')) 1.90 + self.assertTrue(flag.matches('2.0')) 1.91 + self.assertFalse(flag.matches('3.0')) 1.92 + 1.93 + flag = VersionFlag('flag') 1.94 + flag.add_definition('flag>=2.0') 1.95 + self.assertEqual(str(flag), 'flag>=2.0') 1.96 + self.assertFalse(flag.matches('1.0')) 1.97 + self.assertTrue(flag.matches('2.0')) 1.98 + self.assertTrue(flag.matches('3.0')) 1.99 + 1.100 + flag.add_definition('flag<1.10') 1.101 + self.assertEqual(str(flag), 'flag>=2.0 flag<1.10') 1.102 + self.assertTrue(flag.matches('1.0')) 1.103 + self.assertTrue(flag.matches('1.9')) 1.104 + self.assertFalse(flag.matches('1.10')) 1.105 + self.assertFalse(flag.matches('1.20')) 1.106 + self.assertTrue(flag.matches('2.0')) 1.107 + self.assertTrue(flag.matches('3.0')) 1.108 + self.assertRaises(Exception, flag.add_definition, 'flag<') 1.109 + self.assertRaises(Exception, flag.add_definition, 'flag>') 1.110 + self.assertRaises(Exception, flag.add_definition, 'flag>=') 1.111 + self.assertRaises(Exception, flag.add_definition, 'flag<=') 1.112 + self.assertRaises(Exception, flag.add_definition, 'flag!=1.0') 1.113 + 1.114 + 1.115 +class TestFlags(unittest.TestCase): 1.116 + def setUp(self): 1.117 + self.flags = Flags('contentaccessible=yes', 1.118 + 'appversion>=3.5', 1.119 + 'application=foo', 1.120 + 'application=bar', 1.121 + 'appversion<2.0', 1.122 + 'platform', 1.123 + 'abi!=Linux_x86-gcc3') 1.124 + 1.125 + def test_flags_str(self): 1.126 + self.assertEqual(str(self.flags), 'contentaccessible=yes ' + 1.127 + 'appversion>=3.5 appversion<2.0 application=foo ' + 1.128 + 'application=bar platform abi!=Linux_x86-gcc3') 1.129 + 1.130 + def test_flags_match_unset(self): 1.131 + self.assertTrue(self.flags.match(os='WINNT')) 1.132 + 1.133 + def test_flags_match(self): 1.134 + self.assertTrue(self.flags.match(application='foo')) 1.135 + self.assertFalse(self.flags.match(application='qux')) 1.136 + 1.137 + def test_flags_match_different(self): 1.138 + self.assertTrue(self.flags.match(abi='WINNT_x86-MSVC')) 1.139 + self.assertFalse(self.flags.match(abi='Linux_x86-gcc3')) 1.140 + 1.141 + def test_flags_match_version(self): 1.142 + self.assertTrue(self.flags.match(appversion='1.0')) 1.143 + self.assertTrue(self.flags.match(appversion='1.5')) 1.144 + self.assertFalse(self.flags.match(appversion='2.0')) 1.145 + self.assertFalse(self.flags.match(appversion='3.0')) 1.146 + self.assertTrue(self.flags.match(appversion='3.5')) 1.147 + self.assertTrue(self.flags.match(appversion='3.10')) 1.148 + 1.149 + 1.150 +if __name__ == '__main__': 1.151 + mozunit.main()