7 my %ideal_test_plan = (tests => 8);
10 sub _determine_test_plan {
11 my $cvs=`which cvs`; chomp $cvs;
12 my $cvsps=`which cvsps`; chomp $cvsps;
13 return (skip_all => 'cvs or cvsps not available')
14 unless -x $cvs && -x $cvsps;
16 foreach my $module ('File::ReadBackwards', 'File::MimeInfo') {
19 return (skip_all => "$module not available");
23 return %ideal_test_plan;
28 _generate_minimal_config();
37 $dir="/tmp/ikiwiki-test-cvs.$$";
43 sub _generate_minimal_config {
44 %config=IkiWiki::defaultconfig();
46 $config{srcdir} = "$dir/src";
47 $config{cvsrepo} = "$dir/repo";
48 $config{cvspath} = "ikiwiki";
49 IkiWiki::loadplugins();
50 IkiWiki::checkconfig();
53 sub _create_test_repo {
54 my $cvs = "cvs -d $config{cvsrepo}";
55 my $dn = ">/dev/null";
56 system "$cvs init $dn";
57 system "mkdir $dir/$config{cvspath} $dn";
58 system "cd $dir/$config{cvspath} && "
59 . "$cvs import -m import $config{cvspath} VENDOR RELEASE $dn";
60 system "rm -rf $dir/$config{cvspath} $dn";
61 system "$cvs co -d $config{srcdir} $config{cvspath} $dn";
64 sub test_web_add_and_commit {
65 writefile('test1.mdwn', $config{srcdir}, readfile("t/test1.mdwn"));
66 IkiWiki::rcs_add("test1.mdwn");
67 my $message = "Added the first page";
74 my @changes = IkiWiki::rcs_recentchanges(3);
81 $changes[0]{message}[0]{"line"},
83 q{first line of most recent commit message matches},
86 $changes[0]{pages}[0]{"page"},
88 q{first pagename from most recent commit matches},
92 sub test_manual_add_and_commit {
93 writefile('test2.mdwn', $config{srcdir}, readfile("t/test2.mdwn"));
94 system "cd $config{srcdir} && cvs add test2.mdwn >/dev/null 2>&1";
95 my $message = "Added the second page";
96 system "cd $config{srcdir} && cvs commit -m \"$message\" test2.mdwn >/dev/null";
98 my @changes = IkiWiki::rcs_recentchanges(3);
105 $changes[0]{message}[0]{"line"},
107 q{first line of most recent commit message matches},
110 $changes[0]{pages}[0]{"page"},
112 q{first pagename from most recent commit matches},
115 $changes[1]{pages}[0]{"page"},
117 q{first pagename from second-most-recent commit matches},
121 sub test_extra_path_slashes {
122 my $initial_cvspath = $config{cvspath};
123 $config{cvspath} = "/ikiwiki//";
124 IkiWiki::checkconfig();
128 q{rcs_recentchanges assumes checkconfig sanitizes cvspath},
132 plan(_determine_test_plan());
134 test_web_add_and_commit();
135 test_manual_add_and_commit();
136 test_extra_path_slashes();