### Eclipse Workspace Patch 1.0 #P trunk Index: lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java =================================================================== --- lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java (Revision 1513074) +++ lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestPostingsHighlighter.java (Arbeitskopie) @@ -21,11 +21,14 @@ import java.io.IOException; import java.io.InputStreamReader; import java.text.BreakIterator; +import java.util.HashMap; import java.util.Map; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.MockAnalyzer; import org.apache.lucene.analysis.MockTokenizer; +import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper; +import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.FieldType; @@ -37,6 +40,7 @@ import org.apache.lucene.index.RandomIndexWriter; import org.apache.lucene.index.StoredDocument; import org.apache.lucene.index.Term; +import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.IndexSearcher; @@ -49,6 +53,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.util.LuceneTestCase; import org.apache.lucene.util.LuceneTestCase.SuppressCodecs; +import org.apache.lucene.util.Version; @SuppressCodecs({"MockFixedIntBlock", "MockVariableIntBlock", "MockSep", "MockRandom"}) public class TestPostingsHighlighter extends LuceneTestCase { @@ -87,6 +92,51 @@ dir.close(); } + public void testFormatWithMatchExceedingContentLength() throws Exception { + + int maxLength = 17; + String bodyText = "123 5678 01234 TEST"; + + final Analyzer defaultAnalyzer = new StandardAnalyzer(Version.LUCENE_44); + final Map analyzers = new HashMap(); + final Analyzer analyzer = new PerFieldAnalyzerWrapper(defaultAnalyzer, analyzers); + + Directory dir = newDirectory(); + IndexWriterConfig iwc = newIndexWriterConfig(TEST_VERSION_CURRENT, analyzer); + iwc.setMergePolicy(newLogMergePolicy()); + RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwc); + + final FieldType fieldType = new FieldType(TextField.TYPE_STORED); + fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS); + final Field body = new Field("body", bodyText, fieldType); + + Document doc = new Document(); + doc.add(body); + + iw.addDocument(doc); + + IndexReader ir = iw.getReader(); + iw.close(); + + IndexSearcher searcher = newSearcher(ir); + + final QueryParser parser = new QueryParser(Version.LUCENE_44, "body", analyzer); + Query query = parser.parse("TEST"); + + TopDocs topDocs = searcher.search(query, null, 10, Sort.INDEXORDER); + assertEquals(1, topDocs.totalHits); + + PostingsHighlighter highlighter = new PostingsHighlighter(maxLength); + String snippets[] = highlighter.highlight("body", query, searcher, topDocs); + + + assertEquals(1, snippets.length); + assertEquals("123 5678 01234 TE", snippets[0]); + + ir.close(); + dir.close(); + } + // simple test with one sentence documents. public void testOneSentence() throws Exception { Directory dir = newDirectory();