X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/1d176f23d265de80663390788b71cbd96c988ee2..0a05ac9205612e39eb613c3daf94567bc50017e2:/t/cvs.t?ds=inline diff --git a/t/cvs.t b/t/cvs.t index af91b1c64..cae3f8dc3 100755 --- a/t/cvs.t +++ b/t/cvs.t @@ -1,7 +1,7 @@ #!/usr/bin/perl use warnings; use strict; -use Test::More; my $total_tests = 41; +use Test::More; my $total_tests = 52; use IkiWiki; my $default_test_methods = '^test_*'; @@ -26,6 +26,7 @@ sub test_web_comments { # - when the first comment for page.mdwn is added, and page/ is # created to hold the comment, page/ isn't added to CVS control, # so the comment isn't either + # - can't reproduce after chmod g+s ikiwiki.cgi (20120204) # - side effect for moderated comments: after approval they # show up normally AND are still pending, too # - comments.pm treats rcs_commit_staged() as returning conflicts? @@ -35,6 +36,9 @@ sub test_chdir_magic { # cvs.pm operations are always occurring inside $config{srcdir} # other ikiwiki operations are occurring wherever, and are unaffected # when are we bothering with "local $CWD" and when aren't we? + # after commit, presumably only with post-commit hook enabled: + #> Use of chdir('') or chdir(undef) as chdir() is deprecated at + #> /usr/pkg/lib/perl5/vendor_perl/5.14.0/File/chdir.pm line 45. } sub test_cvs_info { @@ -132,6 +136,11 @@ sub test_rcs_prepedit { # for existing file, returns latest revision in repo # - what's this used for? should it return latest revision in checkout? # for new file, returns empty string + + # netbsd web log says "could not open lock file" + # XXX does this work right? + # how about with un-added dirs in the srcdir? + # how about with cvsps.core lying around? } sub test_rcs_commit { @@ -146,6 +155,8 @@ sub test_rcs_commit { # git.pm receives "session" param -- useful here? # web commits start with "web commit {by,from} " # seeing File::chdir errors on commit? + + # XXX commit can fail due to "could not open lock file" } sub test_rcs_commit_staged { @@ -218,7 +229,7 @@ sub test_rcs_add { $message = "add a UTF-8 and a binary file in different dirs"; my $file1 = "test8/test9.mdwn"; my $file2 = "test10/test11.ico"; - can_mkdir(qw(test8 test10)); + can_mkdir($_) for (qw(test8 test10)); writefile($file1, $config{srcdir}, readfile('t/test2.mdwn')); writefile($file2, $config{srcdir}, $bindata_in, 1); IkiWiki::rcs_add($_) for ($file1, $file2); @@ -269,29 +280,20 @@ sub test_rcs_rename { } sub test_rcs_recentchanges { + my @changes = IkiWiki::rcs_recentchanges(3); + is_total_number_of_changes(\@changes, 0); + my $message = "Add a page via CVS directly"; - writefile('test2.mdwn', $config{srcdir}, readfile("t/test2.mdwn")); + my $file = q{test2.mdwn}; + writefile($file, $config{srcdir}, readfile(q{t/test2.mdwn})); system "cd $config{srcdir}" - . " && cvs add test2.mdwn >/dev/null 2>&1"; + . " && cvs add $file >/dev/null 2>&1"; system "cd $config{srcdir}" - . " && cvs commit -m \"$message\" test2.mdwn >/dev/null"; + . " && cvs commit -m \"$message\" $file >/dev/null"; - my @changes = IkiWiki::rcs_recentchanges(3); - is( - $#changes, - 0, - q{total commits: 1}, - ); - is( - $changes[0]{message}[0]{"line"}, - $message, - q{most recent commit's first message line matches}, - ); - is( - $changes[0]{pages}[0]{"page"}, - "test2", - q{most recent commit's first pagename matches}, - ); + @changes = IkiWiki::rcs_recentchanges(3); + is_total_number_of_changes(\@changes, 1); + is_most_recent_change(\@changes, stripext($file), $message); # CVS commits run ikiwiki once for every committed file (!) # - commit_prep alone should fix this @@ -313,9 +315,61 @@ sub test_rcs_recentchanges { } sub test_rcs_diff { + my @changes = IkiWiki::rcs_recentchanges(3); + is_total_number_of_changes(\@changes, 0); + + my $message = "add a UTF-8 and an ASCII file in different dirs"; + my $file1 = "rcsdiff1/utf8.mdwn"; + my $file2 = "rcsdiff2/ascii.mdwn"; + my $contents2 = ''; $contents2 .= "$_. foo\n" for (1..11); + can_mkdir($_) for (qw(rcsdiff1 rcsdiff2)); + writefile($file1, $config{srcdir}, readfile('t/test2.mdwn')); + writefile($file2, $config{srcdir}, $contents2); + IkiWiki::rcs_add($_) for ($file1, $file2); + IkiWiki::rcs_commit_staged(message => $message); + + # XXX we rely on rcs_recentchanges() to be called first! + # XXX or else for no cvsps cache to exist yet... + # XXX because rcs_diff() doesn't pass -x (as an optimization) + @changes = IkiWiki::rcs_recentchanges(3); + is_total_number_of_changes(\@changes, 1); + + my $changeset = 1; + + my $maxlines = undef; + my $scalar_diffs = IkiWiki::rcs_diff($changeset, $maxlines); + like( + $scalar_diffs, + qr/^\+11\. foo$/m, + q{unbounded scalar diffs go all the way to 11}, + ); + my @array_diffs = IkiWiki::rcs_diff($changeset, $maxlines); + is( + $array_diffs[$#array_diffs], + "+11. foo\n", + q{unbounded array diffs go all the way to 11}, + ); + + $maxlines = 8; + $scalar_diffs = IkiWiki::rcs_diff($changeset, $maxlines); + unlike( + $scalar_diffs, + qr/^\+11\. foo$/m, + q{bounded scalar diffs don't go all the way to 11}, + ); + @array_diffs = IkiWiki::rcs_diff($changeset, $maxlines); + isnt( + $array_diffs[$#array_diffs], + "+11. foo\n", + q{bounded array diffs don't go all the way to 11}, + ); + is( + scalar @array_diffs, + $maxlines, + q{bounded array diffs contain expected maximum number of lines}, + ); + # can it assume we're under CVS control? or must it check? - # in list context, return all lines (with \n), up to $maxlines if set - # in scalar context, return the whole diff, up to $maxlines if set } sub test_rcs_getctime { @@ -333,7 +387,10 @@ sub test_rcs_getmtime { } sub test_rcs_receive { - pass(q{rcs_receive doesn't make sense for CVS}); + my $description = q{rcs_receive doesn't make sense for CVS}; + exists $IkiWiki::hooks{rcs}{rcs_receive} + ? fail($description) + : pass($description); } sub test_rcs_preprevert { @@ -344,6 +401,11 @@ sub test_rcs_preprevert { } sub test_rcs_revert { + # test rcs_recentchanges() real darn well + # extract read-backwards patchset parser from rcs_recentchanges() + # recentchanges: given max, return list of changeset/files/etc. + # revert: given changeset ID, return list of file/rev/action + # # can it assume we're under CVS control? or must it check? # given a patchset number, stage the revert for rcs_commit_staged() # if commit succeeds, return undef @@ -429,6 +491,7 @@ sub _setup { } sub _teardown { + # XXX does srcdir persist between test subs? system "rm -rf $dir"; }