[cairo-commit] test/cairo-test.c test/Makefile.am test/make-html.pl
Behdad Esfahbod
behdad at kemper.freedesktop.org
Thu Jul 13 08:27:14 PDT 2006
test/Makefile.am | 27 +++++++++++++++++++--------
test/cairo-test.c | 16 ++++++++--------
test/make-html.pl | 49 ++++++++++++++++++++++++++++---------------------
3 files changed, 55 insertions(+), 37 deletions(-)
New commits:
diff-tree 0ac2bbbf52737b2e368de269651c56dab90c928a (from f79a9f5a5259f33284d5e63ef2ddac0be4ea7d41)
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Thu Jul 13 11:27:05 2006 -0400
Improve test HTML generation:
- Make "make retest" not generate all .log files.
- Format improvements in the generated HTML file.
diff --git a/test/Makefile.am b/test/Makefile.am
index c96f7a7..f5d4f44 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -481,26 +481,37 @@ CLEANFILES = \
check-valgrind:
$(MAKE) check TESTS_ENVIRONMENT='$(TESTS_ENVIRONMENT) $(top_srcdir)/libtool --mode=execute valgrind --tool=memcheck --suppressions=./.valgrind-suppressions --leak-check=yes --show-reachable=yes' 2>&1 | tee valgrind-log
+# The following definitions both should work.
+#FAILED_TESTS = `grep -l '\<FAIL\>' $(TESTS:=.log) | sed -e 's/[.]log$$//' | xargs echo`
+FAILED_TESTS = `grep -l '\<FAIL\>' $(TESTS:=.log) | tr '\n' ' ' | sed -e 's/[.]log */ /g; s/^ //; s/ $$//'`
+
+recheck = check TESTS="$(FAILED_TESTS)"
+
# Re-checks all failed tests, i.e. tests with a log file that has a failure
recheck:
@echo Re-checking failed tests
- @$(MAKE) check TESTS="`grep -l '\<FAIL\>' *.log | sed 's/[.]log$$//' | tr '\n' ' '`"
+ @$(MAKE) $(recheck)
# Checks tests and creates index.html.
# Target doesn't fail if tests fail.
test:
- @-$(MAKE) check
- @$(MAKE) html
+ @$(MAKE) check; \
+ $(MAKE) html
# Re-checks tests and creates index.html.
# Target doesn't fail if tests fail.
retest:
- @-$(MAKE) recheck
- @$(MAKE) html
+ @TESTS="$(FAILED_TESTS)"; \
+ $(MAKE) TESTS="$$TESTS" check; \
+ $(MAKE) TESTS="$$TESTS" html
# Make index.html
html: index.html
+# Make index.html containing only the failed tests.
+rehtml:
+ @$(MAKE) TESTS="$(FAILED_TESTS)" html
+
$(TESTS): $(SUPPORT_PROGS)
@@ -512,8 +523,8 @@ NOLOG_TESTS_LOG = $(NOLOG_TESTS:=.log)
$(NOLOG_TESTS_LOG):
echo dummy > $@
-index.html: $(TESTS:=.log)
+index.html: $(srcdir)/make-html.pl $(TESTS:=.log)
@echo Creating index.html
- @perl $(srcdir)/make-html.pl > index.html
+ @perl $^ > index.html
-.PHONY: check-valgrind test recheck retest html
+.PHONY: check-valgrind test recheck retest html rehtml
diff --git a/test/cairo-test.c b/test/cairo-test.c
index 8b4ae11..94d3b1e 100644
--- a/test/cairo-test.c
+++ b/test/cairo-test.c
@@ -1799,7 +1799,7 @@ cairo_test_expecting (cairo_test_t *test
while (*tname) {
int found = 0;
- char *end = strpbrk (tname, " \t\r\n;:,");
+ const char *end = strpbrk (tname, " \t\r\n;:,");
if (!end)
end = tname + strlen (tname);
@@ -1814,8 +1814,7 @@ cairo_test_expecting (cairo_test_t *test
}
if (!found) {
- *end = '\0';
- fprintf (stderr, "Cannot test target '%s'\n", tname);
+ fprintf (stderr, "Cannot test target '%.*s'\n", end - tname, tname);
exit(-1);
}
@@ -1935,21 +1934,22 @@ cairo_test_status_t
cairo_test (cairo_test_t *test)
{
cairo_test_status_t expectation = CAIRO_TEST_SUCCESS;
- char *xfails;
+ const char *xfails;
if ((xfails = getenv ("CAIRO_XFAIL_TESTS")) != NULL) {
while (*xfails) {
- char *end = strpbrk (xfails, " \t\r\n;:,");
+ const char *end = strpbrk (xfails, " \t\r\n;:,");
if (!end)
end = xfails + strlen (xfails);
- else
- *end++ = '\0';
- if (0 == strcmp (test->name, xfails)) {
+ if (0 == strncmp (test->name, xfails, end - xfails) &&
+ '\0' == test->name[end - xfails]) {
expectation = CAIRO_TEST_FAILURE;
break;
}
+ if (*end)
+ end++;
xfails = end;
}
}
diff --git a/test/make-html.pl b/test/make-html.pl
index 8b34e12..7af9dcd 100755
--- a/test/make-html.pl
+++ b/test/make-html.pl
@@ -25,8 +25,9 @@
#
##
-## Takes all the *.log files in the current directory and spits out
-## html to stdout that can be used to view all the test results at once.
+## Takes all the *.log files in the current directory (or those provided
+## on the command line) and spits out html to stdout that can be used to
+## view all the test results at once.
##
# show reference images
@@ -53,7 +54,7 @@ foreach (<*.log>) {
$tests->{$1}->{$2}->{$3} = {} unless $tests->{$1}->{$2}->{$3};
$tests->{$1}->{$2}->{$3}->{$4} = $5;
- $teststats->{$2} = {"PASS" => 0, "FAIL" => 0, "XFAIL" => 0, "UNTESTED" => 0}
+ $teststats->{$2} = {"PASS" => 0, "FAIL" => 0, "XFAIL" => 0, "UNTESTED" => 0, "CRASHED" =>0}
unless $teststats->{$2};
($teststats->{$2}->{$5})++;
}
@@ -92,16 +93,18 @@ sub printl {
printl '<html><head>';
printl '<title>Cairo Test Results</title>';
printl '<style type="text/css">';
-printl 'a img { border: none; }';
-printl '.PASS { background-color: #009900; min-width: 1em; }';
-printl '.FAIL { background-color: #990000; }';
-printl '.XFAIL { background-color: #999900; }';
-printl '.UNTESTED { background-color: #333333; }';
-printl '.PASSstr { color: #009900; }';
-printl '.FAILstr { color: #990000; }';
-printl '.XFAILstr { color: #999900; }';
-printl '.UNTESTEDstr { color: #333333; }';
-printl 'img { max-width: 15em; min-width: 3em; }';
+printl 'a img { border: solid 1px #FFF; }';
+printl '.PASS { background-color: #0D0; min-width: 1em; }';
+printl '.FAIL { background-color: #D00; }';
+printl '.XFAIL { background-color: #DD0; }';
+printl '.UNTESTED { background-color: #666; }';
+printl '.CRASHED { background-color: #F00; color: #FF0; }';
+printl '.PASSstr { color: #0D0; }';
+printl '.FAILstr { color: #E00; }';
+printl '.XFAILstr { color: #DD0; }';
+printl '.CRASHEDstr { color: #F00; }';
+printl '.UNTESTEDstr { color: #666; }';
+printl 'img { max-width: 15em; min-width: 3em; margin: 3px; }';
printl 'td { vertical-align: top; }';
printl '</style>';
printl '<body>';
@@ -121,7 +124,7 @@ print '<td></td>' if $config_show_ref;
foreach my $target (@targets) {
print '<td>';
print '<span class="PASSstr">', $teststats->{$target}->{"PASS"}, '</span>/';
- print '<span class="FAILstr">', $teststats->{$target}->{"FAIL"}, '</span>/';
+ print '<span class="FAILstr">', $teststats->{$target}->{"FAIL"} + $teststats->{$target}->{"CRASHED"}, '</span>/';
print '<span class="XFAILstr">', $teststats->{$target}->{"XFAIL"}, '</span>/';
print '<span class="UNTESTEDstr">', $teststats->{$target}->{"UNTESTED"}; '</span>';
print '</td>';
@@ -160,8 +163,6 @@ foreach my $test (sort(keys %$tests)) {
foreach my $format (@formats) {
my $testline = "";
- my $num_failed = 0;
-
foreach my $target (@targets) {
my $tgtdata = $tests->{$test}->{$target};
if ($tgtdata) {
@@ -175,21 +176,27 @@ foreach my $test (sort(keys %$tests)) {
$testline .= "<a href=\"" . $testfiles{"out"} . "\"><img src=\"" . $testfiles{"out"} . "\"></a>";
}
} elsif ($testres eq "FAIL") {
- $num_failed++;
-
if ($config_show_fail || $config_show_all) {
$testline .= "<a href=\"" . $testfiles{"out"} . "\"><img src=\"" . $testfiles{"out"} . "\"></a>";
- $testline .= "<hr size=\"1\">";
+ #$testline .= "<hr size=\"1\">";
+ $testline .= " ";
$testline .= "<a href=\"" . $testfiles{"diff"} . "\"><img src=\"" . $testfiles{"diff"} . "\"></a>";
}
+ } elsif ($testres eq "CRASHED") {
+ $testline .= "!!!CRASHED!!!";
} elsif ($testres eq "XFAIL") {
#nothing
if ($config_show_all) {
$testline .= "<a href=\"" . $testfiles{"out"} . "\"><img src=\"" . $testfiles{"out"} . "\"></a>";
- $testline .= "<hr size=\"1\">";
+ #$testline .= "<hr size=\"1\">";
+ $testline .= " ";
$testline .= "<a href=\"" . $testfiles{"diff"} . "\"><img src=\"" . $testfiles{"diff"} . "\"></a>";
}
- }
+ } elsif ($testres eq "UNTESTED") {
+ #nothing
+ } else {
+ $testline .= "UNSUPPORTED STATUS (update make-html.pl)";
+ }
$testline .= "</td>";
} else {
More information about the cairo-commit
mailing list