MultiReader.isCurrent() wrong behavior

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

MultiReader.isCurrent() wrong behavior

Volodymyr Bychkoviak
if MultiReader is constructed from array of subreaders (using publis
constructor) then calling isCurrent() method will throw
NullPointerException.

Testcase is attached below:
//-begin -----TestMultiReaderIsCurrent.java ----------
package org.apache.lucene.index;

import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;

import junit.framework.TestCase;

public class TestMultiReaderIsCurrent extends TestCase {

  private Directory dir1 = new RAMDirectory();

  private Directory dir2 = new RAMDirectory();

  public void testIsCurrent() throws IOException {
    addDocument(dir1, "test1", true);
    addDocument(dir2, "test2", true);

    IndexReader ir1 = IndexReader.open(dir1);
    IndexReader ir2 = IndexReader.open(dir2);

    IndexReader mr = new MultiReader(new IndexReader[] {ir1, ir2});

    assertTrue("should be true", ir1.isCurrent());
    assertTrue("should be true", ir2.isCurrent());

    try {
      assertTrue("should be true", mr.isCurrent());
    } catch (RuntimeException e) {
      fail("no exception should be thrown: " + e.toString());
    }

    addDocument(dir1, "test3", false);

    assertFalse("should be false", ir1.isCurrent());
    assertTrue("should be true", ir2.isCurrent());

    try {
      assertFalse("should false", mr.isCurrent());
    } catch (RuntimeException e) {
      fail("no exception should be thrown: " + e.toString());
    }
  }

  private void addDocument(Directory dir12, String string, boolean
create) throws IOException {
    IndexWriter iw = new IndexWriter(dir12, new StandardAnalyzer(), create);
    Document document = new Document();
    document.add(new Field("data", string, Store.YES, Index.TOKENIZED));
    iw.addDocument(document);
    iw.close();
  }

}
//-end -----TestMultiReaderIsCurrent.java ----------

--
regards,
Volodymyr Bychkoviak