summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDieter Verfaillie <dieterv@optionexplicit.be>2013-08-13 09:12:29 +0200
committerDieter Verfaillie <dieterv@optionexplicit.be>2013-10-08 20:53:32 +0200
commite7c14b11393428c61d1bc7c0559bd5d7af74778f (patch)
tree94e4e42dc2a9fb50c3258daeeb23eae72c1645ac /tests
parent49bc3e7ab8e1dd69ba89d1ae879f56af5b999d8c (diff)
downloadgobject-introspection-e7c14b11393428c61d1bc7c0559bd5d7af74778f.tar.gz
tests: make parsed2tree() and expected2tree() methods of TestCommentBlock()
Diffstat (limited to 'tests')
-rw-r--r--tests/scanner/annotationparser/test_parser.py382
1 files changed, 190 insertions, 192 deletions
diff --git a/tests/scanner/annotationparser/test_parser.py b/tests/scanner/annotationparser/test_parser.py
index ce3ccd22..6bf3ef35 100644
--- a/tests/scanner/annotationparser/test_parser.py
+++ b/tests/scanner/annotationparser/test_parser.py
@@ -37,196 +37,6 @@ from giscanner.ast import Namespace
from giscanner.message import MessageLogger
-def parsed2tree(docblock):
- parsed = ''
-
- if docblock is not None:
- parsed += '<docblock>\n'
-
- parsed += ' <identifier>\n'
- # An identifier name is always required, but we can't trust our
- # own parser to ensure this when testing so fall back to an empty
- # string when no name has been parsed...
- parsed += ' <name>%s</name>\n' % (docblock.name or '', )
- if docblock.options.values:
- parsed += ' <annotations>\n'
- for key, value in docblock.options.values:
- parsed += ' <annotation>\n'
- parsed += ' <name>%s</name>\n' % (key, )
- if value is not None:
- options = value.all()
- parsed += ' <options>\n'
- for option in options:
- parsed += ' <option>\n'
- parsed += ' <name>%s</name>\n' % (option, )
- if options[option] is not None:
- parsed += ' <value>%s</value>\n' % (options[option], )
- parsed += ' </option>\n'
- parsed += ' </options>\n'
- parsed += ' </annotation>\n'
- parsed += ' </annotations>\n'
- parsed += ' </identifier>\n'
-
- if docblock.params:
- parsed += ' <parameters>\n'
- for param_name in docblock.params:
- param = docblock.params.get(param_name)
- parsed += ' <parameter>\n'
- parsed += ' <name>%s</name>\n' % (param_name, )
- if param.options.values:
- parsed += ' <annotations>\n'
- for key, value in param.options.values:
- parsed += ' <annotation>\n'
- parsed += ' <name>%s</name>\n' % (key, )
- if value is not None:
- options = value.all()
- parsed += ' <options>\n'
- for option in options:
- parsed += ' <option>\n'
- parsed += ' <name>%s</name>\n' % (option, )
- if options[option] is not None:
- parsed += ' <value>%s</value>\n' % (options[option], )
- parsed += ' </option>\n'
- parsed += ' </options>\n'
- parsed += ' </annotation>\n'
- parsed += ' </annotations>\n'
- if param.comment or param.value:
- parsed += ' <description>%s</description>\n' % (param.comment or param.value, )
- parsed += ' </parameter>\n'
- parsed += ' </parameters>\n'
-
- if docblock.comment or docblock.value:
- parsed += ' <description>%s</description>\n' % (docblock.comment or docblock.value, )
-
- if docblock.tags:
- parsed += ' <tags>\n'
- for tag_name in docblock.tags:
- tag = docblock.tags.get(tag_name)
- parsed += ' <tag>\n'
- parsed += ' <name>%s</name>\n' % (tag_name, )
- if tag.options.values:
- parsed += ' <annotations>\n'
- for key, value in tag.options.values:
- parsed += ' <annotation>\n'
- parsed += ' <name>%s</name>\n' % (key, )
- if value is not None:
- options = value.all()
- parsed += ' <options>\n'
- for option in options:
- parsed += ' <option>\n'
- parsed += ' <name>%s</name>\n' % (option, )
- if options[option] is not None:
- parsed += ' <value>%s</value>\n' % (options[option], )
- parsed += ' </option>\n'
- parsed += ' </options>\n'
- parsed += ' </annotation>\n'
- parsed += ' </annotations>\n'
- if tag.comment or tag.value:
- parsed += ' <description>%s</description>\n' % (tag.comment or tag.value, )
- parsed += ' </tag>\n'
- parsed += ' </tags>\n'
-
- parsed += '<docblock>'
-
- return parsed
-
-
-def expected2tree(docblock):
- # Note: this sucks, but we can't rely on etree.tostring() to generate useable output :(
-
- expected = ''
-
- if docblock is not None:
- expected += '<docblock>\n'
-
- if docblock.find('identifier') is not None:
- expected += ' <identifier>\n'
- # Expecting an identifier name is required, don't bother checking if it's there or not
- expected += ' <name>%s</name>\n' % (docblock.find('identifier/name').text, )
- annotations = docblock.find('identifier/annotations')
- if annotations is not None:
- expected += ' <annotations>\n'
- for annotation in annotations.findall('annotation'):
- expected += ' <annotation>\n'
- expected += ' <name>%s</name>\n' % (annotation.find('name').text, )
- if annotation.find('options') is not None:
- expected += ' <options>\n'
- for option in annotation.findall('options/option'):
- expected += ' <option>\n'
- expected += ' <name>%s</name>\n' % (option.find('name').text, )
- if option.find('value') is not None:
- expected += ' <value>%s</value>\n' % (option.find('value').text, )
- expected += ' </option>\n'
- expected += ' </options>\n'
- expected += ' </annotation>\n'
- expected += ' </annotations>\n'
- expected += ' </identifier>\n'
-
- parameters = docblock.find('parameters')
- if parameters is not None:
- expected += ' <parameters>\n'
- for parameter in parameters.findall('parameter'):
- expected += ' <parameter>\n'
- expected += ' <name>%s</name>\n' % (parameter.find('name').text, )
- annotations = parameter.find('annotations')
- if annotations is not None:
- expected += ' <annotations>\n'
- for annotation in parameter.findall('annotations/annotation'):
- expected += ' <annotation>\n'
- expected += ' <name>%s</name>\n' % (annotation.find('name').text, )
- if annotation.find('options') is not None:
- expected += ' <options>\n'
- for option in annotation.findall('options/option'):
- expected += ' <option>\n'
- expected += ' <name>%s</name>\n' % (option.find('name').text, )
- if option.find('value') is not None:
- expected += ' <value>%s</value>\n' % (option.find('value').text, )
- expected += ' </option>\n'
- expected += ' </options>\n'
- expected += ' </annotation>\n'
- expected += ' </annotations>\n'
- if parameter.find('description') is not None:
- expected += ' <description>%s</description>\n' % (parameter.find('description').text, )
- expected += ' </parameter>\n'
- expected += ' </parameters>\n'
-
- description = docblock.find('description')
- if description is not None:
- expected += ' <description>%s</description>\n' % (description.text, )
-
- tags = docblock.find('tags')
- if tags is not None:
- expected += ' <tags>\n'
- for tag in tags.findall('tag'):
- expected += ' <tag>\n'
- expected += ' <name>%s</name>\n' % (tag.find('name').text, )
- annotations = tag.find('annotations')
- if annotations is not None:
- expected += ' <annotations>\n'
- for annotation in tag.findall('annotations/annotation'):
- expected += ' <annotation>\n'
- expected += ' <name>%s</name>\n' % (annotation.find('name').text, )
- if annotation.find('options') is not None:
- expected += ' <options>\n'
- for option in annotation.findall('options/option'):
- expected += ' <option>\n'
- expected += ' <name>%s</name>\n' % (option.find('name').text, )
- if option.find('value') is not None:
- expected += ' <value>%s</value>\n' % (option.find('value').text, )
- expected += ' </option>\n'
- expected += ' </options>\n'
- expected += ' </annotation>\n'
- expected += ' </annotations>\n'
- if tag.find('description') is not None:
- expected += ' <description>%s</description>\n' % (tag.find('description').text, )
- expected += ' </tag>\n'
- expected += ' </tags>\n'
-
- expected += '<docblock>'
-
- return expected
-
-
def create_tests(tests_dir, tests_file):
tests_name = os.path.relpath(tests_file[:-4], tests_dir)
tests_name = tests_name.replace('/', '.').replace('\\', '.')
@@ -254,11 +64,11 @@ class TestCommentBlock(unittest.TestCase):
# Parse GTK-Doc comment block
commentblock = testcase.find('commentblock').text
parsed_docblock = AnnotationParser().parse_comment_block((commentblock, 'test.c', 1))
- parsed_tree = parsed2tree(parsed_docblock).split('\n')
+ parsed_tree = self.parsed2tree(parsed_docblock).split('\n')
# Get expected output
expected_docblock = testcase.find('docblock')
- expected_tree = expected2tree(expected_docblock).split('\n')
+ expected_tree = self.expected2tree(expected_docblock).split('\n')
# Construct a meaningful message
msg = 'Parsed DocBlock object tree does not match expected output:\n\n'
@@ -276,6 +86,194 @@ class TestCommentBlock(unittest.TestCase):
return do_test
+ def parsed2tree(self, docblock):
+ parsed = ''
+
+ if docblock is not None:
+ parsed += '<docblock>\n'
+
+ parsed += ' <identifier>\n'
+ # An identifier name is always required, but we can't trust our
+ # own parser to ensure this when testing so fall back to an empty
+ # string when no name has been parsed...
+ parsed += ' <name>%s</name>\n' % (docblock.name or '', )
+ if docblock.options.values:
+ parsed += ' <annotations>\n'
+ for key, value in docblock.options.values:
+ parsed += ' <annotation>\n'
+ parsed += ' <name>%s</name>\n' % (key, )
+ if value is not None:
+ options = value.all()
+ parsed += ' <options>\n'
+ for option in options:
+ parsed += ' <option>\n'
+ parsed += ' <name>%s</name>\n' % (option, )
+ if options[option] is not None:
+ parsed += ' <value>%s</value>\n' % (options[option], )
+ parsed += ' </option>\n'
+ parsed += ' </options>\n'
+ parsed += ' </annotation>\n'
+ parsed += ' </annotations>\n'
+ parsed += ' </identifier>\n'
+
+ if docblock.params:
+ parsed += ' <parameters>\n'
+ for param_name in docblock.params:
+ param = docblock.params.get(param_name)
+ parsed += ' <parameter>\n'
+ parsed += ' <name>%s</name>\n' % (param_name, )
+ if param.options.values:
+ parsed += ' <annotations>\n'
+ for key, value in param.options.values:
+ parsed += ' <annotation>\n'
+ parsed += ' <name>%s</name>\n' % (key, )
+ if value is not None:
+ options = value.all()
+ parsed += ' <options>\n'
+ for option in options:
+ parsed += ' <option>\n'
+ parsed += ' <name>%s</name>\n' % (option, )
+ if options[option] is not None:
+ parsed += ' <value>%s</value>\n' % (options[option], )
+ parsed += ' </option>\n'
+ parsed += ' </options>\n'
+ parsed += ' </annotation>\n'
+ parsed += ' </annotations>\n'
+ if param.comment or param.value:
+ parsed += ' <description>%s</description>\n' % (param.comment or param.value, )
+ parsed += ' </parameter>\n'
+ parsed += ' </parameters>\n'
+
+ if docblock.comment or docblock.value:
+ parsed += ' <description>%s</description>\n' % (docblock.comment or docblock.value, )
+
+ if docblock.tags:
+ parsed += ' <tags>\n'
+ for tag_name in docblock.tags:
+ tag = docblock.tags.get(tag_name)
+ parsed += ' <tag>\n'
+ parsed += ' <name>%s</name>\n' % (tag_name, )
+ if tag.options.values:
+ parsed += ' <annotations>\n'
+ for key, value in tag.options.values:
+ parsed += ' <annotation>\n'
+ parsed += ' <name>%s</name>\n' % (key, )
+ if value is not None:
+ options = value.all()
+ parsed += ' <options>\n'
+ for option in options:
+ parsed += ' <option>\n'
+ parsed += ' <name>%s</name>\n' % (option, )
+ if options[option] is not None:
+ parsed += ' <value>%s</value>\n' % (options[option], )
+ parsed += ' </option>\n'
+ parsed += ' </options>\n'
+ parsed += ' </annotation>\n'
+ parsed += ' </annotations>\n'
+ if tag.comment or tag.value:
+ parsed += ' <description>%s</description>\n' % (tag.comment or tag.value, )
+ parsed += ' </tag>\n'
+ parsed += ' </tags>\n'
+
+ parsed += '</docblock>'
+
+ return parsed
+
+ def expected2tree(self, docblock):
+ # Note: this sucks, but we can't rely on etree.tostring() to generate useable output :(
+
+ expected = ''
+
+ if docblock is not None:
+ expected += '<docblock>\n'
+
+ if docblock.find('identifier') is not None:
+ expected += ' <identifier>\n'
+ # Expecting an identifier name is required, don't bother checking if it's there or not
+ expected += ' <name>%s</name>\n' % (docblock.find('identifier/name').text, )
+ annotations = docblock.find('identifier/annotations')
+ if annotations is not None:
+ expected += ' <annotations>\n'
+ for annotation in annotations.findall('annotation'):
+ expected += ' <annotation>\n'
+ expected += ' <name>%s</name>\n' % (annotation.find('name').text, )
+ if annotation.find('options') is not None:
+ expected += ' <options>\n'
+ for option in annotation.findall('options/option'):
+ expected += ' <option>\n'
+ expected += ' <name>%s</name>\n' % (option.find('name').text, )
+ if option.find('value') is not None:
+ expected += ' <value>%s</value>\n' % (option.find('value').text, )
+ expected += ' </option>\n'
+ expected += ' </options>\n'
+ expected += ' </annotation>\n'
+ expected += ' </annotations>\n'
+ expected += ' </identifier>\n'
+
+ parameters = docblock.find('parameters')
+ if parameters is not None:
+ expected += ' <parameters>\n'
+ for parameter in parameters.findall('parameter'):
+ expected += ' <parameter>\n'
+ expected += ' <name>%s</name>\n' % (parameter.find('name').text, )
+ annotations = parameter.find('annotations')
+ if annotations is not None:
+ expected += ' <annotations>\n'
+ for annotation in parameter.findall('annotations/annotation'):
+ expected += ' <annotation>\n'
+ expected += ' <name>%s</name>\n' % (annotation.find('name').text, )
+ if annotation.find('options') is not None:
+ expected += ' <options>\n'
+ for option in annotation.findall('options/option'):
+ expected += ' <option>\n'
+ expected += ' <name>%s</name>\n' % (option.find('name').text, )
+ if option.find('value') is not None:
+ expected += ' <value>%s</value>\n' % (option.find('value').text, )
+ expected += ' </option>\n'
+ expected += ' </options>\n'
+ expected += ' </annotation>\n'
+ expected += ' </annotations>\n'
+ if parameter.find('description') is not None:
+ expected += ' <description>%s</description>\n' % (parameter.find('description').text, )
+ expected += ' </parameter>\n'
+ expected += ' </parameters>\n'
+
+ description = docblock.find('description')
+ if description is not None:
+ expected += ' <description>%s</description>\n' % (description.text, )
+
+ tags = docblock.find('tags')
+ if tags is not None:
+ expected += ' <tags>\n'
+ for tag in tags.findall('tag'):
+ expected += ' <tag>\n'
+ expected += ' <name>%s</name>\n' % (tag.find('name').text, )
+ annotations = tag.find('annotations')
+ if annotations is not None:
+ expected += ' <annotations>\n'
+ for annotation in tag.findall('annotations/annotation'):
+ expected += ' <annotation>\n'
+ expected += ' <name>%s</name>\n' % (annotation.find('name').text, )
+ if annotation.find('options') is not None:
+ expected += ' <options>\n'
+ for option in annotation.findall('options/option'):
+ expected += ' <option>\n'
+ expected += ' <name>%s</name>\n' % (option.find('name').text, )
+ if option.find('value') is not None:
+ expected += ' <value>%s</value>\n' % (option.find('value').text, )
+ expected += ' </option>\n'
+ expected += ' </options>\n'
+ expected += ' </annotation>\n'
+ expected += ' </annotations>\n'
+ if tag.find('description') is not None:
+ expected += ' <description>%s</description>\n' % (tag.find('description').text, )
+ expected += ' </tag>\n'
+ expected += ' </tags>\n'
+
+ expected += '</docblock>'
+
+ return expected
+
if __name__ == '__main__':
# Initialize message logger