You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

75 lines
2.9 KiB

"""Tests for packaging.markers."""
import os
import sys
import platform
from packaging.markers import interpret
from packaging.tests import unittest
from packaging.tests.support import LoggingCatcher
class MarkersTestCase(LoggingCatcher,
unittest.TestCase):
def test_interpret(self):
sys_platform = sys.platform
version = sys.version.split()[0]
os_name = os.name
platform_version = platform.version()
platform_machine = platform.machine()
platform_python_implementation = platform.python_implementation()
self.assertTrue(interpret("sys.platform == '%s'" % sys_platform))
self.assertTrue(interpret(
"sys.platform == '%s' and python_full_version == '%s'" %
(sys_platform, version)))
self.assertTrue(interpret("'%s' == sys.platform" % sys_platform))
self.assertTrue(interpret('os.name == "%s"' % os_name))
self.assertTrue(interpret(
'platform.version == "%s" and platform.machine == "%s"' %
(platform_version, platform_machine)))
self.assertTrue(interpret('platform.python_implementation == "%s"' %
platform_python_implementation))
# stuff that need to raise a syntax error
ops = ('os.name == os.name', 'os.name == 2', "'2' == '2'",
'okpjonon', '', 'os.name ==', 'python_version == 2.4')
for op in ops:
self.assertRaises(SyntaxError, interpret, op)
# combined operations
OP = 'os.name == "%s"' % os_name
FALSEOP = 'os.name == "buuuu"'
AND = ' and '
OR = ' or '
self.assertTrue(interpret(OP + AND + OP))
self.assertTrue(interpret(OP + AND + OP + AND + OP))
self.assertTrue(interpret(OP + OR + OP))
self.assertTrue(interpret(OP + OR + FALSEOP))
self.assertTrue(interpret(OP + OR + OP + OR + FALSEOP))
self.assertTrue(interpret(OP + OR + FALSEOP + OR + FALSEOP))
self.assertTrue(interpret(FALSEOP + OR + OP))
self.assertFalse(interpret(FALSEOP + AND + FALSEOP))
self.assertFalse(interpret(FALSEOP + OR + FALSEOP))
# other operators
self.assertTrue(interpret("os.name != 'buuuu'"))
self.assertTrue(interpret("python_version > '1.0'"))
self.assertTrue(interpret("python_version < '5.0'"))
self.assertTrue(interpret("python_version <= '5.0'"))
self.assertTrue(interpret("python_version >= '1.0'"))
self.assertTrue(interpret("'%s' in os.name" % os_name))
self.assertTrue(interpret("'buuuu' not in os.name"))
self.assertTrue(interpret(
"'buuuu' not in os.name and '%s' in os.name" % os_name))
# execution context
self.assertTrue(interpret('python_version == "0.1"',
{'python_version': '0.1'}))
def test_suite():
return unittest.makeSuite(MarkersTestCase)
if __name__ == '__main__':
unittest.main(defaultTest='test_suite')