1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
use strict;
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
#########################
# change 'tests => 1' to 'tests => last_test_to_print';
use Test;
use Devel::Peek;
BEGIN { plan tests => 6 };
use Search::Xapian qw(:standard);
ok(1); # If we made it this far, we're ok.
#########################
# Insert your test code below, the Test module is use()ed here so read
# its man page ( perldoc Test ) for help writing this test script.
# first create database dir, if it doesn't exist;
my $db_dir = 'testdb-exception-modified';
if( (! -e $db_dir) or (! -d $db_dir) ) {
mkdir( $db_dir );
}
opendir( DB_DIR, $db_dir );
while( defined( my $file = readdir( DB_DIR ) ) ) {
next if $file =~ /^\.+$/;
unlink( "$db_dir/$file" ) or die "Could not delete '$db_dir/$file': $!";
}
closedir( DB_DIR );
my $create = Search::Xapian::WritableDatabase->new( $db_dir, Search::Xapian::DB_CREATE );
$create = undef;
my $read = Search::Xapian::Database->new( $db_dir );
my $write = Search::Xapian::WritableDatabase->new( $db_dir, Search::Xapian::DB_CREATE_OR_OPEN );
my $enq = $read->enquire(OP_OR, "test");
# Let's try to index something.
my $term = 'test';
my $docid;
for my $num (1..1000) {
my $doc = Search::Xapian::Document->new();
$doc->set_data( "$term $num" );
$doc->add_posting( $term, 0 );
$doc->add_posting( $num, 1 );
$doc->add_value(0, $num);
$write->add_document( $doc );
}
$write->flush();
$read->reopen();
for my $num (qw(three four five)) {
my $doc = Search::Xapian::Document->new();
$doc->set_data( "$term $num" );
$doc->add_posting( $term, 0 );
$doc->add_posting( $num, 1 );
$doc->add_value(0, $num);
$write->add_document( $doc );
$write->flush();
}
$write->flush();
eval {
my $mset = $enq->get_mset(0, 10);
};
ok($@);
ok(ref($@), "Search::Xapian::DatabaseModifiedError", "correct class for exception");
ok($@->isa('Search::Xapian::Error'));
ok($@->get_msg, "The revision being read has been discarded - you should call Xapian::Database::reopen() and retry the operation", "get_msg works");
# WritableDatabase::reopen() is a no-op, but it shouldn't fail.
$write->reopen();
ok(1);
1;
|