150 lines
5.5 KiB
Python
150 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, 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()
|