| 1 | |
|---|
| 2 | import unittest |
|---|
| 3 | |
|---|
| 4 | import _syck |
|---|
| 5 | |
|---|
| 6 | import gc |
|---|
| 7 | |
|---|
| 8 | class 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 | |
|---|