1import unittest
2import tempfile
3import os
4
5os.environ['GI_SCANNER_DISABLE_CACHE'] = '1'
6
7from giscanner import ast
8from giscanner.sourcescanner import SourceScanner
9from giscanner.transformer import Transformer
10from giscanner.annotationparser import GtkDocCommentBlockParser
11from giscanner.maintransformer import MainTransformer
12
13
14def create_scanner_from_source_string(source):
15    ss = SourceScanner()
16    tmp_fd, tmp_name = tempfile.mkstemp(suffix='.h', text=True)
17
18    try:
19        with os.fdopen(tmp_fd, 'w', encoding='utf-8') as file:
20            file.write(source)
21        ss.parse_files([tmp_name])
22    finally:
23        os.unlink(tmp_name)
24
25    return ss
26
27
28def load_namespace_from_source_string(namespace, source):
29    ss = create_scanner_from_source_string(source)
30    transformer = Transformer(namespace)
31    transformer.parse(ss.get_symbols())
32    cbp = GtkDocCommentBlockParser()
33    blocks = cbp.parse_comment_blocks(ss.get_comments())
34    main = MainTransformer(transformer, blocks)
35    main.transform()
36
37
38class TestDeprecations(unittest.TestCase):
39
40    def test_record_deprecated(self):
41        namespace = ast.Namespace('Test', '1.0')
42        load_namespace_from_source_string(namespace, """
43            /** TestStruct:
44            * foo
45            * Deprecated: 1.2: something
46            */
47            typedef struct _TestStruct TestStruct;
48            """)
49
50        node = namespace.get('Struct')
51        self.assertEqual(node.doc, "foo")
52        self.assertEqual(node.deprecated, "1.2")
53        self.assertEqual(node.deprecated_doc, "something")
54
55    def test_record_deprecated_from_section(self):
56        namespace = ast.Namespace('Test', '1.0')
57        load_namespace_from_source_string(namespace, """
58            /** SECTION:teststruct
59            * foo
60            * Deprecated: 1.2: something
61            */
62            typedef struct _TestStruct TestStruct;
63            """)
64
65        node = namespace.get('Struct')
66        self.assertEqual(node.doc, "foo")
67        self.assertEqual(node.deprecated, "1.2")
68        self.assertEqual(node.deprecated_doc, "something")
69
70
71if __name__ == '__main__':
72    unittest.main()
73