-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathtest_node.py
More file actions
115 lines (86 loc) · 3.15 KB
/
test_node.py
File metadata and controls
115 lines (86 loc) · 3.15 KB
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
from node.behaviors import DefaultInit
from node.behaviors import MappingNode
from node.behaviors import Node
from node.behaviors import NodeInit
from node.interfaces import IDefaultInit
from node.interfaces import INode
from node.interfaces import INodeInit
from node.tests import NodeTestCase
from plumber import plumbing
from zope.interface import Interface
###############################################################################
# Mock objects
###############################################################################
@plumbing(DefaultInit)
class DefaultInitObject(object):
pass
@plumbing(NodeInit)
class NodeInitObject(object):
def __init__(self, foo, bar=None):
self.foo = foo
self.bar = bar
@plumbing(DefaultInit, Node)
class NodeObject(object):
pass
@plumbing(DefaultInit, Node, MappingNode)
class BrokenMapping(object):
def __iter__(self):
yield 'child'
class NoInterface(Interface):
pass
###############################################################################
# Tests
###############################################################################
class TestNode(NodeTestCase):
def test_DefaultInit(self):
obj = DefaultInitObject(name='name', parent='parent')
self.assertTrue(IDefaultInit.providedBy(obj))
self.assertEqual(obj.__name__, 'name')
self.assertEqual(obj.__parent__, 'parent')
def test_NodeInit(self):
obj = NodeInitObject('foo', name='name', parent='parent', bar='bar')
self.assertTrue(INodeInit.providedBy(obj))
self.assertEqual(obj.__name__, 'name')
self.assertEqual(obj.__parent__, 'parent')
self.assertEqual(obj.foo, 'foo')
self.assertEqual(obj.bar, 'bar')
def test_Node(self):
parent = NodeObject(name='parent')
node = NodeObject(name='node', parent=parent)
# interface
self.assertTrue(INode.providedBy(node))
# __name__
self.assertEqual(node.__name__, 'node')
self.assertEqual(node.name, 'node')
with self.assertRaises(AttributeError):
node.name = ''
# __parent__
self.assertEqual(node.__parent__, parent)
self.assertEqual(node.parent, parent)
with self.assertRaises(AttributeError):
node.parent = None
# path
self.assertEqual(node.path, ['parent', 'node'])
# root
self.assertEqual(node.root, parent)
# acquire
self.assertEqual(node.acquire(NoInterface), None)
self.assertEqual(node.acquire(INode), parent)
self.assertEqual(node.acquire(NodeObject), parent)
# __nonzero__, __bool__
self.assertTrue(bool(node))
# __repr__, __str__
self.checkOutput("""
<NodeObject object 'node' at ...>
""", str(node))
# noderepr
self.assertEqual(
node.noderepr,
"<class 'node.tests.test_node.NodeObject'>: node"
)
# treerepr
broken = BrokenMapping(name='broken')
self.checkOutput("""
<class 'node.tests.test_node.BrokenMapping'>: broken
__child: 'NotImplementedError()'
""", broken.treerepr(prefix='_'))