1# 2# QAPI parser test harness 3# 4# Copyright (c) 2013 Red Hat Inc. 5# 6# Authors: 7# Markus Armbruster <armbru@redhat.com> 8# 9# This work is licensed under the terms of the GNU GPL, version 2 or later. 10# See the COPYING file in the top-level directory. 11# 12 13from qapi import * 14from pprint import pprint 15import os 16import sys 17 18 19class QAPISchemaTestVisitor(QAPISchemaVisitor): 20 def visit_enum_type(self, name, info, values, prefix): 21 print 'enum %s %s' % (name, values) 22 if prefix: 23 print ' prefix %s' % prefix 24 25 def visit_object_type(self, name, info, base, members, variants): 26 print 'object %s' % name 27 if base: 28 print ' base %s' % base.name 29 for m in members: 30 print ' member %s: %s optional=%s' % \ 31 (m.name, m.type.name, m.optional) 32 self._print_variants(variants) 33 34 def visit_alternate_type(self, name, info, variants): 35 print 'alternate %s' % name 36 self._print_variants(variants) 37 38 def visit_command(self, name, info, arg_type, ret_type, 39 gen, success_response, boxed): 40 print 'command %s %s -> %s' % \ 41 (name, arg_type and arg_type.name, ret_type and ret_type.name) 42 print ' gen=%s success_response=%s boxed=%s' % \ 43 (gen, success_response, boxed) 44 45 def visit_event(self, name, info, arg_type, boxed): 46 print 'event %s %s' % (name, arg_type and arg_type.name) 47 print ' boxed=%s' % boxed 48 49 @staticmethod 50 def _print_variants(variants): 51 if variants: 52 print ' tag %s' % variants.tag_member.name 53 for v in variants.variants: 54 print ' case %s: %s' % (v.name, v.type.name) 55 56schema = QAPISchema(sys.argv[1]) 57schema.visit(QAPISchemaTestVisitor()) 58 59for doc in schema.docs: 60 if doc.symbol: 61 print 'doc symbol=%s expr=%s' % \ 62 (doc.symbol, doc.expr.items()[0]) 63 else: 64 print 'doc freeform' 65 for arg, section in doc.args.iteritems(): 66 print ' arg=%s\n%s' % (arg, section) 67 for section in doc.sections: 68 print ' section=%s\n%s' % (section.name, section) 69 body = str(doc.body) 70 if body: 71 print ' body=\n%s' % body 72