1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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())
|