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 |