summaryrefslogtreecommitdiff
path: root/setuptools/tests/test_markerlib.py
diff options
context:
space:
mode:
authorDaniel Holth <dholth@fastmail.fm>2012-08-25 15:31:37 -0400
committerDaniel Holth <dholth@fastmail.fm>2012-08-25 15:31:37 -0400
commit71d6c4c5a29e30a8dac82ad5a79356a5a849e783 (patch)
tree8e5603a3d2603ec045fc50c8e900e5d887b153e3 /setuptools/tests/test_markerlib.py
parent776fdebc918822b57286ac7a2107f8766f43ce56 (diff)
downloadpython-setuptools-git-71d6c4c5a29e30a8dac82ad5a79356a5a849e783.tar.gz
move _markerlib test into setuptools/test
--HG-- branch : distribute extra : rebase_source : b2d7118f3a3cdf931ba1e56090a35442bc70fd2a
Diffstat (limited to 'setuptools/tests/test_markerlib.py')
-rw-r--r--setuptools/tests/test_markerlib.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/setuptools/tests/test_markerlib.py b/setuptools/tests/test_markerlib.py
new file mode 100644
index 00000000..4cce0430
--- /dev/null
+++ b/setuptools/tests/test_markerlib.py
@@ -0,0 +1,98 @@
+import os
+import unittest
+from setuptools.tests.py26compat import skipIf
+
+try:
+ import _ast
+except ImportError:
+ pass
+
+class TestMarkerlib(unittest.TestCase):
+
+ @skipIf('_ast' not in globals(),
+ "ast not available (Python < 2.5?)")
+ def test_markers(self):
+ from _markerlib import interpret, default_environment, compile
+
+ os_name = os.name
+
+ self.assert_(interpret(""))
+
+ self.assert_(interpret("os.name != 'buuuu'"))
+ self.assert_(interpret("python_version > '1.0'"))
+ self.assert_(interpret("python_version < '5.0'"))
+ self.assert_(interpret("python_version <= '5.0'"))
+ self.assert_(interpret("python_version >= '1.0'"))
+ self.assert_(interpret("'%s' in os.name" % os_name))
+ self.assert_(interpret("'buuuu' not in os.name"))
+
+ self.assertFalse(interpret("os.name == 'buuuu'"))
+ self.assertFalse(interpret("python_version < '1.0'"))
+ self.assertFalse(interpret("python_version > '5.0'"))
+ self.assertFalse(interpret("python_version >= '5.0'"))
+ self.assertFalse(interpret("python_version <= '1.0'"))
+ self.assertFalse(interpret("'%s' not in os.name" % os_name))
+ self.assertFalse(interpret("'buuuu' in os.name and python_version >= '5.0'"))
+
+ environment = default_environment()
+ environment['extra'] = 'test'
+ self.assert_(interpret("extra == 'test'", environment))
+ self.assertFalse(interpret("extra == 'doc'", environment))
+
+ def raises_nameError():
+ try:
+ interpret("python.version == '42'")
+ except NameError:
+ pass
+ else:
+ raise Exception("Expected NameError")
+
+ raises_nameError()
+
+ def raises_syntaxError():
+ try:
+ interpret("(x for x in (4,))")
+ except SyntaxError:
+ pass
+ else:
+ raise Exception("Expected SyntaxError")
+
+ raises_syntaxError()
+
+ statement = "python_version == '5'"
+ self.assertEqual(compile(statement).__doc__, statement)
+
+ @skipIf('_ast' not in globals(),
+ "ast not available (Python < 2.5?)")
+ def test_ast(self):
+ try:
+ import ast, nose
+ raise nose.SkipTest()
+ except ImportError:
+ pass
+
+ # Nonsensical code coverage tests.
+ import _markerlib._markers_ast as _markers_ast
+
+ class Node(_ast.AST):
+ _fields = ('bogus')
+ list(_markers_ast.iter_fields(Node()))
+
+ class Node2(_ast.AST):
+ def __init__(self):
+ self._fields = ('bogus',)
+ self.bogus = [Node()]
+
+ class NoneTransformer(_markers_ast.NodeTransformer):
+ def visit_Attribute(self, node):
+ return None
+
+ def visit_Str(self, node):
+ return None
+
+ def visit_Node(self, node):
+ return []
+
+ NoneTransformer().visit(_markers_ast.parse('a.b = "c"'))
+ NoneTransformer().visit(Node2())
+