#!/usr/bin/perl -w

use Test::More tests => 12;
use strict;
use warnings;

use Plucene::TestCase;
use Plucene::QueryParser;

new_index {
	add_document(contents => $_) for (
		"a b c d e",
		"a b c d e a b c d e",
		"a b c d e f g h i j",
		"a c e",
		"e c a",
		"a c e a c e",
		"a c e a b c"
	);
	$WRITER->optimize;
};

my $searcher = Plucene::Search::IndexSearcher->new($DIR);
my %queries  = (
	"a b"       => [ 4, 3, 5, 2, 1, 0, 6 ],
	"\"a c e\"" => [ 6, 3, 5 ],
	"b -a"      => [],
);

# We don't use TestCase's search method here because we are testing lots
# of different things

my $parser = Plucene::QueryParser->new({
		analyzer => $ANALYZER->new(),
		default  => "contents"
	});

for my $q_text (keys %queries) {
	my $q = $parser->parse($q_text);
	isa_ok($q, "Plucene::Search::Query");
	is($q->to_string("contents"), $q_text, "to_string round-trips OK");
	my $hits = $searcher->search($q);
	is($hits->length, @{ $queries{$q_text} }, "Correct number of results");
	is_deeply([ map { $_->{id} } @{ $hits->{hit_docs} } ],
		$queries{$q_text}, "Correct document IDs returned. (in order)");
}