# 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, Flags, StringFlag, VersionFlag 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()