f69a4d325b152f0ae66d12cd6d105878ff5a2d04
[platform/core/uifw/dali-toolkit.git] / automated-tests / tbp.pl
1 #!/usr/bin/perl
2
3 use strict;
4
5 my $num;
6 my $scen;
7 my $ref;
8 my $part;
9 my $timestamp;
10 my $testcase;
11 my $built=0;
12 my $build_failed=0;
13 my $build_count=0;
14 my $build_failure_count=0;
15 my $ic=0;
16 my $ic2=0;
17 my $x=0;
18 my $tc=0;
19 my $v;
20 my $test;
21 my $time;
22 my $date;
23 my %build_tests;
24 my %build_summary;
25
26 my $executed_testcases=0;
27 my $execute_no_file=0;
28 my $executed=0;
29 my %execute;
30 my %execute_summary;
31
32 sub parse_file
33 {
34     while(<>)
35     {
36         ($num, $scen, $ref) = split(m!\|!, $_);
37         chomp $ref;
38
39         if($num == 0)
40         {
41             ($v, $time, $date) = split(/\s/, $scen);
42         }
43 # Execution
44         elsif($num == 10) # 10|0 /dali-test-suite/actors/utc-Dali-Actor 16:58:27|TC Start, scenario ref 2-0
45         {
46             ($part, $testcase, $timestamp) = split(/\s/, $scen);
47             $executed_testcases++;
48         }
49         elsif($num == 50) # 50||(exec.c, 131): can't exec /home/SERILOCAL/david.steele/Git/HQ-Dali/dali-core/automated-tests/./tet_tmp_dir/24242aa/dali-test-suite/geometry/utc-Dali-MeshData, reply code = ER_NOENT
50         {
51             $execute_no_file++;
52         }
53         elsif($num == 80) # 80|19 0 16:58:47|TC End, scenario ref 21-0
54         {
55         }
56         elsif($num == 400) #400|13 1 142 16:58:40|IC Start
57         {
58             ($test, $ic, $x, $timestamp) = split(/\s/, $scen);
59         }
60         elsif($num == 410) #410|19 1 9 16:58:46|IC End
61         {
62         }
63         elsif($num == 200) #200|13 1 16:58:40|TP Start
64         {
65             $execute_summary{"Total"}++;
66         }
67         elsif($num == 220)
68         {
69             ($test, $tc, $ic2, $timestamp) = split(/\s/, $scen);
70             $execute{$testcase}->{$ic}->{$tc} = $ref;
71             $execute_summary{$ref}++;
72             $executed++;
73         }
74
75 # Build
76         elsif($num == 110) # Build
77         {
78             ($part, $testcase, $timestamp) = split(/\s/, $scen);
79             $build_failed=0;
80             $build_count++;
81             $build_summary{"Total"}++;
82         }
83
84         elsif($num == 100)
85         {
86             if( ( $ref =~ /utc-/ && $ref =~ m!error!i )
87                 ||
88                 ($ref =~ /^Makefile/ && $ref =~ m!Stop!i )
89                 ||
90                 ($ref =~ /^make/ && ($ref =~ m!Stop!i || $ref =~ m!Error 1! ) ) )
91             {
92                 $build_failed = 1;
93             }
94         }
95
96         elsif($num == 130)
97         {
98             if($build_failed)
99             {
100                 $build_failure_count++;
101                 $build_summary{"Failure"}++;
102             }
103             else
104             {
105                 $build_summary{"Success"}++;
106             }
107             $build_tests{$testcase} = !$build_failed;
108         }
109     }
110     $built = $build_count - $build_failure_count;
111 }
112
113
114 sub heading
115 {
116     print <<EOH;
117 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
118 "http://www.w3.org/TR/REC-html40/loose.dtd">
119 <html>
120 <head>
121 <title>TETware Test Run Report</title>
122 </head>
123 <body bgcolor="white">
124 <p><table border="1" width="100%" cellpadding="3" cellspacing="0">
125 <tr><td bgcolor="#ccccff" class="heading1"><center><h1>
126 TETware Test Run Report</h1></center></td></tr></table></p>
127 <p><table border="0" cellpadding="2" cellspacing="1">
128 <tr>
129 <td align="left" class="noborder">Date of test run:</td>
130 <td align="left" class="noborder">$date</td>
131 </tr>
132 <tr>
133 <td align="left" class="noborder">Start time:</td>
134 <td align="left" class="noborder">$time</td>
135 </tr>
136 </table></p>
137 <hr>
138 EOH
139 }
140
141 sub summary
142 {
143     my $heading = shift;
144     my $summary_ref = shift;
145
146     print <<EOS1;
147     <p><table border="1" cellpadding="3" cellspacing="0">
148         <tr><td bgcolor="#ccccff" class="heading2"><font size="+2"><b>$heading</b></font></td></tr>
149         </table></p>
150     <p><table border="0" cellpadding="5" cellspacing="4">
151         <tr>
152         <td align="center" bgcolor="#cccccc" class="neutral"><b>Result</b></td>
153         <td align="center" bgcolor="#cccccc" class="neutral"><b>Count</b></td>
154         </tr>
155 EOS1
156
157     my ($success_string, @blah) = grep(/(Success|PASS)/, keys(%$summary_ref));
158     my $successes = $summary_ref->{$success_string};
159     print <<EOS2;
160     <tr>
161         <td align="left" bgcolor="#33cc33" class="success">$success_string</td>
162         <td align="right" bgcolor="#33cc33" class="success">$successes</td>
163     </tr>
164 EOS2
165
166     foreach my $key (sort(grep(!/(Success|PASS|Total)/, keys(%$summary_ref))))
167     {
168         my $fails = $summary_ref->{$key};
169         print <<EOS3;
170         <tr>
171             <td align="left" bgcolor="#ff5555" class="failure">$key</td>
172             <td align="right" bgcolor="#ff5555" class="failure">$fails</td>
173         </tr>
174 EOS3
175     }
176
177     my $total = $summary_ref->{"Total"};
178     print <<EOS4;
179     <tr>
180         <td align="left" bgcolor="#cccccc" class="neutral"><b>Total</b></td>
181         <td align="right" bgcolor="#cccccc" class="neutral"><b>$total</b></td>
182     </tr>
183     </table></p>
184 EOS4
185 }
186
187
188 sub build_breakdown
189 {
190     print <<EOB;
191 <hr>
192 <p><table border="1" cellpadding="3" cellspacing="0">
193 <tr><td bgcolor="#ccccff" class="heading2"><font size="+2"><b>
194 Build mode result breakdown</b></font></td></tr></table></p>
195 <p><table border="0" cellpadding="5" cellspacing="4">
196 <tr>
197 <td align="center" bgcolor="#cccccc" class="neutral"><b>Testcase</b></td>
198 <td align="center" bgcolor="#cccccc" class="neutral"><b>Result</b></td>
199 </tr>
200 EOB
201
202     foreach my $key (sort(keys(%build_tests)))
203     {
204         my $success = $build_tests{$key};
205         my $class = $success?"success":"failure";
206         my $Class = $success?"Success":"Failure";
207         my $color = $success?"#33cc33":"#ff5555";
208         print("<tr><td align=\"left\" bgcolor=\"$color\" class=\"$class\">$key</td>\n");
209         print("<td align=\"left\" bgcolor=\"$color\" class=\"$class\">$Class</td>\n");
210     }
211     print("</table><p>");
212 }
213
214
215 sub execute_breakdown
216 {
217     print <<EOE;
218 <hr>
219 <p><table border="1" cellpadding="3" cellspacing="0">
220 <tr><td bgcolor="#ccccff" class="heading2"><font size="+2"><b>
221 Execute mode result breakdown</b></font></td></tr></table></p>
222 EOE
223
224     #Constructed with:
225     #$execute{$testcase}->{$ic}->{$tc} = $ref;
226
227     my %results;
228     foreach my $testcase (sort(keys(%execute)))
229     {
230         #print STDOUT "$testcase\n";
231         foreach my $ic (sort(keys(%{$execute{$testcase}})))
232         {
233             my $ic_ref = $execute{$testcase}->{$ic};
234             foreach my $tc (sort { $a <=> $b } (keys(%{$ic_ref})))
235             {
236                 my $result = $execute{$testcase}->{$ic}->{$tc};
237                 chomp($result);
238                 $results{$result}->{$testcase} .= ", $ic.$tc";
239                 #print STDOUT "$testcase $ic.$tc $result\n";
240                 #print STDOUT "STRUCT:" . "\$results\{" . $result . "\}->\{$testcase\} => " . $results{$result}->{$testcase} . "\n";
241             }
242         }
243     }
244
245     foreach my $result ( "PASS", (sort(grep(!/PASS/, keys(%results)))))
246     {
247         print "<h3>$result</h3>\n";
248         print <<EOE2;
249         <p><table border="0" cellpadding="5" cellspacing="4">
250             <tr>
251             <td align="center" bgcolor="#cccccc" class="neutral"><b>Testcase</b></td>
252             <td align="center" bgcolor="#cccccc" class="neutral"><b>Test purposes (IC.TP)</b></td>
253        </tr>
254 EOE2
255
256        my $bgcolor = "#ff5555";
257        if ($result =~ /PASS/)
258        {
259            $bgcolor = "#33cc33";
260        }
261
262         #print STDOUT "Result: $result OUT:" . $results{$result} . "\n";
263        foreach my $testcase (sort(keys(%{$results{$result}})))
264        {
265            #print STDOUT "$testcase\n";
266            my $tests = substr($results{$result}->{$testcase}, 2);
267            print <<EOE3;
268                <tr>
269                <td align="left" bgcolor=$bgcolor class=$result>$testcase</td>
270                <td align="left" bgcolor=$bgcolor class=$result>$tests</td>
271                </tr>
272 EOE3
273        }
274        print "</table>";
275     }
276 }
277
278
279 sub footer
280 {
281     print "<hr>\n</body>\n</html>\n";
282 }
283
284 sub report
285 {
286     my $file = shift;
287     open(my $fh, ">", $file) || die "Can't create $file";
288     select $fh;
289     heading;
290
291     if($build_count)
292     {
293         summary("Build mode summary", \%build_summary);
294         build_breakdown;
295     }
296     if(scalar(keys(%execute)))
297     {
298         summary("Execute mode summary", \%execute_summary);
299         execute_breakdown;
300     }
301     footer;
302     select STDOUT;
303     close $fh;
304 }
305
306
307 ## MAIN
308
309 die "No args"  if scalar(@ARGV) == 0;
310 my $htmlname = $ARGV[0];
311 $htmlname =~ s/.journal/.html/;
312
313 parse_file();
314 report($htmlname);
315
316
317 if($build_count)
318 {
319     foreach my $key (sort(keys(%build_tests)))
320     {
321         if(!$build_tests{$key})
322         {
323             print STDOUT "$key: Failed\n";
324         }
325     }
326     print STDOUT "Built $built of $build_count\n";
327 }
328
329 if($executed)
330 {
331     my $num_exes=$executed_testcases-$execute_no_file;
332     print STDOUT "Executed $num_exes of $executed_testcases testcases\n";
333     my $passed = $execute_summary{"PASS"};
334     my $total = $execute_summary{"Total"};
335     my $passRate = ($num_exes / $executed_testcases ) * ( $passed / $total )*100;
336     print STDOUT "Passed $passed of $total - Pass rate=" . sprintf("%4.1f%%", $passRate) ."\n";
337 }
338
339 print "Report output: $htmlname\n";