6 use Test::More qw( no_plan );
15 use Test::Differences;
17 my $test = basename($0);
22 $testdir = "t/$testdir" if -d "t/$testdir";
23 $testdir = cwd . "/$testdir";
24 die "cannot find root '$testdir'" unless -d $testdir;
26 my $blosxom_config_dir = "$testdir/config";
27 die "cannot find blosxom config dir '$blosxom_config_dir'" unless -d $blosxom_config_dir;
28 $ENV{BLOSXOM_CONFIG_DIR} = $blosxom_config_dir;
31 my $blosxom_cgi = "$testdir/../../blosxom.cgi";
32 die "cannot find blosxom.cgi '$blosxom_cgi'" unless -f $blosxom_cgi;
33 die "blosxom.cgi '$blosxom_cgi' is not executable" unless -x $blosxom_cgi;
35 my $spec = YAML::LoadFile ("$testdir/spec.yaml")
36 or die("$test - could not load spec");
38 touch_files("$testdir/data");
41 my ($static_dir, $static_password, @static_flavours);
42 if (my $fh = IO::File->new("$blosxom_config_dir/blosxom.conf", 'r')) {
49 if ($static_password) {
51 require File::DirCompare;
55 skip "Static tests require additional modules: $@", 1 if $@;
56 my $expected = $spec->{expected};
57 skip "Static tests require 'expected' directory", 1 unless $expected;
58 $expected = "$blosxom_config_dir/../$expected" unless $expected =~ m!^/!;
59 skip "Static tests 'expected' directory is missing", 1 unless -d $expected;
60 skip "Static tests 'static_dir' directory is missing", 1 unless -d $static_dir;
62 File::Remove::remove(\1, "$static_dir/*");
64 my $errors = qx($blosxom_cgi -quiet=1 -password=$static_password);
65 is($errors, '', 'no errors reported from static run');
66 File::DirCompare->compare($static_dir, "$blosxom_config_dir/../" . $spec->{expected}, sub {
68 my ($a_short, $b_short) = ($a, $b);
69 $a_short =~ s!^.*\.\./!! if $a_short;
70 $b_short =~ s!^.*\.\./!! if $b_short;
72 fail("$a_short has no corresponding file");
74 fail("$b_short has no corresponding file");
76 my ($got, $expected) = ('', '');
77 my $fh = IO::File->new($a, 'r')
78 or die "cannot open static output file '$a': $!";
84 $fh = IO::File->new($b, 'r')
85 or die "cannot open static output file '$b': $!";
91 eq_or_diff($got, $expected, "file $a_short and $b_short match", { style => 'Unified' });
93 }, { ignore_cmp => 1 });
100 for (@{$spec->{tests}}) {
101 my ($args, $output) = @$_;
103 unless ($expected{$output}) {
104 my $fh = IO::File->new("$testdir/$output", 'r')
105 or die "cannot open expected output file '$output': $!";
108 $expected{$output} = <$fh>;
113 my $got = qx($blosxom_cgi $args);
115 eq_or_diff($got, $expected{$output}, "$test - got expected output for args [$args]", { style => 'Unified' });
121 if (/^(.*)\.(\d+)$/) {