#!/usr/bin/perl -w =head1 NAME t/search1.t - test Plucene::Simple =head1 DESCRIPTION Test indexing, searching and deleting from an index. =cut use strict; use warnings; use Plucene::Simple; use File::Path; use Test::More tests => 13; use constant DIRECTORY => "/tmp/testindex/$$"; END { rmtree DIRECTORY } #------------------------------------------------------------------------------ # Helper stuff #------------------------------------------------------------------------------ sub data { return [ wsc => { name => "Writing Solid Code" }, rap => { name => "Rapid Development" }, gui => { name => "GUI Bloopers" }, ora => { name => "Using Oracle 8i" }, app => { name => "Advanced Perl Programming" }, xpe => { name => "Extreme Programming Explained" }, boo => { name => "Boo-Hoo" }, dbs => { name => "Designing From Both Sides of the Screen" }, dbi => { name => "Programming the Perl DBI" }, ]; } #------------------------------------------------------------------------------ # Tests #------------------------------------------------------------------------------ { # Add some stuff into the index my @data = @{ data() }; isa_ok my $plucy = Plucene::Simple->open(DIRECTORY) => 'Plucene::Simple'; $plucy->add(@data); } { # search the index my $plucy = Plucene::Simple->open(DIRECTORY); my @docs = $plucy->search("name:perl"); is @docs, 2, "2 results for Perl"; is_deeply \@docs, [ "app", "dbi" ], "The correct ones"; @docs = $plucy->search("name:illusions"); is @docs, 0, "No results for 'illusions'"; } { # index another document my $plucy = Plucene::Simple->open(DIRECTORY); $plucy->index_document('boi', 'The Book of Illusions'); my @docs = $plucy->search("illusions"); is @docs, 1, "One result for illusions"; is_deeply \@docs, ["boi"], "...the correct one"; } { # delete a document my $plucy = Plucene::Simple->open(DIRECTORY); my @docs = $plucy->search("name:oracle"); is @docs, 1, "One result for oracle"; is_deeply \@docs, ["ora"], "...the correct one"; $plucy->delete_document('ora'); @docs = $plucy->search("name:oracle"); is @docs, 0, "No results for oracle (after deletion)"; } { # bogus searches my $plucy = Plucene::Simple->open(DIRECTORY); my @docs = $plucy->search; is scalar @docs, 0, "No results for no search string"; @docs = $plucy->search("foo:bar"); is scalar @docs, 0, "No results for foo:bar"; } { # Terms not in default text field my $plucy = Plucene::Simple->open(DIRECTORY); $plucy->add( foo => { name => "The art of Unix programming", author => "Eric Raymond" }); my @docs = $plucy->search("raymond"); is @docs, 1, "One result for raymond"; is_deeply \@docs, ["foo"], "...the correct one"; }