test-qapi.py 2.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#
# QAPI parser test harness
#
# Copyright (c) 2013 Red Hat Inc.
#
# Authors:
#  Markus Armbruster <armbru@redhat.com>
#
# This work is licensed under the terms of the GNU GPL, version 2 or later.
# See the COPYING file in the top-level directory.
#

from qapi import *
from pprint import pprint
15
import os
16 17
import sys

18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

class QAPISchemaTestVisitor(QAPISchemaVisitor):
    def visit_enum_type(self, name, info, values, prefix):
        print 'enum %s %s' % (name, values)
        if prefix:
            print '    prefix %s' % prefix

    def visit_object_type(self, name, info, base, members, variants):
        print 'object %s' % name
        if base:
            print '    base %s' % base.name
        for m in members:
            print '    member %s: %s optional=%s' % \
                (m.name, m.type.name, m.optional)
        self._print_variants(variants)

    def visit_alternate_type(self, name, info, variants):
        print 'alternate %s' % name
        self._print_variants(variants)

    def visit_command(self, name, info, arg_type, ret_type,
39
                      gen, success_response, boxed):
40 41
        print 'command %s %s -> %s' % \
            (name, arg_type and arg_type.name, ret_type and ret_type.name)
42 43
        print '   gen=%s success_response=%s boxed=%s' % \
            (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 50 51

    @staticmethod
    def _print_variants(variants):
        if variants:
52
            print '    tag %s' % variants.tag_member.name
53 54 55 56 57
            for v in variants.variants:
                print '    case %s: %s' % (v.name, v.type.name)

schema = QAPISchema(sys.argv[1])
schema.visit(QAPISchemaTestVisitor())
58 59 60 61 62 63

for doc in schema.docs:
    if doc.symbol:
        print 'doc symbol=%s' % doc.symbol
    else:
        print 'doc freeform'
64
    print '    body=\n%s' % doc.body.text
65
    for arg, section in doc.args.iteritems():
66
        print '    arg=%s\n%s' % (arg, section.text)
67
    for section in doc.sections:
68
        print '    section=%s\n%s' % (section.name, section.text)