| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| import unittest |
| import mozunit |
| from mozpack.chrome.flags import ( |
| Flag, |
| StringFlag, |
| VersionFlag, |
| Flags, |
| ) |
| from mozpack.errors import ErrorMessage |
| |
| |
| class TestFlag(unittest.TestCase): |
| def test_flag(self): |
| flag = Flag('flag') |
| self.assertEqual(str(flag), '') |
| self.assertTrue(flag.matches(False)) |
| self.assertTrue(flag.matches('false')) |
| self.assertFalse(flag.matches('true')) |
| self.assertRaises(ErrorMessage, flag.add_definition, 'flag=') |
| self.assertRaises(ErrorMessage, flag.add_definition, 'flag=42') |
| self.assertRaises(ErrorMessage, flag.add_definition, 'flag!=false') |
| |
| flag.add_definition('flag=1') |
| self.assertEqual(str(flag), 'flag=1') |
| self.assertTrue(flag.matches(True)) |
| self.assertTrue(flag.matches('1')) |
| self.assertFalse(flag.matches('no')) |
| |
| flag.add_definition('flag=true') |
| self.assertEqual(str(flag), 'flag=true') |
| self.assertTrue(flag.matches(True)) |
| self.assertTrue(flag.matches('true')) |
| self.assertFalse(flag.matches('0')) |
| |
| flag.add_definition('flag=no') |
| self.assertEqual(str(flag), 'flag=no') |
| self.assertTrue(flag.matches('false')) |
| self.assertFalse(flag.matches('1')) |
| |
| flag.add_definition('flag') |
| self.assertEqual(str(flag), 'flag') |
| self.assertFalse(flag.matches('false')) |
| self.assertTrue(flag.matches('true')) |
| self.assertFalse(flag.matches(False)) |
| |
| def test_string_flag(self): |
| flag = StringFlag('flag') |
| self.assertEqual(str(flag), '') |
| self.assertTrue(flag.matches('foo')) |
| self.assertRaises(ErrorMessage, flag.add_definition, 'flag>=2') |
| |
| flag.add_definition('flag=foo') |
| self.assertEqual(str(flag), 'flag=foo') |
| self.assertTrue(flag.matches('foo')) |
| self.assertFalse(flag.matches('bar')) |
| |
| flag.add_definition('flag=bar') |
| self.assertEqual(str(flag), 'flag=foo flag=bar') |
| self.assertTrue(flag.matches('foo')) |
| self.assertTrue(flag.matches('bar')) |
| self.assertFalse(flag.matches('baz')) |
| |
| flag = StringFlag('flag') |
| flag.add_definition('flag!=bar') |
| self.assertEqual(str(flag), 'flag!=bar') |
| self.assertTrue(flag.matches('foo')) |
| self.assertFalse(flag.matches('bar')) |
| |
| def test_version_flag(self): |
| flag = VersionFlag('flag') |
| self.assertEqual(str(flag), '') |
| self.assertTrue(flag.matches('1.0')) |
| self.assertRaises(ErrorMessage, flag.add_definition, 'flag!=2') |
| |
| flag.add_definition('flag=1.0') |
| self.assertEqual(str(flag), 'flag=1.0') |
| self.assertTrue(flag.matches('1.0')) |
| self.assertFalse(flag.matches('2.0')) |
| |
| flag.add_definition('flag=2.0') |
| self.assertEqual(str(flag), 'flag=1.0 flag=2.0') |
| self.assertTrue(flag.matches('1.0')) |
| self.assertTrue(flag.matches('2.0')) |
| self.assertFalse(flag.matches('3.0')) |
| |
| flag = VersionFlag('flag') |
| flag.add_definition('flag>=2.0') |
| self.assertEqual(str(flag), 'flag>=2.0') |
| self.assertFalse(flag.matches('1.0')) |
| self.assertTrue(flag.matches('2.0')) |
| self.assertTrue(flag.matches('3.0')) |
| |
| flag.add_definition('flag<1.10') |
| self.assertEqual(str(flag), 'flag>=2.0 flag<1.10') |
| self.assertTrue(flag.matches('1.0')) |
| self.assertTrue(flag.matches('1.9')) |
| self.assertFalse(flag.matches('1.10')) |
| self.assertFalse(flag.matches('1.20')) |
| self.assertTrue(flag.matches('2.0')) |
| self.assertTrue(flag.matches('3.0')) |
| self.assertRaises(Exception, flag.add_definition, 'flag<') |
| self.assertRaises(Exception, flag.add_definition, 'flag>') |
| self.assertRaises(Exception, flag.add_definition, 'flag>=') |
| self.assertRaises(Exception, flag.add_definition, 'flag<=') |
| self.assertRaises(Exception, flag.add_definition, 'flag!=1.0') |
| |
| |
| class TestFlags(unittest.TestCase): |
| def setUp(self): |
| self.flags = Flags('contentaccessible=yes', |
| 'appversion>=3.5', |
| 'application=foo', |
| 'application=bar', |
| 'appversion<2.0', |
| 'platform', |
| 'abi!=Linux_x86-gcc3') |
| |
| def test_flags_str(self): |
| self.assertEqual(str(self.flags), 'contentaccessible=yes ' + |
| 'appversion>=3.5 appversion<2.0 application=foo ' + |
| 'application=bar platform abi!=Linux_x86-gcc3') |
| |
| def test_flags_match_unset(self): |
| self.assertTrue(self.flags.match(os='WINNT')) |
| |
| def test_flags_match(self): |
| self.assertTrue(self.flags.match(application='foo')) |
| self.assertFalse(self.flags.match(application='qux')) |
| |
| def test_flags_match_different(self): |
| self.assertTrue(self.flags.match(abi='WINNT_x86-MSVC')) |
| self.assertFalse(self.flags.match(abi='Linux_x86-gcc3')) |
| |
| def test_flags_match_version(self): |
| self.assertTrue(self.flags.match(appversion='1.0')) |
| self.assertTrue(self.flags.match(appversion='1.5')) |
| self.assertFalse(self.flags.match(appversion='2.0')) |
| self.assertFalse(self.flags.match(appversion='3.0')) |
| self.assertTrue(self.flags.match(appversion='3.5')) |
| self.assertTrue(self.flags.match(appversion='3.10')) |
| |
| |
| if __name__ == '__main__': |
| mozunit.main() |