X-Git-Url: https://git.deb.at/?p=pkg%2Fblosxom.git;a=blobdiff_plain;f=t%2Fdriver;h=574276b1984db8b6c05735ecdf72c016b349bf57;hp=f176604cd5dc510170c8a23104469a4e904f33ee;hb=dd3d1214ab2e820bfe64b49f4f84ccaefb7013a9;hpb=df025f9dccc0ec3fef6d733af450ad252d36e107 diff --git a/t/driver b/t/driver index f176604..574276b 100644 --- a/t/driver +++ b/t/driver @@ -26,34 +26,94 @@ die "cannot find root '$testdir'" unless -d $testdir; my $blosxom_config_dir = "$testdir/config"; die "cannot find blosxom config dir '$blosxom_config_dir'" unless -d $blosxom_config_dir; $ENV{BLOSXOM_CONFIG_DIR} = $blosxom_config_dir; +$ENV{TZ} = 'UTC'; my $blosxom_cgi = "$testdir/../../blosxom.cgi"; die "cannot find blosxom.cgi '$blosxom_cgi'" unless -f $blosxom_cgi; die "blosxom.cgi '$blosxom_cgi' is not executable" unless -x $blosxom_cgi; my $spec = YAML::LoadFile ("$testdir/spec.yaml") - or fail("$test - loading spec") and next; + or die("$test - could not load spec"); touch_files("$testdir/data"); -my %expected = (); +# Eval blosxom.conf +my ($static_dir, $static_password, @static_flavours); +if (my $fh = IO::File->new("$blosxom_config_dir/blosxom.conf", 'r')) { + no strict; + local $/ = undef; + eval <$fh>; +} -for (@{$spec->{tests}}) { - my ($args, $output) = @$_; +# Static mode +if ($static_password) { + eval { + require File::DirCompare; + require File::Remove; + }; + SKIP: { + skip "Static tests require additional modules: $@", 1 if $@; + my $expected = $spec->{expected}; + skip "Static tests require 'expected' directory", 1 unless $expected; + $expected = "$blosxom_config_dir/../$expected" unless $expected =~ m!^/!; + skip "Static tests 'expected' directory is missing", 1 unless -d $expected; + skip "Static tests 'static_dir' directory is missing", 1 unless -d $static_dir; - unless ($expected{$output}) { - my $fh = IO::File->new("$testdir/$output", 'r') - or die "cannot open expected output file '$output': $!"; - { - local $/ = undef; - $expected{$output} = <$fh>; - } - $fh->close; + File::Remove::remove(\1, "$static_dir/*"); + + my $errors = qx($blosxom_cgi -quiet=1 -password=$static_password); + is($errors, '', 'no errors reported from static run'); + File::DirCompare->compare($static_dir, "$blosxom_config_dir/../" . $spec->{expected}, sub { + my ($a, $b) = @_; + my ($a_short, $b_short) = ($a, $b); + $a_short =~ s!^.*\.\./!! if $a_short; + $b_short =~ s!^.*\.\./!! if $b_short; + if (! $b) { + fail("$a_short has no corresponding file"); + } elsif (! $a) { + fail("$b_short has no corresponding file"); + } else { + my ($got, $expected) = ('', ''); + my $fh = IO::File->new($a, 'r') + or die "cannot open static output file '$a': $!"; + { + local $/ = undef; + $got = <$fh>; + $fh->close; + } + $fh = IO::File->new($b, 'r') + or die "cannot open static output file '$b': $!"; + { + local $/ = undef; + $expected = <$fh>; + $fh->close; + } + eq_or_diff($got, $expected, "file $a_short and $b_short match", { style => 'Unified' }); + } + }, { ignore_cmp => 1 }); } +} - my $got = qx($blosxom_cgi $args); +# Dynamic mode +else { + my %expected = (); + for (@{$spec->{tests}}) { + my ($args, $output) = @$_; - eq_or_diff($got, $expected{$output}, "$test - got expected output for args [$args]", { style => 'Unified' }); + unless ($expected{$output}) { + my $fh = IO::File->new("$testdir/$output", 'r') + or die "cannot open expected output file '$output': $!"; + { + local $/ = undef; + $expected{$output} = <$fh>; + } + $fh->close; + } + + my $got = qx($blosxom_cgi $args); + + eq_or_diff($got, $expected{$output}, "$test - got expected output for args [$args]", { style => 'Unified' }); + } } sub touch_files {