X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/98553d15375a373bd769b82cea24b48ee9613662..3497f49f354d94eca2f1f4242e75a21ee1f51341:/t/cvs.t diff --git a/t/cvs.t b/t/cvs.t index 9df62334d..b216a88d6 100755 --- a/t/cvs.t +++ b/t/cvs.t @@ -1,71 +1,135 @@ #!/usr/bin/perl use warnings; use strict; +use Test::More; +use IkiWiki; + +my %ideal_test_plan = (tests => 8); my $dir; -BEGIN { - $dir="/tmp/ikiwiki-test-cvs.$$"; - my $cvs=`which cvs`; - chomp $cvs; - if (! -x $cvs || ! mkdir($dir)) { - eval q{ - use Test::More skip_all => "cvs not available or could not make test dir" + +sub _determine_test_plan { + my $cvs = `which cvs`; chomp $cvs; + my $cvsps = `which cvsps`; chomp $cvsps; + return (skip_all => 'cvs or cvsps not available') + unless -x $cvs && -x $cvsps; + + foreach my $module (qw(File::ReadBackwards File::MimeInfo)) { + eval qq{use $module}; + if ($@) { + return (skip_all => "$module not available"); } } -} -use Test::More tests => 12; -BEGIN { use_ok("IkiWiki"); } + $dir = "/tmp/ikiwiki-test-cvs.$$"; + return (skip_all => "can't create $dir: $!") + unless mkdir($dir); -%config=IkiWiki::defaultconfig(); -$config{rcs} = "cvs"; -$config{srcdir} = "$dir/src"; -$config{cvsrepo} = "$dir/repo"; -$config{cvspath} = "ikiwiki"; -IkiWiki::loadplugins(); -IkiWiki::checkconfig(); + return %ideal_test_plan; +} -my $cvsrepo = "$dir/repo"; +sub _startup { + _generate_minimal_config(); + _create_test_repo(); +} -system "cvs -d $cvsrepo init >/dev/null"; -system "mkdir $dir/ikiwiki >/dev/null"; -system "cd $dir/ikiwiki && cvs -d $cvsrepo import -m import ikiwiki VENDOR RELEASE >/dev/null"; -system "rm -rf $dir/ikiwiki >/dev/null"; -system "cvs -d $cvsrepo co -d $config{srcdir} ikiwiki >/dev/null"; +sub _shutdown { + system "rm -rf $dir"; +} -# Web commit -my $test1 = readfile("t/test1.mdwn"); -writefile('test1.mdwn', $config{srcdir}, $test1); -IkiWiki::rcs_add("test1.mdwn"); -IkiWiki::rcs_commit("test1.mdwn", "Added the first page", "moo"); +sub _generate_minimal_config { + %config = IkiWiki::defaultconfig(); + $config{rcs} = "cvs"; + $config{srcdir} = "$dir/src"; + $config{cvsrepo} = "$dir/repo"; + $config{cvspath} = "ikiwiki"; + IkiWiki::loadplugins(); + IkiWiki::checkconfig(); +} -my @changes; -@changes = IkiWiki::rcs_recentchanges(3); +sub _create_test_repo { + my $cvs = "cvs -d $config{cvsrepo}"; + my $dn = ">/dev/null"; + system "$cvs init $dn"; + system "mkdir $dir/$config{cvspath} $dn"; + system "cd $dir/$config{cvspath} && " + . "$cvs import -m import $config{cvspath} VENDOR RELEASE $dn"; + system "rm -rf $dir/$config{cvspath} $dn"; + system "$cvs co -d $config{srcdir} $config{cvspath} $dn"; +} -is($#changes, 0); -is($changes[0]{message}[0]{"line"}, "Added the first page"); -is($changes[0]{pages}[0]{"page"}, "test1"); +sub test_web_add_and_commit { + my $message = "Added the first page"; + writefile('test1.mdwn', $config{srcdir}, readfile("t/test1.mdwn")); + IkiWiki::rcs_add("test1.mdwn"); + IkiWiki::rcs_commit( + file => "test1.mdwn", + message => $message, + token => "moo", + ); -# Manual commit -my $message = "Added the second page"; + my @changes = IkiWiki::rcs_recentchanges(3); + is( + $#changes, + 0, + q{1 total commit}, + ); + is( + $changes[0]{message}[0]{"line"}, + $message, + q{first line of most recent commit message matches}, + ); + is( + $changes[0]{pages}[0]{"page"}, + "test1", + q{first pagename from most recent commit matches}, + ); +} -my $test2 = readfile("t/test2.mdwn"); -writefile('test2.mdwn', $config{srcdir}, $test2); -system "cd $config{srcdir} && cvs add test2.mdwn >/dev/null 2>&1"; -system "cd $config{srcdir} && cvs commit -m \"$message\" test2.mdwn >/dev/null"; +sub test_manual_add_and_commit { + my $message = "Added the second page"; + writefile('test2.mdwn', $config{srcdir}, readfile("t/test2.mdwn")); + system "cd $config{srcdir}" + . " && cvs add test2.mdwn >/dev/null 2>&1"; + system "cd $config{srcdir}" + . " && cvs commit -m \"$message\" test2.mdwn >/dev/null"; -@changes = IkiWiki::rcs_recentchanges(3); -is($#changes, 1); -is($changes[0]{message}[0]{"line"}, $message); -is($changes[0]{pages}[0]{"page"}, "test2"); -is($changes[1]{pages}[0]{"page"}, "test1"); + my @changes = IkiWiki::rcs_recentchanges(3); + is( + $#changes, + 1, + q{2 total commits}, + ); + is( + $changes[0]{message}[0]{"line"}, + $message, + q{first line of most recent commit message matches}, + ); + is( + $changes[0]{pages}[0]{"page"}, + "test2", + q{first pagename from most recent commit matches}, + ); + is( + $changes[1]{pages}[0]{"page"}, + "test1", + q{first pagename from second-most-recent commit matches}, + ); +} -# extra slashes in the path shouldn't break things -$config{cvspath} = "/ikiwiki//"; -IkiWiki::checkconfig(); -@changes = IkiWiki::rcs_recentchanges(3); -is($#changes, 1); -is($changes[0]{message}[0]{"line"}, $message); -is($changes[0]{pages}[0]{"page"}, "test2"); -is($changes[1]{pages}[0]{"page"}, "test1"); +sub test_extra_path_slashes { + my $initial_cvspath = $config{cvspath}; + $config{cvspath} = "/ikiwiki//"; + IkiWiki::checkconfig(); + is( + $config{cvspath}, + $initial_cvspath, + q{rcs_recentchanges assumes checkconfig sanitizes cvspath}, + ); +} -system "rm -rf $dir"; +plan(_determine_test_plan()); +_startup(); +test_web_add_and_commit(); +test_manual_add_and_commit(); +test_extra_path_slashes(); +_shutdown();