Ejemplo n.º 1
0
def ReportCommand(argv):
    parser = optparse.OptionParser(
        description=(
            'Read in one or more DejaGNU summary files (.sum), parse their '
            'content and generate a single report file in selected format '
            '(currently only HTML).'),
        usage=('Usage: %prog report (-m manifest.xfail) [-o report.html] '
               '[file.sum (file2.sum ...)'))
    parser.add_option(
        '-o',
        dest='output',
        type='string',
        default=None,
        help=('Suppress failures for test listed in provided manifest files. '
              '(use -m for each manifest file you want to read)'))
    parser.add_option(
        '-m',
        dest='manifests',
        type='string',
        action='append',
        default=None,
        help=('Suppress failures for test listed in provided manifest files. '
              '(use -m for each manifest file you want to read)'))

    opts, args = parser.parse_args(argv[2:])

    with OptionChecker(parser):
        if not args:
            sys.exit('At least one *.sum file required.')

        if not opts.output:
            sys.exit('Please provide name for report file.')

    manifests = []

    for filename in ExpandGlobExprList(opts.manifests or []):
        logging.info('Using "%s" manifest.', filename)
        manifests.append(Manifest.FromFile(filename))

    test_runs = [
        DejaGnuTestRun.FromFile(filename)
        for filename in chain.from_iterable(map(glob.glob, args))
    ]

    html = report.Generate(test_runs, manifests)

    if html:
        with open(opts.output, 'w') as html_file:
            html_file.write(html)
            logging.info('Wrote report to "%s" file.', opts.output)
    else:
        sys.exit(1)