AnyEvent-Git-Wrapper

 view release on metacpan or  search on metacpan

t/basic_nb.t  view on Meta::CPAN

use strict;
use warnings;
BEGIN { $^O eq 'MSWin32' ? eval q{ use Event; 1 } || q{ use EV } : eval q{ use EV } }
use Test::More;

use File::Temp qw(tempdir);
use IO::File;
use AnyEvent;
use AnyEvent::Git::Wrapper;
use File::Spec;
use File::Path qw(mkpath);
use POSIX qw(strftime);
use Sort::Versions;
use Test::Deep;
use Test::Exception;

#my $global_timeout = AE::timer 30, 0, sub { say STDERR "TIMEOUT!"; exit 2 };

my $dir = tempdir(CLEANUP => 1);

my $git = AnyEvent::Git::Wrapper->new($dir);

my $version = $git->version(AE::cv)->recv;
if ( versioncmp( $git->version(AE::cv)->recv , '1.5.0') eq -1 ) {
  plan skip_all =>
    "Git prior to v1.5.0 doesn't support 'config' subcmd which we need for this test."
}

#diag( "Testing git version: " . $version );

$git->init(AE::cv)->recv; # 'git init' also added in v1.5.0 so we're safe

$git->config( 'user.name'  , 'Test User'        , AE::cv)->recv;
$git->config( 'user.email' , 'test@example.com' , AE::cv)->recv;

# make sure git isn't munging our content so we have consistent hashes
$git->config( 'core.autocrlf' , 'false' , AE::cv)->recv;
$git->config( 'core.safecrlf' , 'false' , AE::cv)->recv;

mkpath(File::Spec->catfile($dir, 'foo'));

IO::File->new(File::Spec->catfile($dir, qw(foo bar)), '>:raw')->print("hello\n");

$git->ls_files({ o => 1 }, sub {
  my($out, $err) = shift->recv;
  is_deeply( $out, [ 'foo/bar' ] , 'ls_files -o');
})->recv;

$git->add('.', AE::cv)->recv;

$git->ls_files(sub {
  my($out, $err) = shift->recv;
  is_deeply( $out, [ 'foo/bar' ] , 'ls_files -o');
})->recv;

SKIP: {
  skip 'testing old git without porcelain' , 1 unless $git->supports_status_porcelain;
  is( $git->status(AE::cv)->recv->is_dirty , 1 , 'repo is dirty' );
}

my $time = time;
$git->commit({ message => "FIRST\n\n\tBODY\n" }, AE::cv)->recv;

SKIP: {
  skip 'testing old git without porcelain' , 1 unless $git->supports_status_porcelain;
  is( $git->status(AE::cv)->recv->is_dirty , 0 , 'repo is clean' );
}


my @rev_list;

$git->rev_list({ all => 1, pretty => 'oneline' }, sub {
  my($out, $err) = shift->recv;
  @rev_list= @$out;
  is(@rev_list, 1);
  like($rev_list[0], qr/^[a-f\d]{40} FIRST$/);
})->recv;



( run in 1.585 second using v1.01-cache-2.11-cpan-39bf76dae61 )