61changesets.t #7

  • //
  • guest/
  • perforce_software/
  • revml/
  • t/
  • 61changesets.t
  • View
  • Commits
  • Open Download .zip Download (3 KB)
#!/usr/local/bin/perl -w

=head1 NAME

61changesets.t - test VCP::Filter::changesets

=cut

use strict ;

use Carp ;
use Test ;
use VCP::Rev ;
use VCP::Dest ;
use VCP::Utils qw( empty );
use VCP::Filter::changesets;

## the sort specs for the test.
my @specs = (
   [ [],                                  "(a#1)(a#2)(a#3)(a#4)(a#5)(a#6)" ],
   [ [ "name", "equal" ],                 "(a#1)(a#2)(a#3,a#4)(a#5)(a#6)"  ],
   [ [ "comment", "equal" ],              "(a#1)(a#2)(a#3)(a#4)(a#5)(a#6)" ],
) ;


my @field_names= qw( source_name time rev_id comment source_rev_id previous_id );
my @rev_data = (
## NOTE: revs are in reverse order to see if they do get sorted
[qw( a 6 1.20   a   6 )],
[qw( a 5 1.10   a   5 )],
[qw( a 4 1.2    a   4 )],
[qw( a 3 1.1.1  aa  3 ), "a#2" ],
[qw( a 2 1.1    aa  2 )],
[qw( a 1 1.0    a   1 )],
) ;

my @revs = map {
   my @a ;
   for my $i ( 0..$#field_names ) {
      push @a, $field_names[$i], $_->[$i] ;
   }
   VCP::Rev->new( @a ) ;
} @rev_data ;

my $prev_id;
for ( reverse @revs ) {
    if ( empty $_->previous_id ) {
        $_->previous_id( $prev_id );
        $prev_id = $_->id;
    }
}


my $d = __PACKAGE__->new;
my @out_revs;
sub new { return bless {}, __PACKAGE__ }
sub handle_header { @out_revs = () }
sub handle_rev    { push @out_revs, $_[1] }
sub rev_count     {}
sub handle_footer {}

sub _get_field {
    my $field_name = shift ;
    my $sub = VCP::Rev->can( $field_name ) ;
    die "Can't call VCP::Rev->$field_name()" unless defined $sub ;
    map defined $_ ? length $_ ? $_ : '""' : "<undef>", map $sub->( $_ ), @_ ;
}

my @tests = (
(
   map {
      my ( $conditions, $exp ) = @$_;
      sub {
         $_->change_id( undef ) for @revs;
	 my $f = VCP::Filter::changesets->new( "", $conditions );
         $f->dest( $d );
         $f->handle_header( {} );
         $f->handle_rev( $_ ) for @revs;
         $f->handle_footer( {} );

         my @changes;
         push @{$changes[$_->change_id]}, $_->id for @out_revs;

         my $got = join "", map "(" . join( ",", @$_ ) . ")", grep defined, @changes;

	 ok $got, $exp, "changesets: " . join " ", @$conditions;
      },
   } @specs
),

sub {
   ## Force the revs in to reverse order using change_id, but with one
   ## minor exception just to make sure the sort is really happening.
   my $i = 0;
   $_->change_id( ++$i ) for @revs;
   $revs[2]->change_id(99);
   $revs[0]->change_id($revs[-1]->change_id);

   my $f = VCP::Filter::changesets->new( "" );
   $f->dest( $d );
   $f->handle_header( {} );
   $f->handle_rev( $_ ) for @revs;
   $f->handle_footer( {} );

   my @changes;
   push @{$changes[$_->change_id]}, $_->id for @out_revs;

   my $got = join "", map "(" . join( ",", @$_ ) . ")", grep defined, @changes;

   ok $got, "(a#5)(a#3)(a#2)(a#1,a#6)(a#4)";
},
) ;

plan tests => scalar( @tests ) ;

$_->() for @tests ;
# Change User Description Committed
#9 4516 Barrie Slaymaker - VCP::Filter::changesets supports VCP::Rev::release_ids
#8 4507 Barrie Slaymaker - RevML:
    - added <action>, removed <delete>, <placeholder> and <move>
    - added <from_id> for clones (and eventually merge actions)
    - Simplified DTD (can't branch DTD based on which action
      any more)
- VCP::Source::cvs, VCP::Filter::changesets and VCP::Dest::p4
  support from_id in <action>clone</action> records
- VCP::Dest::perl_data added
- VCP::Rev::action() "branch" added, no more undefined action
  strings
- "placeholder" action removed
#7 3970 Barrie Slaymaker - VCP::Source handles rev queing, uses disk to reduce RAM
- Lots of other fixes
#6 3942 Barrie Slaymaker - ChangeSets now passes tests
#5 3850 Barrie Slaymaker - No longer stores all revs in memory
#4 3813 Barrie Slaymaker - VCP::Rev::previous() is no more
#3 3762 Barrie Slaymaker - Changeset aggregation now works even when not debugging
#2 3707 Barrie Slaymaker - 61*t.
now pass
#1 3385 Barrie Slaymaker Add missing test script t/61changesets.t to p4d