python/mozbuild/mozpack/test/test_chrome_flags.py

changeset 0
6474c204b198
     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()

mercurial