source: trunk/tests/test_low_level_node.py @ 14

Revision 14, 5.2 KB checked in by xi, 9 years ago (diff)

Add _syck.Seq and _syck.Map.

Line 
1
2import unittest
3
4import _syck
5
6import gc
7
8class TestNodes(unittest.TestCase):
9
10    def testBaseNode(self):
11        self.assertRaises(TypeError, lambda: _syck.Node())
12
13    def testScalar(self):
14        self.assert_(issubclass(_syck.Scalar, _syck.Node))
15        scalar = _syck.Scalar()
16        self.assertEqual(scalar.kind, 'scalar')
17        self.assertEqual(scalar.value, '')
18        self.assertEqual(scalar.anchor, None)
19        self.assertEqual(scalar.tag, None)
20        self.assertEqual(scalar.style, None)
21        self.assertEqual(scalar.indent, 0)
22        self.assertEqual(scalar.width, 0)
23        self.assertEqual(scalar.chomp, None)
24        scalar = _syck.Scalar('a value', tag='a_tag', style='fold',
25                indent=4, width=80, chomp='+')
26        self.assertEqual(scalar.value, 'a value')
27        self.assertEqual(scalar.tag, 'a_tag')
28        self.assertEqual(scalar.style, 'fold')
29        self.assertEqual(scalar.indent, 4)
30        self.assertEqual(scalar.width, 80)
31        self.assertEqual(scalar.chomp, '+')
32        self.assertRaises(TypeError, lambda: setattr(scalar, 'kind', 'map'))
33        self.assertRaises(TypeError, lambda: setattr(scalar, 'value', None))
34        self.assertRaises(TypeError, lambda: setattr(scalar, 'value', []))
35        self.assertRaises(TypeError, lambda: setattr(scalar, 'tag', []))
36        self.assertRaises(TypeError, lambda: setattr(scalar, 'style', 'block'))
37        self.assertRaises(TypeError, lambda: setattr(scalar, 'style', []))
38        self.assertRaises(TypeError, lambda: setattr(scalar, 'indent', '1'))
39        self.assertRaises(TypeError, lambda: setattr(scalar, 'width', '1'))
40        self.assertRaises(TypeError, lambda: setattr(scalar, 'chomp', []))
41        scalar.value = 'another value'
42        scalar.tag = 'another_tag'
43        scalar.style = 'literal'
44        scalar.indent = 2
45        scalar.width = 100
46        scalar.chomp = '-'
47        self.assertEqual(scalar.value, 'another value')
48        self.assertEqual(scalar.tag, 'another_tag')
49        self.assertEqual(scalar.style, 'literal')
50        self.assertEqual(scalar.indent, 2)
51        self.assertEqual(scalar.width, 100)
52        self.assertEqual(scalar.chomp, '-')
53        scalar.tag = None
54        scalar.style = None
55        self.assertEqual(scalar.tag, None)
56        self.assertEqual(scalar.style, None)
57
58    def testSeq(self):
59        self.assert_(issubclass(_syck.Seq, _syck.Node))
60        seq = _syck.Seq()
61        self.assertEqual(seq.kind, 'seq')
62        self.assertEqual(seq.value, [])
63        self.assertEqual(seq.anchor, None)
64        self.assertEqual(seq.tag, None)
65        self.assertEqual(seq.inline, False)
66        self.assertRaises(TypeError, lambda: setattr(seq, 'kind', 'map'))
67        self.assertRaises(TypeError, lambda: setattr(seq, 'tag', []))
68        self.assertRaises(TypeError, lambda: setattr(seq, 'inline', 'block'))
69        self.assertRaises(TypeError, lambda: setattr(seq, 'inline', []))
70        value = [_syck.Scalar(str(k)) for k in range(10)]
71        seq = _syck.Seq(value, tag='a_tag', inline=True)
72        self.assertEqual(seq.value, value)
73        self.assertEqual(seq.tag, 'a_tag')
74        self.assertEqual(seq.inline, True)
75        value = [_syck.Scalar(str(k)) for k in range(20)]
76        seq.value = value
77        seq.tag = 'another_tag'
78        seq.inline = False
79        self.assertEqual(seq.value, value)
80        self.assertEqual(seq.tag, 'another_tag')
81        self.assertEqual(seq.inline, False)
82        seq.tag = None
83        self.assertEqual(seq.tag, None)
84
85    def testMap(self):
86        self.assert_(issubclass(_syck.Map, _syck.Node))
87        map = _syck.Map()
88        self.assertEqual(map.kind, 'map')
89        self.assertEqual(map.value, {})
90        self.assertEqual(map.anchor, None)
91        self.assertEqual(map.tag, None)
92        self.assertEqual(map.inline, False)
93        self.assertRaises(TypeError, lambda: setattr(map, 'kind', 'map'))
94        self.assertRaises(TypeError, lambda: setattr(map, 'tag', []))
95        self.assertRaises(TypeError, lambda: setattr(map, 'inline', 'block'))
96        self.assertRaises(TypeError, lambda: setattr(map, 'inline', []))
97        value = dict([(_syck.Scalar(str(k)), _syck.Scalar(str(-k))) for k in range(10)])
98        map = _syck.Map(value, tag='a_tag', inline=True)
99        self.assertEqual(map.value, value)
100        self.assertEqual(map.tag, 'a_tag')
101        self.assertEqual(map.inline, True)
102        value = [(_syck.Scalar(str(k)), _syck.Scalar(str(-k))) for k in range(20)]
103        map.value = value
104        map.tag = 'another_tag'
105        map.inline = False
106        self.assertEqual(map.value, value)
107        self.assertEqual(map.tag, 'another_tag')
108        self.assertEqual(map.inline, False)
109        map.tag = None
110        self.assertEqual(map.tag, None)
111
112    def testGarbage(self):
113        gc.collect()
114        seq = _syck.Seq()
115        seq.value = [seq]
116        del seq
117        self.assertEqual(gc.collect(), 2)
118        scalar1 = _syck.Scalar()
119        scalar2 = _syck.Scalar()
120        seq = _syck.Seq()
121        map1 = _syck.Map()
122        map2 = _syck.Map()
123        map1.value[scalar1] = seq
124        map1.value[scalar2] = map2
125        map2.value[scalar1] = map1
126        map2.value[scalar2] = seq
127        seq.value.append(map1)
128        seq.value.append(map2)
129        del scalar1, scalar2, seq, map1, map2
130        self.assertEqual(gc.collect(), 8)
131
Note: See TracBrowser for help on using the repository browser.