gecko/python/mozbuild/mozpack/test/test_chrome_flags.py

149 lines
5.5 KiB
Python

# 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()