#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 22;
use_ok('SWISH::Prog');
use_ok('SWISH::Prog::Native::Indexer');
use_ok('SWISH::Prog::Aggregator::FS');
#use_ok('SWISH::Prog::Config');
#use_ok('SWISH::Prog::Native::Searcher');
SKIP: {
# is executable present?
my $test = SWISH::Prog::Native::Indexer->new;
if ( !$test->swish_check ) {
skip "swish-e not installed", 19;
}
ok( my $invindex
= SWISH::Prog::Native::InvIndex->new( path => 't/testindex', ),
"new invindex"
);
ok( my $indexer
= SWISH::Prog::Native::Indexer->new( invindex => $invindex, ),
"new indexer"
);
ok( my $aggregator = SWISH::Prog::Aggregator::FS->new(
indexer => $indexer,
#verbose => 1,
#debug => 1,
),
"new filesystem aggregator"
);
ok( my $prog = SWISH::Prog->new(
aggregator => $aggregator,
#verbose => 1,
),
"new program"
);
ok( $prog->run('t/test.html'), "index test.html" );
is( $prog->count, 1, "indexed test docs" );
# now create another index and merge the two.
ok( my $invindex2
= SWISH::Prog::Native::InvIndex->new( path => 't/testindex2', ),
"new invindex2"
);
ok( my $indexer2
= SWISH::Prog::Native::Indexer->new( invindex => $invindex2, ),
"new indexer2"
);
# re-use our aggregator and program
$aggregator->indexer($indexer2);
ok( $prog->run('t/test2.html'), "index test2.html" );
is( $prog->count, 1, "indexed 1 more doc" );
# merge
#$indexer->debug(1);
ok( $indexer->merge($invindex2), "merge invindex2" );
# add
ok( my $doc = $aggregator->get_doc('t/test.xml'), "get doc" );
ok( $indexer->add($doc), "add() doc" );
# test with a search
SKIP: {
eval { require SWISH::Prog::Native::Searcher; };
if ($@) {
skip "Cannot test Searcher without SWISH::API", 6;
}
ok( my $searcher
= SWISH::Prog::Native::Searcher->new( invindex => $invindex,
),
"new searcher"
);
ok( my $results = $searcher->search(
'foo or words', { order => 'swishdocpath ASC' }
),
"do search"
);
is( $results->hits, 3, "3 hits" );
ok( my $result = $results->next, "results->next" );
is( $result->swishtitle, 'test html doc', "get swishtitle" );
is( $result->get_property('swishtitle'),
$result->swishtitle, "get_property(swishtitle)" );
}
# clean up indexes
$invindex->path->rmtree;
$invindex2->path->rmtree;
}