Index: third_party/xdg-utils/tests/doc_gen.pl |
=================================================================== |
--- third_party/xdg-utils/tests/doc_gen.pl (revision 0) |
+++ third_party/xdg-utils/tests/doc_gen.pl (revision 0) |
@@ -0,0 +1,164 @@ |
+#!perl |
+ |
+use Data::Dumper; |
+ |
+my @test_files = split('\s+',`ls generic/t.* xdg-*/t.*`); |
+ |
+my $cvs_pre = "http://webcvs.freedesktop.org/portland/portland/xdg-utils/tests/"; |
+my $cvs_post = '?view=markup'; |
+my $assert_doc = "assertions.html"; |
+my $now = scalar localtime; |
+my $style = "<style type=\"text/css\" media=\"all\">@import url(\"layout.css\");</style></head>\n"; |
+my $root_header = qq{| <a href="index.html">Tests</a> | <a href="$assert_doc">Assertions</a> | <a href="http://portland.freedesktop.org/wiki/WritingXdgTests">Overview</a> |<hr/>\n}; |
+my $group_header = qq{| <a href="../index.html">Tests</a> | <a href="../$assert_doc">Assertions</a> | <a href="http://portland.freedesktop.org/wiki/WritingXdgTests">Overview</a> |<hr/>\n}; |
+my $footer = "<hr><font size=\"-1\">xdg-utils test documentation generated $now</font>\n"; |
+ |
+my %fcns; |
+ |
+my %group; |
+my %shortdesc; |
+ |
+## Read assertion file |
+open IN, 'include/testassertions.sh' or die "Failed to open assertion file: $!\n"; |
+my $state = 'NULL'; |
+my %assertions; |
+while ( <IN> ) { |
+ if ( m/(\w+)\s*\(\)/ ) { |
+ $state = $1; |
+ $assertions{$state} = (); |
+ } |
+ elsif ( $state ne 'NULL' and m/^#(.*)/ ) { |
+ my $txt = $1; |
+ chomp $txt; |
+ push @{ $assertions{$state} }, $txt; |
+ } |
+ else { |
+ $state = 'NULL'; |
+ } |
+} |
+close IN; |
+ |
+if ( ! -d 'doc' ) { mkdir 'doc'; } |
+ |
+open OUT, ">doc/$assert_doc" or die "Failed to open $assert_doc: $!\n"; |
+print OUT "<html><head><title>xdg-utils test assertions</title>$style</head><body>\n$root_header"; |
+ |
+my @s_assert = sort keys %assertions ; |
+print OUT qq{<h2>Defined Assertions in <a href="$cvs_pre}.qq{include/testassertions.sh$cvs_post">include/testassertions.sh</a></h2>\n}; |
+for $a ( @s_assert ) { |
+ print OUT qq{<a href="#$a">$a</a><br>\n}; |
+} |
+for $a ( @s_assert ) { |
+ print OUT qq{<hr><h2><a name="$a">$a</a></h2>\n}; |
+ print OUT "<pre>", join("\n",@{ $assertions{$a} } ), "</pre>\n"; |
+} |
+print OUT "$footer</body></html>"; |
+ |
+ |
+## Read test files |
+for $f ( @test_files ) { |
+ open IN, $f or die "Failed to open $f: $!\n"; |
+ $f =~ m{(.+)/t\.(.+)}; |
+ my $dir = $1; |
+ my $test = $2; |
+ `mkdir -p doc/$dir`; |
+ my $o = "doc/$dir/$test.html"; |
+ |
+ push @{ $group{$dir} }, $test; |
+ |
+ open HTM, ">$o" or die "Failed to open '$o': $!\n"; |
+ print HTM "<html><head><title>xdg-utils test: $f</title>\n"; |
+ print HTM $style; |
+ |
+ print HTM "<body>$group_header<h1>Test: <a href=\"$cvs_pre$f$cvs_post\">$f</a></h1><hr/>\n"; |
+ my $fcn = ''; |
+ my $state = 'BEGIN'; |
+ while ( <IN> ) { |
+ #find the test function |
+ if ( m/(\w+)\s*\(\)/ ) { |
+ $fcn = $1; |
+ if (defined $fcns{$fcn} ){ |
+ print "WARNING in $f: $fcn already exists in $fcns{$fcn}!\n" |
+ } |
+ $fcns{$fcn} = $f; |
+ $state = 'FUNCTION'; |
+ } |
+ #find test_start |
+ elsif ( m/test_start (.*)/ ) { |
+ print HTM "<h2>Purpose of $fcn</h2>"; |
+ my $txt = $1; |
+ $txt =~ s/\$FUNCNAME:*\s*//; |
+ $txt =~ s/\"//g; |
+ $shortdesc{ $test } = $txt; |
+ print HTM "<p>$txt</p>\n"; |
+ $state = 'START'; |
+ } |
+ #find test_purpose |
+ elsif ( m/test_purpose (.*)/ ) { |
+ print HTM "<h2>Description</h2>"; |
+ my $txt = $1; |
+ $txt =~ s/\"//g; |
+ print HTM "<p>$txt</p>\n"; |
+ } |
+ #find initilization |
+ elsif ( m/test_init/ ) { |
+ print HTM "<h2>Depencencies</h2>\n"; |
+ $state = 'INIT'; |
+ next; |
+ } |
+ elsif ( m/test_procedure/ ) { |
+ print HTM "<h2>Test Procedure</h2>\n"; |
+ $state = 'TEST'; |
+ next; |
+ } |
+ elsif ( m/test_note (.*)/ ) { |
+ print HTM "<h2>Note</h2><p>$1</p>\n"; |
+ next; |
+ } |
+ elsif ( m/test_result/ ) { |
+ $state = 'DONE'; |
+ } |
+ if ( m/^#/ ) { |
+ next; |
+ } |
+ if ( $state eq 'INIT' or $state eq 'TEST' ) { |
+ $line = $_; |
+ $line =~ s/^\s*(\w+)/<a href="\.\.\/$assert_doc#$1">$1<\/a>/; |
+ if ( $assertions{$1} ) { |
+ print HTM "<p>$line</p>\n"; |
+ #print "$f:\t'$1' found\n"; |
+ } |
+ else { |
+ #print "$f:\t'$1' not found\n"; |
+ print HTM "<p>$_</p>\n"; |
+ } |
+ #print HTM "<p>$_</p>\n"; |
+ } |
+ } |
+ print HTM "$footer</body></html>\n"; |
+ close HTM; |
+ close IN; |
+} |
+ |
+open INDEX, ">doc/index.html" or die "Could not open index: $!"; |
+print INDEX "<html><head><title>xdg-utils test suite</title>\n"; |
+print INDEX $style; |
+ |
+print INDEX "<body>$root_header<h1>xdg-utils test documentation</h1>"; |
+ |
+my @s_groups = sort keys %group; |
+ |
+for $g ( @s_groups ) { |
+ print INDEX qq{<a href="#$g">$g</a> \n}; |
+} |
+print INDEX "<table border=0>\n"; |
+for $k ( @s_groups ) { |
+ print INDEX qq{<tr><td colspan=2><hr><h2><a name="$k">$k</a></h2></td></tr>\n}; |
+ for $i ( @{ $group{$k} } ) { |
+ print INDEX "<tr><td><a href=\"$k/$i.html\">$i</a></td><td>$shortdesc{$i}</td></tr>\n"; |
+ } |
+} |
+print INDEX "</table>$footer</body></html>\n"; |
+close INDEX; |
+ |
+#print Dumper keys %assertions; |
Property changes on: third_party/xdg-utils/tests/doc_gen.pl |
___________________________________________________________________ |
Name: svn:executable |
+ * |