1use strict; 2# Before `make install' is performed this script should be runnable with 3# `make test'. After `make install' it should work as `perl test.pl' 4 5######################### 6 7# change 'tests => 1' to 'tests => last_test_to_print'; 8 9use Test::More; 10BEGIN { plan tests => 117 }; 11use Search::Xapian qw(:standard); 12 13######################### 14 15# Insert your test code below, the Test module is use()ed here so read 16# its man page ( perldoc Test ) for help writing this test script. 17 18foreach my $backend ("inmemory", "auto") { 19 my $database; 20 if ($backend eq "inmemory") { 21 ok( $database = Search::Xapian::WritableDatabase->new() ); 22 } else { 23 ok( $database = Search::Xapian::WritableDatabase->new( 'testdb', Search::Xapian::DB_CREATE_OR_OVERWRITE ) ); 24 } 25 26 ok( $database->get_description() ); 27 28 my $stemmer; 29 ok( $stemmer = Search::Xapian::Stem->new( 'english' ) ); 30 ok( $stemmer->get_description() ); 31 32 my %docs; 33 34 my $term = 'test'; 35 ok( $term = $stemmer->stem_word( $term ) ); 36 if ($backend ne "inmemory") { 37 # inmemory doesn't implement spelling correction support. 38 $database->add_spelling( $term, 1 ); 39 } 40 41 my $docid; 42 for my $num (qw( one two three )) { 43 ok( $docs{$num} = Search::Xapian::Document->new() ); 44 ok( $docs{$num}->get_description() ); 45 46 $docs{$num}->set_data( "$term $num" ); 47 48 $docs{$num}->add_posting( $term, 0 ); 49 $docs{$num}->add_posting( $num, 1 ); 50 51 $docs{$num}->add_value(0, $num); 52 53 if ($backend ne "inmemory") { 54 # inmemory doesn't implement spelling correction support. 55 $database->add_spelling( "x" . $term, 1 ); 56 $database->add_spelling( $term, 1 ); 57 $database->remove_spelling( "x" . $term, 1 ); 58 } 59 ok( $docid = $database->add_document( $docs{$num} ) ); 60 } 61 $database->delete_document( $docid ); 62 is( $database->get_doccount(), 2 ); 63 is( $database->get_lastdocid(), 3 ); 64 65 is( $database->get_document(1)->get_docid(), 1 ); 66 is( $database->get_document(2)->get_docid(), 2 ); 67 68 # regression test - add_posting with 2 parameters set wdfinc 0 in <=0.8.3.0 69 ok( $database->get_doclength(1) == 2 ); 70 71 is( $database->get_document(1)->get_value(0), "one" ); 72 is( $database->get_document(2)->get_value(0), "two" ); 73 74 my $posit = $database->positionlist_begin(1, $term); 75 ok( $posit ne $database->positionlist_end(1, $term) ); 76 ok( $posit == 0 ); 77 $posit++; 78 ok( $posit eq $database->positionlist_end(1, $term) ); 79 80 my $postit = $database->postlist_begin('one'); 81 ok( $postit ne $database->postlist_end('one') ); 82 ok( $postit != $database->postlist_end('one') ); 83 is( $postit->get_docid(), 1 ); 84 $postit++; 85 ok( $postit eq $database->postlist_end('one') ); 86 ok( $postit == $database->postlist_end('one') ); 87 88 my $termit = $database->termlist_begin(1); 89 ok( $termit != $database->termlist_end(1) ); 90 is( "$termit", 'one' ); 91 $termit++; 92 ok( $termit ne $database->termlist_end(1) ); 93 is( $termit->get_termname(), 'test' ); 94 ++$termit; 95 ok( $termit eq $database->termlist_end(1) ); 96 ok( $termit == $database->termlist_end(1) ); 97 98 my $alltermit = $database->allterms_begin(); 99 ok( $alltermit != $database->allterms_end() ); 100 ok( "$alltermit" eq 'one' ); 101 ok( $alltermit->get_termname() eq 'one' ); 102 ok( ++$alltermit != $database->allterms_end() ); 103 ok( "$alltermit" eq 'test' ); 104 ok( $alltermit->get_termname() eq 'test' ); 105 ok( ++$alltermit != $database->allterms_end() ); 106 ok( "$alltermit" eq 'two' ); 107 ok( $alltermit->get_termname() eq 'two' ); 108 ok( ++$alltermit == $database->allterms_end() ); 109 110 $alltermit = $database->allterms_begin('t'); 111 ok( $alltermit != $database->allterms_end('t') ); 112 ok( "$alltermit" eq 'test' ); 113 ok( $alltermit->get_termname() eq 'test' ); 114 ok( ++$alltermit != $database->allterms_end('t') ); 115 ok( "$alltermit" eq 'two' ); 116 ok( $alltermit->get_termname() eq 'two' ); 117 ok( ++$alltermit == $database->allterms_end('t') ); 118 119 # Feature test for metadata support. 120 is( $database->get_metadata( "nothing" ), "" ); 121 is( $database->get_metadata( "foo" ), "" ); 122 $database->set_metadata( "foo", "bar" ); 123 is( $database->get_metadata( "nothing" ), "" ); 124 is( $database->get_metadata( "foo" ), "bar" ); 125} 126 127# Check that trying to create an invalid stemmer gives an exception, not an 128# abort. 129eval { 130 my $badstem = Search::Xapian::Stem->new( 'gibberish' ); 131}; 132ok($@); 133ok(ref($@), "Search::Xapian::InvalidArgumentError"); 134ok($@->isa('Search::Xapian::Error')); 135ok($@->get_msg, "Language code gibberish unknown"); 136ok( "$@" =~ /^Exception: Language code gibberish unknown(?: at \S+ line \d+\.)?$/ ); 137 1381; 139