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