198626572SMarkus Armbruster# 298626572SMarkus Armbruster# QAPI parser test harness 398626572SMarkus Armbruster# 498626572SMarkus Armbruster# Copyright (c) 2013 Red Hat Inc. 598626572SMarkus Armbruster# 698626572SMarkus Armbruster# Authors: 798626572SMarkus Armbruster# Markus Armbruster <armbru@redhat.com> 898626572SMarkus Armbruster# 998626572SMarkus Armbruster# This work is licensed under the terms of the GNU GPL, version 2 or later. 1098626572SMarkus Armbruster# See the COPYING file in the top-level directory. 1198626572SMarkus Armbruster# 1298626572SMarkus Armbruster 13ef9d9108SDaniel P. Berrangefrom __future__ import print_function 1498626572SMarkus Armbrusterimport sys 15181feaf3SMarkus Armbrusterfrom qapi.common import QAPIError, QAPISchema, QAPISchemaVisitor 1698626572SMarkus Armbruster 1798626572SMarkus Armbruster 18156402e5SMarkus Armbrusterclass QAPISchemaTestVisitor(QAPISchemaVisitor): 19cf40a0a5SMarkus Armbruster 20cf40a0a5SMarkus Armbruster def visit_module(self, name): 21cf40a0a5SMarkus Armbruster print('module %s' % name) 22cf40a0a5SMarkus Armbruster 23cf40a0a5SMarkus Armbruster def visit_include(self, name, info): 24cf40a0a5SMarkus Armbruster print('include %s' % name) 25cf40a0a5SMarkus Armbruster 26156402e5SMarkus Armbruster def visit_enum_type(self, name, info, values, prefix): 27ef9d9108SDaniel P. Berrange print('enum %s %s' % (name, values)) 28156402e5SMarkus Armbruster if prefix: 29ef9d9108SDaniel P. Berrange print(' prefix %s' % prefix) 30156402e5SMarkus Armbruster 31156402e5SMarkus Armbruster def visit_object_type(self, name, info, base, members, variants): 32ef9d9108SDaniel P. Berrange print('object %s' % name) 33156402e5SMarkus Armbruster if base: 34ef9d9108SDaniel P. Berrange print(' base %s' % base.name) 35156402e5SMarkus Armbruster for m in members: 36ef9d9108SDaniel P. Berrange print(' member %s: %s optional=%s' % \ 37ef9d9108SDaniel P. Berrange (m.name, m.type.name, m.optional)) 38156402e5SMarkus Armbruster self._print_variants(variants) 39156402e5SMarkus Armbruster 40156402e5SMarkus Armbruster def visit_alternate_type(self, name, info, variants): 41ef9d9108SDaniel P. Berrange print('alternate %s' % name) 42156402e5SMarkus Armbruster self._print_variants(variants) 43156402e5SMarkus Armbruster 44*d6fe3d02SIgor Mammedov def visit_command(self, name, info, arg_type, ret_type, gen, 45*d6fe3d02SIgor Mammedov success_response, boxed, allow_oob, allow_preconfig): 46ef9d9108SDaniel P. Berrange print('command %s %s -> %s' % \ 47ef9d9108SDaniel P. Berrange (name, arg_type and arg_type.name, ret_type and ret_type.name)) 484bebca1eSPeter Xu print(' gen=%s success_response=%s boxed=%s oob=%s' % \ 494bebca1eSPeter Xu (gen, success_response, boxed, allow_oob)) 50156402e5SMarkus Armbruster 5148825ca4SEric Blake def visit_event(self, name, info, arg_type, boxed): 52ef9d9108SDaniel P. Berrange print('event %s %s' % (name, arg_type and arg_type.name)) 53ef9d9108SDaniel P. Berrange print(' boxed=%s' % boxed) 54156402e5SMarkus Armbruster 55156402e5SMarkus Armbruster @staticmethod 56156402e5SMarkus Armbruster def _print_variants(variants): 57156402e5SMarkus Armbruster if variants: 58ef9d9108SDaniel P. Berrange print(' tag %s' % variants.tag_member.name) 59156402e5SMarkus Armbruster for v in variants.variants: 60ef9d9108SDaniel P. Berrange print(' case %s: %s' % (v.name, v.type.name)) 61156402e5SMarkus Armbruster 62181feaf3SMarkus Armbruster 63181feaf3SMarkus Armbrustertry: 64156402e5SMarkus Armbruster schema = QAPISchema(sys.argv[1]) 65181feaf3SMarkus Armbrusterexcept QAPIError as err: 66181feaf3SMarkus Armbruster print(err, file=sys.stderr) 67181feaf3SMarkus Armbruster exit(1) 68181feaf3SMarkus Armbruster 69156402e5SMarkus Armbrusterschema.visit(QAPISchemaTestVisitor()) 70818c3318SMarkus Armbruster 71818c3318SMarkus Armbrusterfor doc in schema.docs: 72818c3318SMarkus Armbruster if doc.symbol: 73ef9d9108SDaniel P. Berrange print('doc symbol=%s' % doc.symbol) 74818c3318SMarkus Armbruster else: 75ef9d9108SDaniel P. Berrange print('doc freeform') 76ef9d9108SDaniel P. Berrange print(' body=\n%s' % doc.body.text) 772f848044SDaniel P. Berrange for arg, section in doc.args.items(): 78ef9d9108SDaniel P. Berrange print(' arg=%s\n%s' % (arg, section.text)) 79818c3318SMarkus Armbruster for section in doc.sections: 80ef9d9108SDaniel P. Berrange print(' section=%s\n%s' % (section.name, section.text)) 81