| 
									
										
										
										
											2017-04-05 10:31:03 +02:00
										 |  |  | #!/usr/bin/perl -w | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Copyright (C) 2017 The Qt Company Ltd. | 
					
						
							| 
									
										
										
										
											2023-01-04 08:52:22 +01:00
										 |  |  | # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 | 
					
						
							| 
									
										
										
										
											2017-04-05 10:31:03 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | perltest2tasks.pl - Convert messages of the Perl module Test::More into Qt Creator task files. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     perltest2tasks.pl < logfile > taskfile | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =cut | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use strict; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | my $lineNumber = 1; | 
					
						
							|  |  |  | my $type = 'err'; | 
					
						
							|  |  |  | my $slash = index($^O, 'MSWin') < 0 ? '/' : "\\"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | my $text; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # The format is: | 
					
						
							|  |  |  | # "ok <number> - message" | 
					
						
							|  |  |  | # "not ok <number> - message" | 
					
						
							|  |  |  | # "# message line 2" (Continuation line) | 
					
						
							|  |  |  | # The message is free format, the script tries to find a file name in it by | 
					
						
							|  |  |  | # checking for a slash. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | sub printPendingMessage | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return unless defined $text; | 
					
						
							|  |  |  |     # Try to extract the file name from the message with some heuristics | 
					
						
							|  |  |  |     my $fileName; | 
					
						
							|  |  |  |     for my $word (split(/\s+/,  $text)) { | 
					
						
							|  |  |  |         if (index($word, $slash) >= 0) { | 
					
						
							|  |  |  |             $fileName = $word; | 
					
						
							|  |  |  |             last; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     print $fileName, "\t", $lineNumber, "\t", $type, "\t", $text,"\n" if defined $fileName; | 
					
						
							|  |  |  |     $text = undef; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | while (my $line = <STDIN> ) { | 
					
						
							|  |  |  |     chomp($line); | 
					
						
							|  |  |  |     if (index($line, '#') == 0) { # Continuation line | 
					
						
							|  |  |  |         $line =~ s/^#\s+//; | 
					
						
							|  |  |  |         $text .= ' ' . $line if defined($text); | 
					
						
							|  |  |  |     } elsif ($line =~ /^ok\s/) { # Passed test, flush message | 
					
						
							|  |  |  |         printPendingMessage(); | 
					
						
							|  |  |  |     } elsif ($line =~ /^not ok\s+\d+\s-\s+(.*)$/) { # Failed test, flush message and start over | 
					
						
							|  |  |  |         printPendingMessage(); | 
					
						
							|  |  |  |         $text = $1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | printPendingMessage(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |