1#!/usr/bin/perl -w
2# -----------------------------------------------------------------------------
3
4use strict;
5use lib ($0 =~ m|^(.*/)| ? $1 : ".");
6use GnumericTest;
7
8&message ("Check that conditional format dependency tracking works.");
9
10my $src = "$samples/cond-format-deps.gnumeric";
11&GnumericTest::report_skip ("file $src does not exist") unless -r $src;
12
13my $nbad = 0;
14
15&test1 (['A4' => 0], 'C4', "0");
16&test1 (['A4' => 1], 'C4', "0.00");
17
18&test1 (['A5' => 0], 'C5', "0");
19&test1 (['A5' => 1], 'C5', "0.00");
20
21&test1 (['A5' => 0, 'A6' => 0], 'C6', "0.00");
22&test1 (['A5' => 1, 'A6' => 0], 'C6', "0");
23&test1 (['A5' => 0, 'A6' => 1], 'C6', "0");
24&test1 (['A5' => 1, 'A6' => 1], 'C6', "0.00");
25
26&test1 (['A4' => 0, 'A5' => 0, 'A6' => 0, 'A7' => 0], 'C7', "0");
27&test1 (['A4' => 0.5, 'A5' => 0.5, 'A6' => 0.5, 'A7' => 0.5], 'C7', "0.00");
28&test1 (['A4' => 0, 'A5' => 0.5, 'A6' => 0.5, 'A7' => 0.5], 'C7', "0");
29&test1 (['A4' => 0.5, 'A5' => 0, 'A6' => 0.5, 'A7' => 0.5], 'C7', "0");
30&test1 (['A4' => 0.5, 'A5' => 0.5, 'A6' => 0, 'A7' => 0.5], 'C7', "0");
31&test1 (['A4' => 0.5, 'A5' => 0.5, 'A6' => 0.5, 'A7' => 0], 'C7', "0");
32&test1 (['A3' => 1, 'A4' => 0.5, 'A5' => 0.5, 'A6' => 0.5, 'A7' => 0.5, 'A8' => 1], 'C7', "0.00");
33
34sub test1 {
35    my ($set, $rescell, $expected) = @_;
36
37    my @args = ('-T', 'Gnumeric_stf:stf_assistant',
38		'-O', 'format=preserve',
39		'--recalc', "--export-range=$rescell");
40    while (@$set >= 2) {
41	my $c = shift @$set;
42	my $v = shift @$set;
43	push @args, "--set", "$c=$v";
44    }
45
46    my $cmd = "$ssconvert " . &GnumericTest::quotearg (@args, $src, 'fd://1');
47    print STDERR "# $cmd\n";
48    my $result = `$cmd 2>&1`;
49    chomp $result;
50    if ($result eq $expected) {
51    } else {
52	print STDERR "No good.  Expected $expected, but got\n";
53	for my $line (split ("\n", $result)) {
54	    print STDERR "| $line\n";
55	}
56	$nbad++;
57    }
58}
59
60
61if ($nbad > 0) {
62    die "Fail\n";
63} else {
64    print STDERR "Pass\n";
65}
66