[Lxr-commits] CVS: lxr/tests lxr.conf,1.1,1.1.4.1 BKTest.pm,1.1.2.2,1.1.2.3 AllTests.pm,1.1.4.1,1.1.
Brought to you by:
ajlittoz
From: Malcolm B. <mb...@us...> - 2005-02-13 19:35:14
|
Update of /cvsroot/lxr/lxr/tests In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13184/tests Modified Files: Tag: bk-dev-branch lxr.conf BKTest.pm AllTests.pm Log Message: Updated implementation of BitKeeper interface. Now uses bk rset to get all the details of the tree. Can correctly access various versions of the files across moves, deletes etc. Index: lxr.conf =================================================================== RCS file: /cvsroot/lxr/lxr/tests/lxr.conf,v retrieving revision 1.1 retrieving revision 1.1.4.1 diff -u -d -r1.1 -r1.1.4.1 --- lxr.conf 4 Mar 2002 15:11:27 -0000 1.1 +++ lxr.conf 13 Feb 2005 19:35:04 -0000 1.1.4.1 @@ -174,7 +174,8 @@ # ['tcl', '(?i)\.tcl$|\.wish$' #' # , 'LXR::Lang::Generic'], }, - + + 'ignoredirs' => [], # Maps interpreter names to languages. The format is: # regexp => langname # regexp is matched against the part after #! on the first line of a file Index: BKTest.pm =================================================================== RCS file: /cvsroot/lxr/lxr/tests/Attic/BKTest.pm,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- BKTest.pm 12 Dec 2004 02:41:40 -0000 1.1.2.2 +++ BKTest.pm 13 Feb 2005 19:35:04 -0000 1.1.2.3 @@ -5,6 +5,7 @@ use strict; use Test::Unit; +use Cwd; use lib ".."; use lib "../lib"; @@ -12,13 +13,15 @@ use base qw(Test::Unit::TestCase); -use vars qw($bkpath); +use vars qw($bkpath $bkrefdir); -$bkpath = "/Users/malcolmbox/dev/bk-linux/linux-2.4"; +$bkpath = getcwd() . "/bk-test-repository"; +$bkrefdir = getcwd() . "/bk-reference-files/"; sub new { my $self = shift()->SUPER::new(@_); -# $self->{config} = {}; + + # $self->{config} = {}; return $self; } @@ -34,8 +37,10 @@ # Access some of the values to check what is found sub test_root { my $self = shift; - $self->assert($self->{'bk'}->{rootpath} eq $self->{'config'}->{'dir'}, - "rootpath failed $self->{bk}->{rootpath} $self->{'config'}->{'dir'}"); + $self->assert( + $self->{'bk'}->{rootpath} eq $self->{'config'}->{'dir'}, + "rootpath failed $self->{bk}->{rootpath} $self->{'config'}->{'dir'}" + ); } # Test the getdir function @@ -50,87 +55,263 @@ sub new { my ($proto, $rootpath) = @_; my $class = ref($proto) || $proto; - my $self = $class->SUPER::new($rootpath); - + my $self = $class->SUPER::new($rootpath); + bless($self, $class); return $self; } -sub set_tree() { +sub set_tree { my ($self) = shift; $self->{tree} = \@_; } -sub get_tree() { - my($self) = shift; - return @{$self->{'tree'}}; +sub get_tree { + my ($self) = shift; + return @{ $self->{'tree'} }; } 1; package BKTest; -# Test the tree building & caching for the getdir function. Doesn't go near real BK commands +# Test the tree building & caching for the getdir function. +# Uses the BK::Test module to stub out real BK commands +# so entire operation carried out on virtual trees sub test_getdir_part1 { my $self = shift; - my $bk = new LXR::Files::BK::Test("/"); - $bk->set_tree("README", "src/file1", "src/file2", "src/tests/newtest/test1"); - - my @files = sort($bk->getdir("/",'test1')); # use different releases to disambiguate - $self->assert_deep_equals(\@files, ["README", "src"]); - @files = sort($bk->getdir("/src/", 'test1')); - $self->assert_deep_equals(\@files, ["file1", "file2", "tests"]); - @files = sort($bk->getdir("/src/tests/newtest/", 'test1')); - $self->assert_deep_equals(\@files, ["test1"]); - @files = sort($bk->getdir("/src/tests/", 'test1')); - $self->assert_deep_equals(\@files, ["newtest"]); - @files = sort($bk->getdir("/src/tests/newtest/", 'test1')); - $self->assert_deep_equals(\@files, ["test1"]); - - $bk->set_tree("README", "src/file1", "src/file2", "src/tests/newtest/test1", "src/tests/newtest/test2", - "Config"); - @files = sort($bk->getdir("/src/tests/newtest/", 'test1')); # Check cache is working + my $bk = new LXR::Files::BK::Test("/"); + $bk->set_tree("README|README|1.1", "src/file1|src/file1|1.1", + "src/file2|src/file2|1.1", + "src/tests/newtest/test1|src/tests/newtest/test1|1.3"); + + my @files = + sort($bk->getdir("/", 'test1')); # use different releases to disambiguate + $self->assert_deep_equals(\@files, [ sort "README", "src" ]); + @files = sort ($bk->getdir("", 'test1')); # Check that interprets "" as "/" + $self->assert_deep_equals(\@files, [ sort "README", "src" ]); + @files = sort($bk->getdir("src/", 'test1')); + $self->assert_deep_equals(\@files, [ sort "file1", "file2", "tests" ]); + @files = sort($bk->getdir("src/tests/newtest/", 'test1')); + $self->assert_deep_equals(\@files, [ sort "test1" ]); + @files = sort($bk->getdir("src/tests/", 'test1')); + $self->assert_deep_equals(\@files, [ sort "newtest" ]); + @files = sort($bk->getdir("src/tests/newtest/", 'test1')); + $self->assert_deep_equals(\@files, [ sort "test1" ]); + + $bk->set_tree( + "BitKeeper/deleted/.del-README-34243232432|README|1.2", + "src/file1|src/file1|1.2", + "src/file2|src/file2|1.2", + "src/tests/newtest/test1|src/tests/newtest/test1|1.2", + "src/tests/newtest/test2|src/tests/newtest/test2|1.2", + "Config|Config|1.2" + ); + @files = + sort($bk->getdir("src/tests/newtest/", 'test1')); # Check cache is working $self->assert_deep_equals(\@files, ["test1"]); - @files = sort($bk->getdir("/src/tests/newtest/", 'test2')); # Should pick up new entry - $self->assert_deep_equals(\@files, ["test1", "test2"]); - @files = sort($bk->getdir("/src/tests/", 'test2')); # Should still only see one copy of dir + @files = + sort($bk->getdir("src/tests/newtest/", 'test2')) + ; # Should pick up new entry + $self->assert_deep_equals(\@files, [ "test1", "test2" ]); + @files = + sort($bk->getdir("src/tests/", 'test2')) + ; # Should still only see one copy of dir $self->assert_deep_equals(\@files, ["newtest"]); - @files = sort($bk->getdir("/src/tests/newtest/", 'test1')); # Check cache is still ok + @files = + sort($bk->getdir("src/tests/newtest/", 'test1')) + ; # Check cache is still ok $self->assert_deep_equals(\@files, ["test1"]); + # Now tests with invalid paths on entry + @files = sort($bk->getdir("/src/tests/", 'test1')); + $self->assert($#files == -1); + @files = sort($bk->getdir("src/tests", 'test2')); + $self->assert($#files == -1); } # Test the get_tree function and ensure it is giving the right answers - sub test_get_tree { my $self = shift; + my $bk = $self->{'bk'}; + + my @versions = (1.5, 1.7, 1.6, 1.8); + foreach (@versions) { + my @tree = sort $bk->get_tree('@' . $_); + open(X, "${bkrefdir}bk-file-tree-$_") + || die "Can't read ${bkrefdir}bk-file-tree-$_"; + my @answer = sort <X>; + close X; + chomp @answer; + $self->assert_deep_equals(\@tree, \@answer, "Failed for version $_"); + } +} + +# Now test the getdir function with the full tree +sub test_getdir_part2 { + my $self = shift; + my $bk = $self->{'bk'}; + + # A revision with no deletions + my @entries = sort $bk->getdir('firstdir/', '@1.3'); + $self->assert(scalar(@entries) == 2, "entries is $#entries"); + $self->assert_deep_equals(\@entries, [ sort ("file2", "file3") ]); + @entries = sort($bk->getdir('seconddir/', '@1.6')); + $self->assert_deep_equals(\@entries, [ sort ("file4", "thirddir") ]); + + # Now a revision after some files have been deleted + @entries = sort $bk->getdir('firstdir/', '@1.6'); + $self->assert(scalar(@entries) == 0); + @entries = sort $bk->getdir('seconddir/', '@1.6'); + $self->assert_deep_equals(\@entries, [ sort ('thirddir', 'file4') ]); + @entries = sort $bk->getdir('seconddir/thirddir/', '@1.6'); + $self->assert_deep_equals(\@entries, [ sort ('file5') ]); + + # Now after a file in firstdir has been recreated + @entries = sort $bk->getdir('firstdir/', '@1.8'); + $self->assert_deep_equals(\@entries, [ sort ('file2') ]); +} + +# Tests for the cache manipulation commands +sub test_fileexists { + my $self = shift; + my $bk = $self->{'bk'}; + + # These all exist + $self->assert($bk->file_exists('/file1', '@1.2')); + $self->assert($bk->file_exists('/file1', '@1.6')); + $self->assert($bk->file_exists('/file1', '@1.8')); + $self->assert($bk->file_exists('/firstdir/file2', '@1.3')); + $self->assert($bk->file_exists('/firstdir/file3', '@1.5')); + $self->assert($bk->file_exists('/seconddir/thirddir/file5', '@1.6')); + + # And these don't + $self->assert(!$bk->file_exists('/file1', '@1.1')); + $self->assert(!$bk->file_exists('/file2', '@1.3')); + $self->assert(!$bk->file_exists('/firstdir/', '@1.8')); + $self->assert(!$bk->file_exists('/firstdir/file2', '@1.2')); + $self->assert(!$bk->file_exists('/firstdir/file3', '@1.6')); + $self->assert(!$bk->file_exists('/seconddir/thirddir/file4', '@1.6')); +} + +sub test_getfileinfo { + my $self = shift; + my $bk = $self->{'bk'}; + + # These all exist + $self->assert(defined($bk->getfileinfo('/file1', '@1.2'))); + $self->assert($bk->getfileinfo('/file1', '@1.6')->{'revision'} == 1.1); + $self->assert($bk->getfileinfo('/file1', '@1.8')->{'curpath'} eq 'file1'); + my $info = $bk->getfileinfo('/firstdir/file2', '@1.3'); + $self->assert($info->{'revision'} == 1.1); + $self->assert( + $info->{'curpath'} eq 'BitKeeper/deleted/.del-file2~7a40a14b3cb5ac42'); + + # And these don't + $self->assert(!defined($bk->getfileinfo('/file1', '@1.1'))); + $self->assert(!defined($bk->getfileinfo('/file2', '@1.3'))); +} + +# Some basic getfile tests +# Check for correct & incorrect pathnames and versions +sub test_getfile { + my $self = shift; + my $bk = $self->{'bk'}; + + my $data = $bk->getfile("/firstdir/file2", '@1.3'); + open(FILE, '<', $bkrefdir . 'firstdir^file2^@1.3') + || die "Can't open file to check contents firstdir^file2^\@1.3"; + local ($/) = undef; + my $check = <FILE>; + close FILE; + $self->assert($check eq $data, "File read didn't match"); + +# Pathnames must start with a "/" for CVS/Plain but we'll accept without - for now! + $data = $bk->getfile("firstdir/file2", '@1.3'); + $self->assert($check eq $data, "File read didn't match"); + $data = $bk->getfile("/an/impossible/path/that/doesn/t/exist", '@131'); + $self->assert(!defined($data)); + $data = ''; + $data = $bk->getfile("include/linux/jffs.h", '@1345'); + $self->assert(!defined($data)); +} + +# Detailed getfile tests +# Checking here that we can correctly recover: +# - the same file at two different revisions +# - a file that has been deleted +# - a file that has been deleted and then reconstructed +# (i.e. the new dir/file is different to dir/file at a previous revision +# - a file that has been moved +sub test_getfile2 { + my $self = shift; + my $bk = $self->{'bk'}; + + # These are all valid versions with contents + my @versions = ( + '/seconddir/file4', '@1.4', # rev 1 + '/seconddir/file4', '@1.7', # rev 2 + '/firstdir/file2', '@1.4', # before delete + '/firstdir/file2', '@1.8', # after reconstruction + '/seconddir/thirddir/file5', '@1.6', # before move + '/seconddir/thirddir/file6', '@1.9', # after move + '/seconddir/file7', '@1.10', # after move to new dir + ); + + while (scalar(@versions)) { + my $file = shift @versions; + my $ver = shift @versions; + my $data = $bk->getfile($file, $ver); + my $checkfile = substr($file, 1); + $checkfile =~ s{/}{^}g; + $checkfile = $bkrefdir . $checkfile . '^' . $ver; + open(X, '<', $checkfile) or die "Can't open file $checkfile"; + local ($/) = undef; + my $check = <X>; + close X; + $self->assert_equals($data, $check, "Failed for $file, $ver"); + } +} + +sub test_getfilehandle { + my ($self) = shift; my $bk = $self->{'bk'}; - - my @tree = sort $bk->get_tree('@1.15'); - open (X, "test_get_tree_filelist") || die "Can't read test_get_tree_filelist"; - my @answer = sort <X>; - chomp @answer; - - $self->assert_deep_equals(\@tree, \@answer); -} + + $self->assert(defined($bk->getfilehandle("/firstdir/file2", '@1.3'))); + $self->assert(defined($bk->getfilehandle("/seconddir/file4", '@1.6'))); + $self->assert(defined($bk->getfilehandle('file1', '@1.2'))); + $self->assert( + !defined($bk->getfilehandle("/random/path/to/nowhere", '@1.1449'))); + $self->assert(!defined($bk->getfilehandle("/file1", '1.1'))); + $self->assert(!defined($bk->getfilehandle("/firstdir/file3", '@1.8'))); + $self->assert(!defined($bk->getfilehandle("/seconddir/file7", '@1.8'))); + $self->assert(!defined($bk->getfilehandle("/seconddir/thirddir/file5", '@1.10'))); +} + +# Tests of helper functions in BK.pm +sub test_canonise { + my ($self) = shift; + my $bk = $self->{'bk'}; + $self->assert( + LXR::Files::BK::canonise('/path/to/somewhere') eq 'path/to/somewhere'); + $self->assert(LXR::Files::BK::canonise('/') eq ''); +} # set_up and tear_down are used to # prepare and release resources need for testing # Prepare a config object - sub set_up { +sub set_up { my $self = shift; $self->{'bk'} = new LXR::Files("bk:$bkpath"); - $self->{'config'}->{'dir'} = "$bkpath/"; - } + $self->{'config'}->{'dir'} = "$bkpath"; +} - sub tear_down { +sub tear_down { my $self = shift; -# $self->{config} = undef; - } - - + # $self->{config} = undef; +} 1; Index: AllTests.pm =================================================================== RCS file: /cvsroot/lxr/lxr/tests/AllTests.pm,v retrieving revision 1.1.4.1 retrieving revision 1.1.4.2 diff -u -d -r1.1.4.1 -r1.1.4.2 --- AllTests.pm 4 Dec 2004 23:31:15 -0000 1.1.4.1 +++ AllTests.pm 13 Feb 2005 19:35:04 -0000 1.1.4.2 @@ -15,6 +15,7 @@ my $suite = Test::Unit::TestSuite->empty_new("LXR Tests"); $suite->add_test(Test::Unit::TestSuite->new("ConfigTest")); $suite->add_test(Test::Unit::TestSuite->new("BKTest")); + $suite->add_test(Test::Unit::TestSuite->new("PlainTest")); return $suite; } |