mirror of https://github.com/python/cpython
76 lines
2.9 KiB
Python
76 lines
2.9 KiB
Python
"""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')
|