| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/perl -w | |
| 2 # | |
| 3 # Copyright (c) International Business Machines Corp., 2002 | |
| 4 # | |
| 5 # This program is free software; you can redistribute it and/or modify | |
| 6 # it under the terms of the GNU General Public License as published by | |
| 7 # the Free Software Foundation; either version 2 of the License, or (at | |
| 8 # your option) any later version. | |
| 9 # | |
| 10 # This program is distributed in the hope that it will be useful, but | |
| 11 # WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 # General Public License for more details. | |
| 14 # | |
| 15 # You should have received a copy of the GNU General Public License | |
| 16 # along with this program; if not, write to the Free Software | |
| 17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 18 # | |
| 19 # | |
| 20 # gendesc | |
| 21 # | |
| 22 # This script creates a description file as understood by genhtml. | |
| 23 # Input file format: | |
| 24 # | |
| 25 # For each test case: | |
| 26 # <test name><optional whitespace> | |
| 27 # <at least one whitespace character (blank/tab)><test description> | |
| 28 # | |
| 29 # Actual description may consist of several lines. By default, output is | |
| 30 # written to stdout. Test names consist of alphanumeric characters | |
| 31 # including _ and -. | |
| 32 # | |
| 33 # | |
| 34 # History: | |
| 35 # 2002-09-02: created by Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com> | |
| 36 # | |
| 37 | |
| 38 use strict; | |
| 39 use File::Basename; | |
| 40 use Getopt::Long; | |
| 41 | |
| 42 | |
| 43 # Constants | |
| 44 our $lcov_version = 'LCOV version 1.9'; | |
| 45 our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php"; | |
| 46 our $tool_name = basename($0); | |
| 47 | |
| 48 | |
| 49 # Prototypes | |
| 50 sub print_usage(*); | |
| 51 sub gen_desc(); | |
| 52 sub warn_handler($); | |
| 53 sub die_handler($); | |
| 54 | |
| 55 | |
| 56 # Global variables | |
| 57 our $help; | |
| 58 our $version; | |
| 59 our $output_filename; | |
| 60 our $input_filename; | |
| 61 | |
| 62 | |
| 63 # | |
| 64 # Code entry point | |
| 65 # | |
| 66 | |
| 67 $SIG{__WARN__} = \&warn_handler; | |
| 68 $SIG{__DIE__} = \&die_handler; | |
| 69 | |
| 70 # Prettify version string | |
| 71 $lcov_version =~ s/\$\s*Revision\s*:?\s*(\S+)\s*\$/$1/; | |
| 72 | |
| 73 # Parse command line options | |
| 74 if (!GetOptions("output-filename=s" => \$output_filename, | |
| 75 "version" =>\$version, | |
| 76 "help|?" => \$help | |
| 77 )) | |
| 78 { | |
| 79 print(STDERR "Use $tool_name --help to get usage information\n"); | |
| 80 exit(1); | |
| 81 } | |
| 82 | |
| 83 $input_filename = $ARGV[0]; | |
| 84 | |
| 85 # Check for help option | |
| 86 if ($help) | |
| 87 { | |
| 88 print_usage(*STDOUT); | |
| 89 exit(0); | |
| 90 } | |
| 91 | |
| 92 # Check for version option | |
| 93 if ($version) | |
| 94 { | |
| 95 print("$tool_name: $lcov_version\n"); | |
| 96 exit(0); | |
| 97 } | |
| 98 | |
| 99 | |
| 100 # Check for input filename | |
| 101 if (!$input_filename) | |
| 102 { | |
| 103 die("No input filename specified\n". | |
| 104 "Use $tool_name --help to get usage information\n"); | |
| 105 } | |
| 106 | |
| 107 # Do something | |
| 108 gen_desc(); | |
| 109 | |
| 110 | |
| 111 # | |
| 112 # print_usage(handle) | |
| 113 # | |
| 114 # Write out command line usage information to given filehandle. | |
| 115 # | |
| 116 | |
| 117 sub print_usage(*) | |
| 118 { | |
| 119 local *HANDLE = $_[0]; | |
| 120 | |
| 121 print(HANDLE <<END_OF_USAGE) | |
| 122 Usage: $tool_name [OPTIONS] INPUTFILE | |
| 123 | |
| 124 Convert a test case description file into a format as understood by genhtml. | |
| 125 | |
| 126 -h, --help Print this help, then exit | |
| 127 -v, --version Print version number, then exit | |
| 128 -o, --output-filename FILENAME Write description to FILENAME | |
| 129 | |
| 130 For more information see: $lcov_url | |
| 131 END_OF_USAGE | |
| 132 ; | |
| 133 } | |
| 134 | |
| 135 | |
| 136 # | |
| 137 # gen_desc() | |
| 138 # | |
| 139 # Read text file INPUT_FILENAME and convert the contained description to a | |
| 140 # format as understood by genhtml, i.e. | |
| 141 # | |
| 142 # TN:<test name> | |
| 143 # TD:<test description> | |
| 144 # | |
| 145 # If defined, write output to OUTPUT_FILENAME, otherwise to stdout. | |
| 146 # | |
| 147 # Die on error. | |
| 148 # | |
| 149 | |
| 150 sub gen_desc() | |
| 151 { | |
| 152 local *INPUT_HANDLE; | |
| 153 local *OUTPUT_HANDLE; | |
| 154 my $empty_line = "ignore"; | |
| 155 | |
| 156 open(INPUT_HANDLE, $input_filename) | |
| 157 or die("ERROR: cannot open $input_filename!\n"); | |
| 158 | |
| 159 # Open output file for writing | |
| 160 if ($output_filename) | |
| 161 { | |
| 162 open(OUTPUT_HANDLE, ">$output_filename") | |
| 163 or die("ERROR: cannot create $output_filename!\n"); | |
| 164 } | |
| 165 else | |
| 166 { | |
| 167 *OUTPUT_HANDLE = *STDOUT; | |
| 168 } | |
| 169 | |
| 170 # Process all lines in input file | |
| 171 while (<INPUT_HANDLE>) | |
| 172 { | |
| 173 chomp($_); | |
| 174 | |
| 175 if (/^(\w[\w-]*)(\s*)$/) | |
| 176 { | |
| 177 # Matched test name | |
| 178 # Name starts with alphanum or _, continues with | |
| 179 # alphanum, _ or - | |
| 180 print(OUTPUT_HANDLE "TN: $1\n"); | |
| 181 $empty_line = "ignore"; | |
| 182 } | |
| 183 elsif (/^(\s+)(\S.*?)\s*$/) | |
| 184 { | |
| 185 # Matched test description | |
| 186 if ($empty_line eq "insert") | |
| 187 { | |
| 188 # Write preserved empty line | |
| 189 print(OUTPUT_HANDLE "TD: \n"); | |
| 190 } | |
| 191 print(OUTPUT_HANDLE "TD: $2\n"); | |
| 192 $empty_line = "observe"; | |
| 193 } | |
| 194 elsif (/^\s*$/) | |
| 195 { | |
| 196 # Matched empty line to preserve paragraph separation | |
| 197 # inside description text | |
| 198 if ($empty_line eq "observe") | |
| 199 { | |
| 200 $empty_line = "insert"; | |
| 201 } | |
| 202 } | |
| 203 } | |
| 204 | |
| 205 # Close output file if defined | |
| 206 if ($output_filename) | |
| 207 { | |
| 208 close(OUTPUT_HANDLE); | |
| 209 } | |
| 210 | |
| 211 close(INPUT_HANDLE); | |
| 212 } | |
| 213 | |
| 214 sub warn_handler($) | |
| 215 { | |
| 216 my ($msg) = @_; | |
| 217 | |
| 218 warn("$tool_name: $msg"); | |
| 219 } | |
| 220 | |
| 221 sub die_handler($) | |
| 222 { | |
| 223 my ($msg) = @_; | |
| 224 | |
| 225 die("$tool_name: $msg"); | |
| 226 } | |
| OLD | NEW |