xref: /qemu/tests/qapi-schema/test-qapi.py (revision 48825ca419fd9c8140d4fecb24e982d68ebca74f)
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
1398626572SMarkus Armbrusterfrom qapi import *
1498626572SMarkus Armbrusterfrom pprint import pprint
1533aaad52SLluís Vilanovaimport os
1698626572SMarkus Armbrusterimport sys
1798626572SMarkus Armbruster
1898626572SMarkus Armbruster
19156402e5SMarkus Armbrusterclass QAPISchemaTestVisitor(QAPISchemaVisitor):
20156402e5SMarkus Armbruster    def visit_enum_type(self, name, info, values, prefix):
21156402e5SMarkus Armbruster        print 'enum %s %s' % (name, values)
22156402e5SMarkus Armbruster        if prefix:
23156402e5SMarkus Armbruster            print '    prefix %s' % prefix
24156402e5SMarkus Armbruster
25156402e5SMarkus Armbruster    def visit_object_type(self, name, info, base, members, variants):
26156402e5SMarkus Armbruster        print 'object %s' % name
27156402e5SMarkus Armbruster        if base:
28156402e5SMarkus Armbruster            print '    base %s' % base.name
29156402e5SMarkus Armbruster        for m in members:
30156402e5SMarkus Armbruster            print '    member %s: %s optional=%s' % \
31156402e5SMarkus Armbruster                (m.name, m.type.name, m.optional)
32156402e5SMarkus Armbruster        self._print_variants(variants)
33156402e5SMarkus Armbruster
34156402e5SMarkus Armbruster    def visit_alternate_type(self, name, info, variants):
35156402e5SMarkus Armbruster        print 'alternate %s' % name
36156402e5SMarkus Armbruster        self._print_variants(variants)
37156402e5SMarkus Armbruster
38156402e5SMarkus Armbruster    def visit_command(self, name, info, arg_type, ret_type,
39*48825ca4SEric Blake                      gen, success_response, boxed):
40156402e5SMarkus Armbruster        print 'command %s %s -> %s' % \
41156402e5SMarkus Armbruster            (name, arg_type and arg_type.name, ret_type and ret_type.name)
42*48825ca4SEric Blake        print '   gen=%s success_response=%s boxed=%s' % \
43*48825ca4SEric Blake            (gen, success_response, boxed)
44156402e5SMarkus Armbruster
45*48825ca4SEric Blake    def visit_event(self, name, info, arg_type, boxed):
46156402e5SMarkus Armbruster        print 'event %s %s' % (name, arg_type and arg_type.name)
47*48825ca4SEric Blake        print '   boxed=%s' % boxed
48156402e5SMarkus Armbruster
49156402e5SMarkus Armbruster    @staticmethod
50156402e5SMarkus Armbruster    def _print_variants(variants):
51156402e5SMarkus Armbruster        if variants:
52da9cb193SEric Blake            print '    tag %s' % variants.tag_member.name
53156402e5SMarkus Armbruster            for v in variants.variants:
54156402e5SMarkus Armbruster                print '    case %s: %s' % (v.name, v.type.name)
55156402e5SMarkus Armbruster
56156402e5SMarkus Armbrusterschema = QAPISchema(sys.argv[1])
57156402e5SMarkus Armbrusterschema.visit(QAPISchemaTestVisitor())
58