test_chrome_flags.py (5591B)
1 # This Source Code Form is subject to the terms of the Mozilla Public 2 # License, v. 2.0. If a copy of the MPL was not distributed with this 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5 import unittest 6 7 import mozunit 8 9 from mozpack.chrome.flags import Flag, Flags, StringFlag, VersionFlag 10 from mozpack.errors import ErrorMessage 11 12 13 class TestFlag(unittest.TestCase): 14 def test_flag(self): 15 flag = Flag("flag") 16 self.assertEqual(str(flag), "") 17 self.assertTrue(flag.matches(False)) 18 self.assertTrue(flag.matches("false")) 19 self.assertFalse(flag.matches("true")) 20 self.assertRaises(ErrorMessage, flag.add_definition, "flag=") 21 self.assertRaises(ErrorMessage, flag.add_definition, "flag=42") 22 self.assertRaises(ErrorMessage, flag.add_definition, "flag!=false") 23 24 flag.add_definition("flag=1") 25 self.assertEqual(str(flag), "flag=1") 26 self.assertTrue(flag.matches(True)) 27 self.assertTrue(flag.matches("1")) 28 self.assertFalse(flag.matches("no")) 29 30 flag.add_definition("flag=true") 31 self.assertEqual(str(flag), "flag=true") 32 self.assertTrue(flag.matches(True)) 33 self.assertTrue(flag.matches("true")) 34 self.assertFalse(flag.matches("0")) 35 36 flag.add_definition("flag=no") 37 self.assertEqual(str(flag), "flag=no") 38 self.assertTrue(flag.matches("false")) 39 self.assertFalse(flag.matches("1")) 40 41 flag.add_definition("flag") 42 self.assertEqual(str(flag), "flag") 43 self.assertFalse(flag.matches("false")) 44 self.assertTrue(flag.matches("true")) 45 self.assertFalse(flag.matches(False)) 46 47 def test_string_flag(self): 48 flag = StringFlag("flag") 49 self.assertEqual(str(flag), "") 50 self.assertTrue(flag.matches("foo")) 51 self.assertRaises(ErrorMessage, flag.add_definition, "flag>=2") 52 53 flag.add_definition("flag=foo") 54 self.assertEqual(str(flag), "flag=foo") 55 self.assertTrue(flag.matches("foo")) 56 self.assertFalse(flag.matches("bar")) 57 58 flag.add_definition("flag=bar") 59 self.assertEqual(str(flag), "flag=foo flag=bar") 60 self.assertTrue(flag.matches("foo")) 61 self.assertTrue(flag.matches("bar")) 62 self.assertFalse(flag.matches("baz")) 63 64 flag = StringFlag("flag") 65 flag.add_definition("flag!=bar") 66 self.assertEqual(str(flag), "flag!=bar") 67 self.assertTrue(flag.matches("foo")) 68 self.assertFalse(flag.matches("bar")) 69 70 def test_version_flag(self): 71 flag = VersionFlag("flag") 72 self.assertEqual(str(flag), "") 73 self.assertTrue(flag.matches("1.0")) 74 self.assertRaises(ErrorMessage, flag.add_definition, "flag!=2") 75 76 flag.add_definition("flag=1.0") 77 self.assertEqual(str(flag), "flag=1.0") 78 self.assertTrue(flag.matches("1.0")) 79 self.assertFalse(flag.matches("2.0")) 80 81 flag.add_definition("flag=2.0") 82 self.assertEqual(str(flag), "flag=1.0 flag=2.0") 83 self.assertTrue(flag.matches("1.0")) 84 self.assertTrue(flag.matches("2.0")) 85 self.assertFalse(flag.matches("3.0")) 86 87 flag = VersionFlag("flag") 88 flag.add_definition("flag>=2.0") 89 self.assertEqual(str(flag), "flag>=2.0") 90 self.assertFalse(flag.matches("1.0")) 91 self.assertTrue(flag.matches("2.0")) 92 self.assertTrue(flag.matches("3.0")) 93 94 flag.add_definition("flag<1.10") 95 self.assertEqual(str(flag), "flag>=2.0 flag<1.10") 96 self.assertTrue(flag.matches("1.0")) 97 self.assertTrue(flag.matches("1.9")) 98 self.assertFalse(flag.matches("1.10")) 99 self.assertFalse(flag.matches("1.20")) 100 self.assertTrue(flag.matches("2.0")) 101 self.assertTrue(flag.matches("3.0")) 102 self.assertRaises(Exception, flag.add_definition, "flag<") 103 self.assertRaises(Exception, flag.add_definition, "flag>") 104 self.assertRaises(Exception, flag.add_definition, "flag>=") 105 self.assertRaises(Exception, flag.add_definition, "flag<=") 106 self.assertRaises(Exception, flag.add_definition, "flag!=1.0") 107 108 109 class TestFlags(unittest.TestCase): 110 def setUp(self): 111 self.flags = Flags( 112 "contentaccessible=yes", 113 "appversion>=3.5", 114 "application=foo", 115 "application=bar", 116 "appversion<2.0", 117 "platform", 118 "abi!=Linux_x86-gcc3", 119 ) 120 121 def test_flags_str(self): 122 self.assertEqual( 123 str(self.flags), 124 "contentaccessible=yes " 125 + "appversion>=3.5 appversion<2.0 application=foo " 126 + "application=bar platform abi!=Linux_x86-gcc3", 127 ) 128 129 def test_flags_match_unset(self): 130 self.assertTrue(self.flags.match(os="WINNT")) 131 132 def test_flags_match(self): 133 self.assertTrue(self.flags.match(application="foo")) 134 self.assertFalse(self.flags.match(application="qux")) 135 136 def test_flags_match_different(self): 137 self.assertTrue(self.flags.match(abi="WINNT_x86-MSVC")) 138 self.assertFalse(self.flags.match(abi="Linux_x86-gcc3")) 139 140 def test_flags_match_version(self): 141 self.assertTrue(self.flags.match(appversion="1.0")) 142 self.assertTrue(self.flags.match(appversion="1.5")) 143 self.assertFalse(self.flags.match(appversion="2.0")) 144 self.assertFalse(self.flags.match(appversion="3.0")) 145 self.assertTrue(self.flags.match(appversion="3.5")) 146 self.assertTrue(self.flags.match(appversion="3.10")) 147 148 149 if __name__ == "__main__": 150 mozunit.main()