add --shared
[pylucene.git] / lucene-java-3.4.0 / lucene / src / test / org / apache / lucene / index / TestSegmentReader.java
1 package org.apache.lucene.index;
2
3 /**
4  * Licensed to the Apache Software Foundation (ASF) under one or more
5  * contributor license agreements.  See the NOTICE file distributed with
6  * this work for additional information regarding copyright ownership.
7  * The ASF licenses this file to You under the Apache License, Version 2.0
8  * (the "License"); you may not use this file except in compliance with
9  * the License.  You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 import java.io.IOException;
21 import java.util.Collection;
22 import java.util.Iterator;
23 import java.util.List;
24
25 import org.apache.lucene.util.LuceneTestCase;
26
27 import org.apache.lucene.document.Document;
28 import org.apache.lucene.document.Fieldable;
29 import org.apache.lucene.search.Similarity;
30 import org.apache.lucene.store.Directory;
31
32 public class TestSegmentReader extends LuceneTestCase {
33   private Directory dir;
34   private Document testDoc = new Document();
35   private SegmentReader reader = null;
36   
37   //TODO: Setup the reader w/ multiple documents
38   @Override
39   public void setUp() throws Exception {
40     super.setUp();
41     dir = newDirectory();
42     DocHelper.setupDoc(testDoc);
43     SegmentInfo info = DocHelper.writeDoc(random, dir, testDoc);
44     reader = SegmentReader.get(true, info, IndexReader.DEFAULT_TERMS_INDEX_DIVISOR);
45   }
46   
47   @Override
48   public void tearDown() throws Exception {
49     reader.close();
50     dir.close();
51     super.tearDown();
52   }
53
54   public void test() {
55     assertTrue(dir != null);
56     assertTrue(reader != null);
57     assertTrue(DocHelper.nameValues.size() > 0);
58     assertTrue(DocHelper.numFields(testDoc) == DocHelper.all.size());
59   }
60   
61   public void testDocument() throws IOException {
62     assertTrue(reader.numDocs() == 1);
63     assertTrue(reader.maxDoc() >= 1);
64     Document result = reader.document(0);
65     assertTrue(result != null);
66     //There are 2 unstored fields on the document that are not preserved across writing
67     assertTrue(DocHelper.numFields(result) == DocHelper.numFields(testDoc) - DocHelper.unstored.size());
68     
69     List<Fieldable> fields = result.getFields();
70     for (final Fieldable field : fields ) { 
71       assertTrue(field != null);
72       assertTrue(DocHelper.nameValues.containsKey(field.name()));
73     }
74   }
75   
76   public void testDelete() throws IOException {
77     Document docToDelete = new Document();
78     DocHelper.setupDoc(docToDelete);
79     SegmentInfo info = DocHelper.writeDoc(random, dir, docToDelete);
80     SegmentReader deleteReader = SegmentReader.get(false, info, IndexReader.DEFAULT_TERMS_INDEX_DIVISOR);
81     assertTrue(deleteReader != null);
82     assertTrue(deleteReader.numDocs() == 1);
83     deleteReader.deleteDocument(0);
84     assertTrue(deleteReader.isDeleted(0) == true);
85     assertTrue(deleteReader.hasDeletions() == true);
86     assertTrue(deleteReader.numDocs() == 0);
87     deleteReader.close();
88   }    
89   
90   public void testGetFieldNameVariations() {
91     Collection<String> result = reader.getFieldNames(IndexReader.FieldOption.ALL);
92     assertTrue(result != null);
93     assertTrue(result.size() == DocHelper.all.size());
94     for (Iterator<String> iter = result.iterator(); iter.hasNext();) {
95       String s =  iter.next();
96       //System.out.println("Name: " + s);
97       assertTrue(DocHelper.nameValues.containsKey(s) == true || s.equals(""));
98     }                                                                               
99     result = reader.getFieldNames(IndexReader.FieldOption.INDEXED);
100     assertTrue(result != null);
101     assertTrue(result.size() == DocHelper.indexed.size());
102     for (Iterator<String> iter = result.iterator(); iter.hasNext();) {
103       String s = iter.next();
104       assertTrue(DocHelper.indexed.containsKey(s) == true || s.equals(""));
105     }
106     
107     result = reader.getFieldNames(IndexReader.FieldOption.UNINDEXED);
108     assertTrue(result != null);
109     assertTrue(result.size() == DocHelper.unindexed.size());
110     //Get all indexed fields that are storing term vectors
111     result = reader.getFieldNames(IndexReader.FieldOption.INDEXED_WITH_TERMVECTOR);
112     assertTrue(result != null);
113     assertTrue(result.size() == DocHelper.termvector.size());
114     
115     result = reader.getFieldNames(IndexReader.FieldOption.INDEXED_NO_TERMVECTOR);
116     assertTrue(result != null);
117     assertTrue(result.size() == DocHelper.notermvector.size());
118   } 
119   
120   public void testTerms() throws IOException {
121     TermEnum terms = reader.terms();
122     assertTrue(terms != null);
123     while (terms.next() == true)
124     {
125       Term term = terms.term();
126       assertTrue(term != null);
127       //System.out.println("Term: " + term);
128       String fieldValue = (String)DocHelper.nameValues.get(term.field());
129       assertTrue(fieldValue.indexOf(term.text()) != -1);
130     }
131     
132     TermDocs termDocs = reader.termDocs();
133     assertTrue(termDocs != null);
134     termDocs.seek(new Term(DocHelper.TEXT_FIELD_1_KEY, "field"));
135     assertTrue(termDocs.next() == true);
136
137     termDocs.seek(new Term(DocHelper.NO_NORMS_KEY,  DocHelper.NO_NORMS_TEXT));
138     assertTrue(termDocs.next() == true);
139
140     
141     TermPositions positions = reader.termPositions();
142     assertTrue(positions != null);
143     positions.seek(new Term(DocHelper.TEXT_FIELD_1_KEY, "field"));
144     assertTrue(positions.doc() == 0);
145     assertTrue(positions.nextPosition() >= 0);
146   }    
147   
148   public void testNorms() throws IOException {
149     //TODO: Not sure how these work/should be tested
150 /*
151     try {
152       byte [] norms = reader.norms(DocHelper.TEXT_FIELD_1_KEY);
153       System.out.println("Norms: " + norms);
154       assertTrue(norms != null);
155     } catch (IOException e) {
156       e.printStackTrace();
157       assertTrue(false);
158     }
159 */
160
161     checkNorms(reader);
162   }
163
164   public static void checkNorms(IndexReader reader) throws IOException {
165         // test omit norms
166     for (int i=0; i<DocHelper.fields.length; i++) {
167       Fieldable f = DocHelper.fields[i];
168       if (f.isIndexed()) {
169         assertEquals(reader.hasNorms(f.name()), !f.getOmitNorms());
170         assertEquals(reader.hasNorms(f.name()), !DocHelper.noNorms.containsKey(f.name()));
171         if (!reader.hasNorms(f.name())) {
172           // test for fake norms of 1.0 or null depending on the flag
173           byte [] norms = reader.norms(f.name());
174           byte norm1 = Similarity.getDefault().encodeNormValue(1.0f);
175           assertNull(norms);
176           norms = new byte[reader.maxDoc()];
177           reader.norms(f.name(),norms, 0);
178           for (int j=0; j<reader.maxDoc(); j++) {
179             assertEquals(norms[j], norm1);
180           }
181         }
182       }
183     }
184   }
185   
186   public void testTermVectors() throws IOException {
187     TermFreqVector result = reader.getTermFreqVector(0, DocHelper.TEXT_FIELD_2_KEY);
188     assertTrue(result != null);
189     String [] terms = result.getTerms();
190     int [] freqs = result.getTermFrequencies();
191     assertTrue(terms != null && terms.length == 3 && freqs != null && freqs.length == 3);
192     for (int i = 0; i < terms.length; i++) {
193       String term = terms[i];
194       int freq = freqs[i];
195       assertTrue(DocHelper.FIELD_2_TEXT.indexOf(term) != -1);
196       assertTrue(freq > 0);
197     }
198
199     TermFreqVector [] results = reader.getTermFreqVectors(0);
200     assertTrue(results != null);
201     assertTrue("We do not have 3 term freq vectors, we have: " + results.length, results.length == 3);      
202   }    
203 }