.gnumeric: if we see a shared array formula, fix it.
[gnumeric.git] / test / t6050-vba-roundtrip.pl
blob8308ad3784fd53bee15291fccada595c5dc43e14
1 #!/usr/bin/perl -w
2 # -----------------------------------------------------------------------------
4 use strict;
5 use lib ($0 =~ m|^(.*/)| ? $1 : ".");
6 use GnumericTest;
8 &message ("Check that vba roundtrips through xls");
10 my $src = "$samples/vba-725220.xls";
11 &GnumericTest::report_skip ("file $src does not exist") unless -r $src;
13 my $gsf = &GnumericTest::find_program ("gsf");
15 my $dir1 = &gsf_list ($src);
17 my $tmp = $src;
18 $tmp =~ s|^.*/||;
19 $tmp =~ s|\..*|-tmp.xls|;
20 &GnumericTest::junkfile ($tmp);
21 system ("$ssconvert $src $tmp");
22 my $dir2 = &gsf_list ($tmp);
24 foreach my $f (sort keys %$dir1) {
25 next unless ($f eq "\001Ole" ||
26 $f eq "\001CompObj" ||
27 $f =~ m{^_VBA_PROJECT_CUR/});
28 my $fprint = $f;
29 $fprint =~ s{\001}{\\001};
30 if (!exists $dir2->{$f}) {
31 die "$0: member $fprint is missing after conversion.\n";
32 } elsif ($dir1->{$f} ne $dir2->{$f}) {
33 die "$0: member $fprint changed length during conversion.\n";
34 } else {
35 my $d1 = `$gsf cat '$src' '$f'`;
36 my $d2 = `$gsf cat '$tmp' '$f'`;
37 if (length ($d1) ne $dir1->{$f}) {
38 print "Member $fprint is strange\n";
39 } elsif ($d1 eq $d2) {
40 print "Member $fprint is ok\n";
41 } else {
42 die "$0: member $fprint changed contents during conversion.\n";
47 sub gsf_list {
48 my ($fn) = @_;
50 my $dir = {};
51 local (*FIL);
52 open (FIL, "$gsf list '$fn' | ") or die "Cannot parse $fn: $!\n";
53 while (<FIL>) {
54 next unless /^f\s.*\s(\d+)\s+(.*)$/;
55 $dir->{$2} = $1;
57 close FIL;
58 return $dir;