#!/usr/bin/env perl use strict; use warnings; use Test::More tests => 38; use_ok('SWISH::Prog'); use_ok('SWISH::Prog::Native::Indexer'); use_ok('SWISH::Prog::Aggregator::FS'); use_ok('SWISH::Prog::Config'); SKIP: { # is executable present? my $test = SWISH::Prog::Native::Indexer->new; if ( !$test->swish_check ) { skip "swish-e not installed", 34; } ok( my $invindex = SWISH::Prog::Native::InvIndex->new( path => 't/testindex', ), "new invindex" ); ok( my $config = SWISH::Prog::Config->new('t/test.conf'), "config from t/test.conf" ); # skip our local config test files $config->FileRules( 'dirname contains config', 1 ); $config->FileRules( 'filename is swish.xml', 1 ); $config->FileRules( 'filename contains \.t', 1 ); $config->FileRules( 'dirname contains (testindex|\.index)', 1 ); $config->FileRules( 'filename contains \.conf', 1 ); $config->FileRules( 'dirname contains mailfs', 1 ); ok( my $indexer = SWISH::Prog::Native::Indexer->new( invindex => $invindex, config => $config ), "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, #filter => sub { diag( "doc filter on " . $_[0]->url ) }, #verbose => 1, ), "new program" ); ok( $prog->run('t/'), "run program" ); is( $prog->count, 7, "indexed test docs" ); # test with a search SKIP: { eval { require SWISH::Prog::Native::Searcher; }; if ($@) { skip "Cannot test Searcher without SWISH::API", 27; } ok( my $searcher = SWISH::Prog::Native::Searcher->new( invindex => $invindex, ), "new searcher" ); my $query = 'foo or words'; ok( my $results = $searcher->search( $query, { order => 'swishdocpath ASC' } ), "do search" ); is( $results->hits, 5, "5 hits" ); ok( my $result = $results->next, "results->next" ); diag( $result->swishdocpath ); is( $result->swishtitle, 'test gzip html doc', "get swishtitle" ); is( $result->get_property('swishtitle'), $result->swishtitle, "get_property(swishtitle)" ); # test all the built-in properties and their method shortcuts my @methods = qw( swishdocpath uri swishlastmodified mtime swishtitle title swishdescription summary swishrank score ); for my $m (@methods) { ok( defined $result->$m, "get $m" ); ok( defined $result->get_property($m), "get_property($m)" ); } # test an aliased property is( $result->get_property('lastmod'), $result->swishlastmodified, "aliased PropertyName fetched" ); } # clean up index $invindex->path->rmtree; }