use Test::More tests => 26; BEGIN { use_ok('SVN::Class'); } use IPC::Cmd qw( can_run run ); use File::Temp qw( tempdir ); use Data::Dump qw( dump ); my $debug = $ENV{PERL_DEBUG} || 0; # turn on to help debug CPANTS # create a repos # # Mac OSX 10.5 workaround if ($ENV{TMPDIR} =~ m/\w+\+/) { $ENV{TMPDIR} = '/tmp'; } #diag( File::Spec->tmpdir() ); my $tmpdir = $ENV{SVN_CLASS_TMP_DIR} || tempdir( CLEANUP => ( $debug > 1 ) ? 0 : 1 ); my $repos = Path::Class::Dir->new( $tmpdir, 'svn-class', 'repos' ); my $work = Path::Class::Dir->new( $tmpdir, 'svn-class', 'work' ); # if we don't have svn in PATH can't do much. SKIP: { skip "svn is not in PATH", 25 unless can_run('svn'); diag( "svn command = " . can_run('svn') ); # if running multiple times, test for existence of our repos & work dirs SKIP: { if ( -d $repos && -s "$repos/format" ) { skip "repos setup already complete", 5; } ok( $repos->mkpath(1), "repos path made" ); ok( $work->mkpath(1), "work path made" ); ok( run( command => "svnadmin create $repos" ), "repos $repos created" ); # create a project in repos and check it out in $work ok( run( command => "svn mkdir file://$repos/test -m init" ), "test project created in repos" ); ok( run( command => "svn co file://$repos/test $work" ), "test checked out" ); } # set up is done. now let's test our SYNOPSIS. # SVN::Class::File ok( my $file = svn_file( $work, 'test1' ), "new svn_file" ); # 1 #$file->_debug_stdin_fh; #$file->_debug_stdout_fh; $file->debug(1) if $debug; ok( my $fh = $file->open('>>'), "filehandle created" ); ok( print( {$fh} "hello world\n" ), "hello world" ); ok( $fh->close, "filehandle closed" ); ok( $file->add, "$file scheduled for commit" ); ok( $file->modified, "$file status == modified" ); # 6 ok( $file->commit('the file changed'), "$file committed" ); diag( "error: " . $file->errstr . " : $!" ) if $file->error_code; ok( my $log = $file->log, "$file has a log" ); is( $file->outstr, join( "\n", @$log, "" ), "outstr" ); # SVN::Class::Dir ok( my $dir = svn_dir( $work, 'testdir' ), "new svn_dir" ); $dir->debug(1) if $debug; ok( -d $dir ? 1 : $dir->mkpath, "$dir mkpath" ); # 11 ok( $dir->add, "$dir scheduled for commit" ); is( $dir->status, 'A', "dir status is schedule for Add" ); #diag( join( "", `ls -l $work` ) ); ok( $dir->commit('new dir'), "$dir committed" ); diag( "error: " . $dir->errstr . " : $!" ) if $dir->error_code; is( $dir->status, 0, "dir status is 0 since it has not changed" ); # SVN::Class::Info ok( my $info = $dir->info, "get info" ); # 16 is( $info->path, $dir, "working path" ); # SVN::Class::Repos #diag(dump $info); #diag($info->url); #diag(dump $info->url); is( $info->url, $info->url->info->url, "recursive URL" ); ok( my $repos = SVN::Class::Repos->new( 'file://' . $repos ), "new repos object" ); my $thisuser = getpwuid($<); is( $repos->info->author, $thisuser, "$thisuser was last author to commit to $repos" ); # 20 } # end global SKIP