package net.sf.katta.integrationTest.lib.lucene;
import java.io.IOException;
import net.sf.katta.lib.lucene.Hit;
import net.sf.katta.lib.lucene.HitTest;
import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.TopScoreDocCollector;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* Validates that Hit's sorting behavior matches Lucene's sorting behavior
*/
public class Hit_MatchLuceneTest {
@Test
public void test() throws IOException {
for (HitTest.HitPair hitPair : HitTest.HIT_PAIRS) {
testHitPair(hitPair);
}
}
public void testHitPair(HitTest.HitPair hitPair) throws IOException {
Scorer scorer = mock(Scorer.class);
when(scorer.score()).thenReturn(hitPair.hitA.getScore()).thenReturn(hitPair.hitB.getScore());
TopScoreDocCollector docCollector = TopScoreDocCollector.create(1, false);
docCollector.setScorer(scorer);
docCollector.collect(hitPair.hitA.getDocId());
docCollector.collect(hitPair.hitB.getDocId());
TopDocs topDocs = docCollector.topDocs();
Hit expectedHit;
if (hitPair.compareValue == -1) {
expectedHit = hitPair.hitA;
} else {
expectedHit = hitPair.hitB;
}
assertEquals(expectedHit.getScore(), topDocs.scoreDocs[0].score, 0);
assertEquals(expectedHit.getDocId(), topDocs.scoreDocs[0].doc);
}
}