summaryrefslogtreecommitdiff
path: root/tests/plugins/yamlrdr.py
blob: 7f65624004d5d52ba5d71d74321adf69031df2d5 (plain)
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
#!/usr/bin/python3-dbg
# -*- coding: utf-8 -*-


from chrysacase import ChrysalideTestCase
from pychrysalide.plugins.yaml import YamlReader
import tempfile


class TestYamlReader(ChrysalideTestCase):
    """TestCase for the Yaml reader."""


    @classmethod
    def setUpClass(cls):

        super(TestYamlReader, cls).setUpClass()

        cls._simple = tempfile.NamedTemporaryFile()

        cls.simple_data = b'''
meta:
  id: java_class
  endian: be
  file-extension: class
  xref:
    justsolve: Java
    pronom: x-fmt/415
    'wiki"data': Q2193155
  license: CC0-1.0

'''

        cls._simple.write(cls.simple_data)

        cls._simple.flush()

        cls.log('Using temporary file "%s"' % cls._simple.name)


    @classmethod
    def tearDownClass(cls):

        super(TestYamlReader, cls).tearDownClass()

        cls.log('Delete file "%s"' % cls._simple.name)

        cls._simple.close()


    def testSimpleYamlContent(self):
        """Validate simple Yaml content reader."""

        reader = YamlReader.new_from_path(self._simple.name)
        self.assertIsNotNone(reader)


        def _build_node_desc(node, left):

            line = node.yaml_line

            desc = left + line.key + ':' + (' ' + line.value if line.value else '') + '\n'

            for child in node.children:
                desc += _build_node_desc(child, left + '  ')

            return desc


        fulldesc = ''

        for rn in reader.tree.root_nodes:
            fulldesc += _build_node_desc(rn, '')

        self.assertEqual('\n' + fulldesc + '\n', self.simple_data.decode('ascii'))


    def testSimpleYamlContentFinder(self):
        """Validate simple Yaml content search."""

        reader = YamlReader.new_from_path(self._simple.name)
        self.assertIsNotNone(reader)

        found = reader.tree.find_node_by_path('/meta/xref')

        self.assertEqual(found.yaml_line.key, 'xref')

        found = reader.tree.find_node_by_path('/meta/xref/')

        self.assertEqual(found.yaml_line.key, 'xref')

        found = reader.tree.find_node_by_path('/meta/xref/aa')

        self.assertIsNone(found)