1#!/usr/bin/perl -w
2# -----------------------------------------------------------------------------
3
4use strict;
5use lib ($0 =~ m|^(.*/)| ? $1 : ".");
6use GnumericTest;
7
8&message ("Check that the gnumeric exporter produces valid files.");
9
10my $schema = "$topsrc/gnumeric.xsd";
11&GnumericTest::report_skip ("Cannot find schema") unless -r $schema;
12
13my $xmllint = &GnumericTest::find_program ("xmllint");
14
15my @sources = &GnumericTest::corpus();
16
17my $nskipped = 0;
18my $ngood = 0;
19my $nbad = 0;
20
21foreach my $src (@sources) {
22    if (!-r $src) {
23	$nskipped++;
24	next;
25    }
26
27    print STDERR "Checking $src\n";
28
29    my $tmp = $src;
30    $tmp =~ s|^.*/||;
31    $tmp =~ s|\..*|.xml|;
32    &GnumericTest::junkfile ($tmp);
33    system ("$ssconvert $src $tmp");
34    if (!-r $tmp) {
35	print STDERR "ssconvert failed to produce $tmp\n";
36	die "Fail\n";
37    }
38
39    my $out = `$xmllint --nonet --noout --schema $schema $tmp 2>&1`;
40    if ($out !~ /validates$/) {
41	print STDERR "While checking $tmp:\n";
42	&GnumericTest::dump_indented ($out);
43	$nbad++;
44    } else {
45	$ngood++;
46    }
47
48    &GnumericTest::removejunk ($tmp);
49}
50
51&GnumericTest::report_skip ("No source files present") if $nbad + $ngood == 0;
52
53if ($nskipped > 0) {
54    print STDERR "$nskipped files skipped.\n";
55}
56
57if ($nbad > 0) {
58    die "Fail\n";
59} else {
60    print STDERR "Pass\n";
61}
62