Configure: house cleaning.
[gnumeric.git] / test / t6161-xlsx-deterministic.pl
blob716b388e46e489acbfc13e2cf25648660fb20c70
1 #!/usr/bin/perl -w
2 # -----------------------------------------------------------------------------
4 use strict;
5 use lib ($0 =~ m|^(.*/)| ? $1 : ".");
6 use GnumericTest;
8 &message ("Check that the xlsx exporter produces the same results every time.");
10 my $format = "Gnumeric_Excel:xlsx";
11 my $unzip = &GnumericTest::find_program ("unzip");
13 my @sources = &GnumericTest::corpus();
14 # datefuns and docs-samples use NOW(); the rest take too long.
15 @sources = grep { !m{(^|/)(datefuns\.xls|(docs-samples|crlibm|gamma)\.gnumeric)$} } @sources;
17 my $nskipped = 0;
18 my $ngood = 0;
19 my $nbad = 0;
21 foreach my $src (@sources) {
22 if (!-r $src) {
23 $nskipped++;
24 next;
27 print STDERR "Checking $src\n";
29 my %members;
30 my @tmp;
31 foreach my $i (1, 2) {
32 my $tmp = $src;
33 $tmp =~ s|^.*/||;
34 $tmp =~ s|\..*|-$i.xlsx|;
35 &GnumericTest::junkfile ($tmp);
36 my $cmd = "$ssconvert -T $format $src $tmp";
37 print STDERR "# $cmd\n" if $GnumericTest::verbose;
38 system ($cmd);
39 if (!-r $tmp) {
40 print STDERR "ssconvert failed to produce $tmp\n";
41 die "Fail\n";
44 foreach (`$unzip -v $tmp`) {
45 next unless /^----/ ... /^----/;
46 next unless m{^\s*\d.*\s(\S+)$};
47 my $member = $1;
48 if (($members{$member} || 0) & $i) {
49 print STDERR "Duplicate member $member\n";
50 die "Fail\n";
52 $members{$member} += $i;
55 push @tmp, $tmp;
58 my $tmp1 = $tmp[0];
59 my $tmp2 = $tmp[1];
61 foreach my $member (sort keys %members) {
62 if ($members{$member} != 3) {
63 print STDERR "Member $member is not in both files.\n";
64 $nbad++;
65 next;
68 # unzip trouble
69 next if $member eq '[Content_Types].xml';
71 # May contain timestamp
72 next if $member eq 'docProps/core.xml';
74 my $cmd1 = &GnumericTest::quotearg ($unzip, "-p", $tmp1, $member);
75 print STDERR "# $cmd1\n" if $GnumericTest::verbose;
76 my $data1 = `$cmd1`;
78 my $cmd2 = &GnumericTest::quotearg ($unzip, "-p", $tmp2, $member);
79 print STDERR "# $cmd2\n" if $GnumericTest::verbose;
80 my $data2 = `$cmd2`;
82 if ($data1 ne $data2) {
83 print STDERR "Member $member is different between two files.\n";
84 $nbad++;
85 next;
88 $ngood++;
91 &GnumericTest::removejunk ($tmp1);
92 &GnumericTest::removejunk ($tmp2);
95 &GnumericTest::report_skip ("No source files present") if $nbad + $ngood == 0;
97 if ($nskipped > 0) {
98 print STDERR "$nskipped files skipped.\n";
101 if ($nbad > 0) {
102 die "Fail\n";
103 } else {
104 print STDERR "Pass\n";