blob: 01a1f67d4c894cb3495bf91c8dc189c5d59dbcce [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.lucene.luke.models.documents;
import java.util.List;
import org.apache.lucene.index.DocValuesType;
import org.apache.lucene.index.IndexOptions;
import org.apache.lucene.index.Term;
import org.apache.lucene.luke.models.util.IndexUtils;
import org.apache.lucene.store.AlreadyClosedException;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.NumericUtils;
import org.junit.Test;
// See: https://github.com/DmitryKey/luke/issues/133
@LuceneTestCase.SuppressCodecs({
"DummyCompressingStoredFieldsData", "HighCompressionCompressingStoredFieldsData", "FastCompressingStoredFieldsData", "FastDecompressionCompressingStoredFieldsData"
})
public class DocumentsImplTest extends DocumentsTestBase {
@Test
public void testGetMaxDoc() {
DocumentsImpl documents = new DocumentsImpl(reader);
assertEquals(5, documents.getMaxDoc());
}
@Test
public void testIsLive() {
DocumentsImpl documents = new DocumentsImpl(reader);
assertTrue(documents.isLive(0));
}
@Test
public void testGetDocumentFields() {
DocumentsImpl documents = new DocumentsImpl(reader);
List<DocumentField> fields = documents.getDocumentFields(0);
assertEquals(5, fields.size());
DocumentField f1 = fields.get(0);
assertEquals("title", f1.getName());
assertEquals(IndexOptions.DOCS_AND_FREQS, f1.getIdxOptions());
assertFalse(f1.hasTermVectors());
assertFalse(f1.hasPayloads());
assertFalse(f1.hasNorms());
assertEquals(0, f1.getNorm());
assertTrue(f1.isStored());
assertEquals("Pride and Prejudice", f1.getStringValue());
assertNull(f1.getBinaryValue());
assertNull(f1.getNumericValue());
assertEquals(DocValuesType.NONE, f1.getDvType());
assertEquals(0, f1.getPointDimensionCount());
assertEquals(0, f1.getPointNumBytes());
DocumentField f2 = fields.get(1);
assertEquals("author", f2.getName());
assertEquals(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS, f2.getIdxOptions());
assertFalse(f2.hasTermVectors());
assertFalse(f2.hasPayloads());
assertTrue(f2.hasNorms());
assertTrue(f2.getNorm() > 0);
assertTrue(f2.isStored());
assertEquals("Jane Austen", f2.getStringValue());
assertNull(f2.getBinaryValue());
assertNull(f2.getNumericValue());
assertEquals(DocValuesType.NONE, f2.getDvType());
assertEquals(0, f2.getPointDimensionCount());
assertEquals(0, f2.getPointNumBytes());
DocumentField f3 = fields.get(2);
assertEquals("text", f3.getName());
assertEquals(IndexOptions.DOCS_AND_FREQS, f3.getIdxOptions());
assertTrue(f3.hasTermVectors());
assertFalse(f3.hasPayloads());
assertTrue(f3.hasNorms());
assertTrue(f3.getNorm() > 0);
assertFalse(f3.isStored());
assertNull(f3.getStringValue());
assertNull(f3.getBinaryValue());
assertNull(f3.getNumericValue());
assertEquals(DocValuesType.NONE, f3.getDvType());
assertEquals(0, f3.getPointDimensionCount());
assertEquals(0, f3.getPointNumBytes());
DocumentField f4 = fields.get(3);
assertEquals("subject", f4.getName());
assertEquals(IndexOptions.NONE, f4.getIdxOptions());
assertFalse(f4.hasTermVectors());
assertFalse(f4.hasPayloads());
assertFalse(f4.hasNorms());
assertEquals(0, f4.getNorm());
assertFalse(f4.isStored());
assertNull(f4.getStringValue());
assertNull(f4.getBinaryValue());
assertNull(f4.getNumericValue());
assertEquals(DocValuesType.SORTED_SET, f4.getDvType());
assertEquals(0, f4.getPointDimensionCount());
assertEquals(0, f4.getPointNumBytes());
DocumentField f5 = fields.get(4);
assertEquals("downloads", f5.getName());
assertEquals(IndexOptions.NONE, f5.getIdxOptions());
assertFalse(f5.hasTermVectors());
assertFalse(f5.hasPayloads());
assertFalse(f5.hasNorms());
assertEquals(0, f5.getNorm());
assertTrue(f5.isStored());
assertNull(f5.getStringValue());
assertEquals(28533, NumericUtils.sortableBytesToInt(f5.getBinaryValue().bytes, 0));
assertNull(f5.getNumericValue());
}
@Test
public void testFirstTerm() {
DocumentsImpl documents = new DocumentsImpl(reader);
Term term = documents.firstTerm("title").orElseThrow(IllegalStateException::new);
assertEquals("title", documents.getCurrentField());
assertEquals("a", term.text());
}
@Test
public void testFirstTerm_notAvailable() {
DocumentsImpl documents = new DocumentsImpl(reader);
assertFalse(documents.firstTerm("subject").isPresent());
assertNull(documents.getCurrentField());
}
@Test
public void testNextTerm() {
DocumentsImpl documents = new DocumentsImpl(reader);
documents.firstTerm("title").orElseThrow(IllegalStateException::new);
Term term = documents.nextTerm().orElseThrow(IllegalStateException::new);
assertEquals("adventures", term.text());
while (documents.nextTerm().isPresent()) {
Integer freq = documents.getDocFreq().orElseThrow(IllegalStateException::new);
}
}
@Test
public void testNextTerm_unPositioned() {
DocumentsImpl documents = new DocumentsImpl(reader);
assertFalse(documents.nextTerm().isPresent());
}
@Test
public void testSeekTerm() {
DocumentsImpl documents = new DocumentsImpl(reader);
documents.firstTerm("title").orElseThrow(IllegalStateException::new);
Term term = documents.seekTerm("pri").orElseThrow(IllegalStateException::new);
assertEquals("pride", term.text());
assertFalse(documents.seekTerm("x").isPresent());
}
@Test
public void testSeekTerm_unPositioned() {
DocumentsImpl documents = new DocumentsImpl(reader);
assertFalse(documents.seekTerm("a").isPresent());
}
@Test
public void testFirstTermDoc() {
DocumentsImpl documents = new DocumentsImpl(reader);
documents.firstTerm("title").orElseThrow(IllegalStateException::new);
Term term = documents.seekTerm("adv").orElseThrow(IllegalStateException::new);
assertEquals("adventures", term.text());
int docid = documents.firstTermDoc().orElseThrow(IllegalStateException::new);
assertEquals(1, docid);
}
@Test
public void testFirstTermDoc_unPositioned() {
DocumentsImpl documents = new DocumentsImpl(reader);
assertFalse(documents.firstTermDoc().isPresent());
}
@Test
public void testNextTermDoc() {
DocumentsImpl documents = new DocumentsImpl(reader);
Term term = documents.firstTerm("title").orElseThrow(IllegalStateException::new);
term = documents.seekTerm("adv").orElseThrow(IllegalStateException::new);
assertEquals("adventures", term.text());
int docid = documents.firstTermDoc().orElseThrow(IllegalStateException::new);
docid = documents.nextTermDoc().orElseThrow(IllegalStateException::new);
assertEquals(4, docid);
assertFalse(documents.nextTermDoc().isPresent());
}
@Test
public void testNextTermDoc_unPositioned() {
DocumentsImpl documents = new DocumentsImpl(reader);
Term term = documents.firstTerm("title").orElseThrow(IllegalStateException::new);
assertFalse(documents.nextTermDoc().isPresent());
}
@Test
public void testTermPositions() {
DocumentsImpl documents = new DocumentsImpl(reader);
Term term = documents.firstTerm("author").orElseThrow(IllegalStateException::new);
term = documents.seekTerm("carroll").orElseThrow(IllegalStateException::new);
int docid = documents.firstTermDoc().orElseThrow(IllegalStateException::new);
List<TermPosting> postings = documents.getTermPositions();
assertEquals(1, postings.size());
assertEquals(1, postings.get(0).getPosition());
assertEquals(6, postings.get(0).getStartOffset());
assertEquals(13, postings.get(0).getEndOffset());
}
@Test
public void testTermPositions_unPositioned() {
DocumentsImpl documents = new DocumentsImpl(reader);
Term term = documents.firstTerm("author").orElseThrow(IllegalStateException::new);
assertEquals(0, documents.getTermPositions().size());
}
@Test
public void testTermPositions_noPositions() {
DocumentsImpl documents = new DocumentsImpl(reader);
Term term = documents.firstTerm("title").orElseThrow(IllegalStateException::new);
int docid = documents.firstTermDoc().orElseThrow(IllegalStateException::new);
assertEquals(0, documents.getTermPositions().size());
}
@Test(expected = AlreadyClosedException.class)
public void testClose() throws Exception {
DocumentsImpl documents = new DocumentsImpl(reader);
reader.close();
IndexUtils.getFieldNames(reader);
}
}