123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- #!/usr/bin/perl -w
- #
- # Copyright (c) International Business Machines Corp., 2002
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or (at
- # your option) any later version.
- #
- # This program is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- # General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- #
- #
- # gendesc
- #
- # This script creates a description file as understood by genhtml.
- # Input file format:
- #
- # For each test case:
- # <test name><optional whitespace>
- # <at least one whitespace character (blank/tab)><test description>
- #
- # Actual description may consist of several lines. By default, output is
- # written to stdout. Test names consist of alphanumeric characters
- # including _ and -.
- #
- #
- # History:
- # 2002-09-02: created by Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com>
- #
- use strict;
- use File::Basename;
- use Getopt::Long;
- # Constants
- our $lcov_version = 'LCOV version 1.10';
- our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
- our $tool_name = basename($0);
- # Prototypes
- sub print_usage(*);
- sub gen_desc();
- sub warn_handler($);
- sub die_handler($);
- # Global variables
- our $help;
- our $version;
- our $output_filename;
- our $input_filename;
- #
- # Code entry point
- #
- $SIG{__WARN__} = \&warn_handler;
- $SIG{__DIE__} = \&die_handler;
- # Prettify version string
- $lcov_version =~ s/\$\s*Revision\s*:?\s*(\S+)\s*\$/$1/;
- # Parse command line options
- if (!GetOptions("output-filename=s" => \$output_filename,
- "version" =>\$version,
- "help|?" => \$help
- ))
- {
- print(STDERR "Use $tool_name --help to get usage information\n");
- exit(1);
- }
- $input_filename = $ARGV[0];
- # Check for help option
- if ($help)
- {
- print_usage(*STDOUT);
- exit(0);
- }
- # Check for version option
- if ($version)
- {
- print("$tool_name: $lcov_version\n");
- exit(0);
- }
- # Check for input filename
- if (!$input_filename)
- {
- die("No input filename specified\n".
- "Use $tool_name --help to get usage information\n");
- }
- # Do something
- gen_desc();
- #
- # print_usage(handle)
- #
- # Write out command line usage information to given filehandle.
- #
- sub print_usage(*)
- {
- local *HANDLE = $_[0];
- print(HANDLE <<END_OF_USAGE)
- Usage: $tool_name [OPTIONS] INPUTFILE
- Convert a test case description file into a format as understood by genhtml.
- -h, --help Print this help, then exit
- -v, --version Print version number, then exit
- -o, --output-filename FILENAME Write description to FILENAME
- For more information see: $lcov_url
- END_OF_USAGE
- ;
- }
- #
- # gen_desc()
- #
- # Read text file INPUT_FILENAME and convert the contained description to a
- # format as understood by genhtml, i.e.
- #
- # TN:<test name>
- # TD:<test description>
- #
- # If defined, write output to OUTPUT_FILENAME, otherwise to stdout.
- #
- # Die on error.
- #
- sub gen_desc()
- {
- local *INPUT_HANDLE;
- local *OUTPUT_HANDLE;
- my $empty_line = "ignore";
- open(INPUT_HANDLE, "<", $input_filename)
- or die("ERROR: cannot open $input_filename!\n");
- # Open output file for writing
- if ($output_filename)
- {
- open(OUTPUT_HANDLE, ">", $output_filename)
- or die("ERROR: cannot create $output_filename!\n");
- }
- else
- {
- *OUTPUT_HANDLE = *STDOUT;
- }
- # Process all lines in input file
- while (<INPUT_HANDLE>)
- {
- chomp($_);
- if (/^(\w[\w-]*)(\s*)$/)
- {
- # Matched test name
- # Name starts with alphanum or _, continues with
- # alphanum, _ or -
- print(OUTPUT_HANDLE "TN: $1\n");
- $empty_line = "ignore";
- }
- elsif (/^(\s+)(\S.*?)\s*$/)
- {
- # Matched test description
- if ($empty_line eq "insert")
- {
- # Write preserved empty line
- print(OUTPUT_HANDLE "TD: \n");
- }
- print(OUTPUT_HANDLE "TD: $2\n");
- $empty_line = "observe";
- }
- elsif (/^\s*$/)
- {
- # Matched empty line to preserve paragraph separation
- # inside description text
- if ($empty_line eq "observe")
- {
- $empty_line = "insert";
- }
- }
- }
- # Close output file if defined
- if ($output_filename)
- {
- close(OUTPUT_HANDLE);
- }
- close(INPUT_HANDLE);
- }
- sub warn_handler($)
- {
- my ($msg) = @_;
- warn("$tool_name: $msg");
- }
- sub die_handler($)
- {
- my ($msg) = @_;
- die("$tool_name: $msg");
- }
|