diff options
author | Christoph Reiter <reiter.christoph@gmail.com> | 2019-01-09 23:07:00 +0100 |
---|---|---|
committer | Christoph Reiter <reiter.christoph@gmail.com> | 2019-01-09 23:16:55 +0100 |
commit | 4f1374ba76d919c4e0d69c8a542f184d9d10df08 (patch) | |
tree | 92aaf30998ae841d8386016cbb6b27edc83529be /tests/scanner/test_maintransformer.py | |
parent | 19e1c72db3ac4436cbb68dc0fb21c79c5f13e74b (diff) | |
download | gobject-introspection-4f1374ba76d919c4e0d69c8a542f184d9d10df08.tar.gz |
maintransformer: parse deprecation annotations for section blocks. Fixes #213
The scanner matches gtk-doc sections which match the lower case type name
to the type and uses that for the type documentation. The only problem is
it only takes the docs and none of the other annotations like deprecation
info etc.
This changes things to also parse the annotations in that case and adds some
tests while at it.
Diffstat (limited to 'tests/scanner/test_maintransformer.py')
-rw-r--r-- | tests/scanner/test_maintransformer.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/scanner/test_maintransformer.py b/tests/scanner/test_maintransformer.py new file mode 100644 index 00000000..abf3ee73 --- /dev/null +++ b/tests/scanner/test_maintransformer.py @@ -0,0 +1,72 @@ +import unittest +import tempfile +import os + +os.environ['GI_SCANNER_DISABLE_CACHE'] = '1' + +from giscanner import ast +from giscanner.sourcescanner import SourceScanner +from giscanner.transformer import Transformer +from giscanner.annotationparser import GtkDocCommentBlockParser +from giscanner.maintransformer import MainTransformer + + +def create_scanner_from_source_string(source): + ss = SourceScanner() + tmp_fd, tmp_name = tempfile.mkstemp(suffix='.h', text=True) + + try: + with os.fdopen(tmp_fd, 'wt') as file: + file.write(source) + ss.parse_files([tmp_name]) + finally: + os.unlink(tmp_name) + + return ss + + +def load_namespace_from_source_string(namespace, source): + ss = create_scanner_from_source_string(source) + transformer = Transformer(namespace) + transformer.parse(ss.get_symbols()) + cbp = GtkDocCommentBlockParser() + blocks = cbp.parse_comment_blocks(ss.get_comments()) + main = MainTransformer(transformer, blocks) + main.transform() + + +class TestDeprecations(unittest.TestCase): + + def test_record_deprecated(self): + namespace = ast.Namespace('Test', '1.0') + load_namespace_from_source_string(namespace, """ + /** TestStruct: + * foo + * Deprecated: 1.2: something + */ + typedef struct _TestStruct TestStruct; + """) + + node = namespace.get('Struct') + self.assertEqual(node.doc, "foo") + self.assertEqual(node.deprecated, "1.2") + self.assertEqual(node.deprecated_doc, "something") + + def test_record_deprecated_from_section(self): + namespace = ast.Namespace('Test', '1.0') + load_namespace_from_source_string(namespace, """ + /** SECTION:teststruct + * foo + * Deprecated: 1.2: something + */ + typedef struct _TestStruct TestStruct; + """) + + node = namespace.get('Struct') + self.assertEqual(node.doc, "foo") + self.assertEqual(node.deprecated, "1.2") + self.assertEqual(node.deprecated_doc, "something") + + +if __name__ == '__main__': + unittest.main() |