source: trunk/tests/test_low_level_node.py @ 13

Revision 13, 4.5 KB checked in by xi, 9 years ago (diff)

Add unit tests for _syck.Node and subtypes.

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.style, None)
66        value = [_syck.Scalar(str(k)) for k in range(10)]
67        seq = _syck.Seq(value, tag='a_tag', style='inline')
68        self.assertEqual(seq.value, value)
69        self.assertEqual(seq.tag, 'a_tag')
70        self.assertEqual(seq.style, 'inline')
71        value = [_syck.Scalar(str(k)) for k in range(20)]
72        seq.value = value
73        seq.tag = 'another_tag'
74        seq.style = 'block'
75        self.assertEqual(seq.value, value)
76        self.assertEqual(seq.tag, 'another_tag')
77        self.assertEqual(seq.style, 'block')
78
79    def testMap(self):
80        self.assert_(issubclass(_syck.Map, _syck.Node))
81        map = _syck.Map()
82        self.assertEqual(map.kind, 'map')
83        self.assertEqual(map.value, {})
84        self.assertEqual(map.anchor, None)
85        self.assertEqual(map.tag, None)
86        self.assertEqual(map.style, None)
87        value = dict([(_syck.Scalar(str(k)), _syck.Scalar(str(-k))) for k in range(10)])
88        map = _syck.Map(value, tag='a_tag', style='inline')
89        self.assertEqual(map.value, value)
90        self.assertEqual(map.tag, 'a_tag')
91        self.assertEqual(map.style, 'inline')
92        value = dict([(_syck.Scalar(str(k)), _syck.Scalar(str(-k))) for k in range(20)])
93        map.value = value
94        map.tag = 'another_tag'
95        map.style = 'block'
96        self.assertEqual(map.value, value)
97        self.assertEqual(map.tag, 'another_tag')
98        self.assertEqual(map.style, 'block')
99
100    def testGarbage(self):
101        gc.collect()
102        scalar1 = _syck.Scalar()
103        scalar2 = _syck.Scalar()
104        seq = _syck.Seq()
105        map1 = _syck.Map()
106        map2 = _syck.Map()
107        map1.value[scalar1] = seq
108        map1.value[scalar2] = map2
109        map2.value[scalar1] = map1
110        map2.value[scalar2] = seq
111        seq.value.append(map1)
112        seq.value.append(map2)
113        del scalar1, scalar2, seq, map1, map2
114        self.assertEqual(gc.collect(), 8)
115
Note: See TracBrowser for help on using the repository browser.