Package org.springmodules.lucene.index.object.directory

Source Code of org.springmodules.lucene.index.object.directory.DirectoryIndexerTests

/*
* Copyright 2002-2007 the original author or authors.
*
* Licensed 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.springmodules.lucene.index.object.directory;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Map;

import junit.framework.TestCase;

import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.store.RAMDirectory;
import org.easymock.AbstractMatcher;
import org.easymock.MockControl;
import org.springmodules.lucene.index.LuceneIndexingException;
import org.springmodules.lucene.index.document.handler.DocumentHandler;
import org.springmodules.lucene.index.document.handler.DocumentMatching;
import org.springmodules.lucene.index.document.handler.file.ExtensionDocumentMatching;
import org.springmodules.lucene.index.document.handler.file.TextDocumentHandler;
import org.springmodules.lucene.index.factory.IndexFactory;
import org.springmodules.lucene.index.factory.LuceneIndexWriter;

/**
* @author Thierry Templier
*/
public class DirectoryIndexerTests extends TestCase {

  private RAMDirectory directory;

  /**
   * @see junit.framework.TestCase#setUp()
   */
  protected void setUp() throws Exception {
    //Initialization of the index
    this.directory = new RAMDirectory();
  }

  /**
   * @see junit.framework.TestCase#tearDown()
   */
  protected void tearDown() throws Exception {
    this.directory = null;
  }

  final public void testRegisterDocumentHandler() {
    SimpleAnalyzer analyzer = new SimpleAnalyzer();
    MockControl indexFactoryControl = MockControl.createControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();

    indexFactoryControl.replay();
   
    //Indexer
    DefaultDirectoryIndexer indexer = new DefaultDirectoryIndexer(indexFactory);

    //Register a document handler
    DocumentMatching matching = new DocumentMatching() {
      public boolean match(String name) {
        return name.equals("test");
      }
    };

    //Check that the document handler test is not found
    try {
      assertNull(indexer.getDocumentHandler("test"));
      fail();
    } catch(Exception ex) {}

    //Register a document handler
    indexer.registerDocumentHandler(matching,new DocumentHandler() {
      public Document getDocument(Map description, Object object) throws IOException {
        return null;
      }

      public boolean supports(Class clazz) {
        return true;
      }
    });

    //Check that the document handler test is found now
    try {
      assertNotNull(indexer.getDocumentHandler("test"));
    } catch(Exception ex) {
      fail();
    }

    indexFactoryControl.verify();
  }

  final public void testUnregisterDocumentHandler() {
    SimpleAnalyzer analyzer = new SimpleAnalyzer();
    MockControl indexFactoryControl = MockControl.createControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();

    indexFactoryControl.replay();
   
    //Indexer
    DefaultDirectoryIndexer indexer=new DefaultDirectoryIndexer(indexFactory);

    //Register a document handler
    DocumentMatching matching=new DocumentMatching() {
      public boolean match(String name) {
        return name.equals("test");
      }
    };

    //Register a document handler
    indexer.registerDocumentHandler(matching,new DocumentHandler() {
      public Document getDocument(Map description, Object object) throws IOException {
        return null;
      }

      public boolean supports(Class clazz) {
        return true;
      }
    });

    //Check that the document handler test is found
    try {
      assertNotNull(indexer.getDocumentHandler("test"));
    } catch(Exception ex) {
      fail();
    }

    //Unregister a document handler
    indexer.unregisterDocumentHandler(matching);

    //Check that the document handler test is not found now
    try {
      assertNull(indexer.getDocumentHandler("test"));
      fail();
    } catch(Exception ex) {}

    indexFactoryControl.verify();
  }

  final public void testAddListener() {
    SimpleAnalyzer analyzer = new SimpleAnalyzer();
    MockControl indexFactoryControl = MockControl.createControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();

    indexFactoryControl.replay();
   
    //Indexer
    DefaultDirectoryIndexer indexer=new DefaultDirectoryIndexer(indexFactory);

    //Register a document handler
    assertEquals(indexer.getListeners().size(), 0);

    FileDocumentIndexingListener listener = new FileDocumentIndexingListenerAdapter();
    indexer.addListener(listener);
    assertEquals(indexer.getListeners().size(), 1);
    FileDocumentIndexingListener tmpListener = (FileDocumentIndexingListener)indexer.getListeners().get(0);
    assertEquals(listener, tmpListener);

    indexFactoryControl.verify();
  }

  final public void testRemoveListener() {
    SimpleAnalyzer analyzer = new SimpleAnalyzer();
    MockControl indexFactoryControl = MockControl.createControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();

    indexFactoryControl.replay();
   
    //Indexer
    DefaultDirectoryIndexer indexer = new DefaultDirectoryIndexer(indexFactory);

    //Register a document handler
    FileDocumentIndexingListener listener = new FileDocumentIndexingListenerAdapter();
    indexer.addListener(listener);
    assertEquals(indexer.getListeners().size(), 1);
    FileDocumentIndexingListener tmpListener = (FileDocumentIndexingListener)indexer.getListeners().get(0);
    assertEquals(listener, tmpListener);

    //Unregister a document handler
    indexer.removeListener(listener);
    assertEquals(indexer.getListeners().size(), 0);

    indexFactoryControl.verify();
  }

  private File getBaseDirectoryToIndex() {
    URL url = getClass().getClassLoader().getResource(
          "org/springmodules/lucene/index/object/files/");
    if( url==null ) {
      return null;
    }

    String filename = url.getFile();
    return new File(filename);
  }

  private File getFileFromClasspath(String filename) {
    URL url = getClass().getClassLoader().getResource(
          "org/springmodules/lucene/index/object/files/"+filename);
    if( url==null ) {
      return null;
    }

    return new File(url.getFile());
  }

  /*
   * Test pour void index(String)
   */
  final public void testIndexString() throws Exception {
    SimpleAnalyzer analyzer = new SimpleAnalyzer();
    MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
    MockControl indexWriterControl = MockControl.createStrictControl(LuceneIndexWriter.class);
    LuceneIndexWriter indexWriter = (LuceneIndexWriter)indexWriterControl.getMock();
    MockControl listenerControl = MockControl.createStrictControl(FileDocumentIndexingListener.class);
    FileDocumentIndexingListener listener = (FileDocumentIndexingListener)listenerControl.getMock();

    //document
    Document document = new Document();
    document.add(new Field("field", "a sample", Field.Store.YES, Field.Index.TOKENIZED));
    document.add(new Field("filter", "a sample filter", Field.Store.YES, Field.Index.TOKENIZED));
    document.add(new Field("sort", "2", Field.Store.YES, Field.Index.UN_TOKENIZED));

    indexFactory.getIndexWriter();
    indexFactoryControl.setReturnValue(indexWriter, 1);
   
    listener.beforeIndexingDirectory(getBaseDirectoryToIndex());
    listenerControl.setVoidCallable(1);

    listener.beforeIndexingFile(getFileFromClasspath("test.foo"));
    listenerControl.setVoidCallable(1);

    listener.onNotAvailableHandler(getFileFromClasspath("test.foo"));
    listenerControl.setVoidCallable(1);

    listener.beforeIndexingFile(getFileFromClasspath("test.txt"));
    listenerControl.setVoidCallable(1);

    indexWriter.addDocument(document);
    indexWriterControl.setMatcher(new AbstractMatcher() {
      protected boolean argumentMatches(Object expected, Object actual) {
        if( expected instanceof Document && actual instanceof Document ) {
          return true;
        } else {
          return expected.equals(actual);
        }
      }
    });
    indexWriterControl.setVoidCallable(1);
   
    listener.afterIndexingFile(getFileFromClasspath("test.txt"));
    listenerControl.setVoidCallable(1);

    listener.afterIndexingDirectory(getBaseDirectoryToIndex());
    listenerControl.setVoidCallable(1);

    indexWriter.close();
    indexWriterControl.setVoidCallable(1);
   
    indexFactoryControl.replay();
    indexWriterControl.replay();
    listenerControl.replay();

    //Indexer
    DefaultDirectoryIndexer indexer = new DefaultDirectoryIndexer(indexFactory);
    indexer.addListener(listener);
    File baseDirectory = getBaseDirectoryToIndex();
    indexer.index(baseDirectory.getAbsolutePath());

    indexFactoryControl.verify();
    indexWriterControl.verify();
    listenerControl.verify();
  }

  /*
   * Test for void index(String) with document handler registered
   */
  final public void testIndexStringDocumentHandler() throws Exception {
    SimpleAnalyzer analyzer = new SimpleAnalyzer();
    MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
    MockControl indexWriterControl = MockControl.createStrictControl(LuceneIndexWriter.class);
    LuceneIndexWriter indexWriter = (LuceneIndexWriter)indexWriterControl.getMock();
    MockControl listenerControl = MockControl.createStrictControl(FileDocumentIndexingListener.class);
    FileDocumentIndexingListener listener = (FileDocumentIndexingListener)listenerControl.getMock();

    //document
    Document document = new Document();
    document.add(new Field("field", "a sample", Field.Store.YES, Field.Index.TOKENIZED));
    document.add(new Field("filter", "a sample filter", Field.Store.YES, Field.Index.TOKENIZED));
    document.add(new Field("sort", "2", Field.Store.YES, Field.Index.UN_TOKENIZED));

    indexFactory.getIndexWriter();
    indexFactoryControl.setReturnValue(indexWriter, 1);
   
    listener.beforeIndexingDirectory(getBaseDirectoryToIndex());
    listenerControl.setVoidCallable(1);

    listener.beforeIndexingFile(getFileFromClasspath("test.foo"));
    listenerControl.setVoidCallable(1);

    indexWriter.addDocument(document);
    indexWriterControl.setMatcher(new AbstractMatcher() {
      protected boolean argumentMatches(Object expected, Object actual) {
        if( expected instanceof Document && actual instanceof Document ) {
          return true;
        } else {
          return expected.equals(actual);
        }
      }
    });
    indexWriterControl.setVoidCallable(1);
   
    listener.afterIndexingFile(getFileFromClasspath("test.foo"));
    listenerControl.setVoidCallable(1);

    listener.beforeIndexingFile(getFileFromClasspath("test.txt"));
    listenerControl.setVoidCallable(1);

    indexWriter.addDocument(document);
    indexWriterControl.setVoidCallable(1);
   
    listener.afterIndexingFile(getFileFromClasspath("test.txt"));
    listenerControl.setVoidCallable(1);

    listener.afterIndexingDirectory(getBaseDirectoryToIndex());
    listenerControl.setVoidCallable(1);

    indexWriter.close();
    indexWriterControl.setVoidCallable(1);
   
    indexFactoryControl.replay();
    indexWriterControl.replay();
    listenerControl.replay();

    //Indexer
    DefaultDirectoryIndexer indexer = new DefaultDirectoryIndexer(indexFactory);
    indexer.registerDocumentHandler(new ExtensionDocumentMatching("foo"),
                    new TextDocumentHandler());
    indexer.addListener(listener);
    File baseDirectory = getBaseDirectoryToIndex();
    indexer.index(baseDirectory.getAbsolutePath());

    indexFactoryControl.verify();
    indexWriterControl.verify();
    listenerControl.verify();
  }

  /*
   * Test pour void index(String) with document handler registered
   */
  final public void testIndexStringListener() throws Exception {
    SimpleAnalyzer analyzer = new SimpleAnalyzer();
    MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
    MockControl indexWriterControl = MockControl.createStrictControl(LuceneIndexWriter.class);
    LuceneIndexWriter indexWriter = (LuceneIndexWriter)indexWriterControl.getMock();
    MockControl listener1Control = MockControl.createStrictControl(FileDocumentIndexingListener.class);
    FileDocumentIndexingListener listener1 = (FileDocumentIndexingListener)listener1Control.getMock();
    MockControl listener2Control = MockControl.createStrictControl(FileDocumentIndexingListener.class);
    FileDocumentIndexingListener listener2 = (FileDocumentIndexingListener)listener2Control.getMock();

    //document
    Document document = new Document();
    document.add(new Field("field", "a sample", Field.Store.YES, Field.Index.TOKENIZED));
    document.add(new Field("filter", "a sample filter", Field.Store.YES, Field.Index.TOKENIZED));
    document.add(new Field("sort", "2", Field.Store.YES, Field.Index.UN_TOKENIZED));

    indexFactory.getIndexWriter();
    indexFactoryControl.setReturnValue(indexWriter, 1);
   
    listener1.beforeIndexingDirectory(getBaseDirectoryToIndex());
    listener1Control.setVoidCallable(1);

    listener2.beforeIndexingDirectory(getBaseDirectoryToIndex());
    listener2Control.setVoidCallable(1);

    listener1.beforeIndexingFile(getFileFromClasspath("test.foo"));
    listener1Control.setVoidCallable(1);

    listener2.beforeIndexingFile(getFileFromClasspath("test.foo"));
    listener2Control.setVoidCallable(1);

    listener1.onNotAvailableHandler(getFileFromClasspath("test.foo"));
    listener1Control.setVoidCallable(1);

    listener2.onNotAvailableHandler(getFileFromClasspath("test.foo"));
    listener2Control.setVoidCallable(1);

    listener1.beforeIndexingFile(getFileFromClasspath("test.txt"));
    listener1Control.setVoidCallable(1);

    listener2.beforeIndexingFile(getFileFromClasspath("test.txt"));
    listener2Control.setVoidCallable(1);

    indexWriter.addDocument(document);
    indexWriterControl.setMatcher(new AbstractMatcher() {
      protected boolean argumentMatches(Object expected, Object actual) {
        if( expected instanceof Document && actual instanceof Document ) {
          return true;
        } else {
          return expected.equals(actual);
        }
      }
    });
    indexWriterControl.setVoidCallable(1);
   
    listener1.afterIndexingFile(getFileFromClasspath("test.txt"));
    listener1Control.setVoidCallable(1);

    listener2.afterIndexingFile(getFileFromClasspath("test.txt"));
    listener2Control.setVoidCallable(1);

    listener1.afterIndexingDirectory(getBaseDirectoryToIndex());
    listener1Control.setVoidCallable(1);

    listener2.afterIndexingDirectory(getBaseDirectoryToIndex());
    listener2Control.setVoidCallable(1);

    indexWriter.close();
    indexWriterControl.setVoidCallable(1);
   
    indexFactoryControl.replay();
    indexWriterControl.replay();
    listener1Control.replay();
    listener2Control.replay();

    //Indexer
    DefaultDirectoryIndexer indexer = new DefaultDirectoryIndexer(indexFactory);
    indexer.addListener(listener1);
    indexer.addListener(listener2);
    File baseDirectory = getBaseDirectoryToIndex();
    indexer.index(baseDirectory.getAbsolutePath());

    indexFactoryControl.verify();
    indexWriterControl.verify();
    listener1Control.verify();
    listener2Control.verify();
  }

  /*
   * Test pour void index(String, boolean)
   */
  final public void testIndexStringboolean() throws Exception {
    SimpleAnalyzer analyzer = new SimpleAnalyzer();
    MockControl indexFactoryControl = MockControl.createNiceControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
    MockControl indexWriterControl = MockControl.createNiceControl(LuceneIndexWriter.class);
    LuceneIndexWriter indexWriter = (LuceneIndexWriter)indexWriterControl.getMock();
    MockControl listenerControl = MockControl.createNiceControl(FileDocumentIndexingListener.class);
    FileDocumentIndexingListener listener = (FileDocumentIndexingListener)listenerControl.getMock();

    //document
    Document document = new Document();
    document.add(new Field("field", "a sample", Field.Store.YES, Field.Index.TOKENIZED));
    document.add(new Field("filter", "a sample filter", Field.Store.YES, Field.Index.TOKENIZED));
    document.add(new Field("sort", "2", Field.Store.YES, Field.Index.UN_TOKENIZED));

    indexFactory.getIndexWriter();
    indexFactoryControl.setReturnValue(indexWriter, 1);
   
    listener.beforeIndexingDirectory(getBaseDirectoryToIndex());
    listenerControl.setVoidCallable(1);

    listener.beforeIndexingFile(getFileFromClasspath("test.foo"));
    listenerControl.setVoidCallable(1);

    listener.onNotAvailableHandler(getFileFromClasspath("test.foo"));
    listenerControl.setVoidCallable(1);

    listener.beforeIndexingFile(getFileFromClasspath("test.txt"));
    listenerControl.setVoidCallable(1);

    indexWriter.addDocument(document);
    indexWriterControl.setMatcher(new AbstractMatcher() {
      protected boolean argumentMatches(Object expected, Object actual) {
        if( expected instanceof Document && actual instanceof Document ) {
          return true;
        } else {
          return expected.equals(actual);
        }
      }
    });
    indexWriterControl.setVoidCallable(1);
   
    listener.afterIndexingFile(getFileFromClasspath("test.txt"));
    listenerControl.setVoidCallable(1);

    listener.afterIndexingDirectory(getBaseDirectoryToIndex());
    listenerControl.setVoidCallable(1);

    indexWriter.optimize();
    indexWriterControl.setVoidCallable(1);
   
    indexWriter.close();
    indexWriterControl.setVoidCallable(1);
   
    indexFactoryControl.replay();
    indexWriterControl.replay();
    listenerControl.replay();

    //Indexer
    DefaultDirectoryIndexer indexer = new DefaultDirectoryIndexer(indexFactory);
    indexer.addListener(listener);
    File baseDirectory = getBaseDirectoryToIndex();
    indexer.index(baseDirectory.getAbsolutePath(), true);

    indexFactoryControl.verify();
    indexWriterControl.verify();
    listenerControl.verify();
  }

  /*
   * Test pour void index(String)
   */
  final public void testIndexStringIfDirectoryNotExist() throws Exception {
    SimpleAnalyzer analyzer = new SimpleAnalyzer();
    MockControl indexFactoryControl = MockControl.createControl(IndexFactory.class);
    IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();

    indexFactoryControl.replay();
   
    //Indexer
    DefaultDirectoryIndexer indexer = new DefaultDirectoryIndexer(indexFactory);
    File baseDirectory = getBaseDirectoryToIndex();
    File wrongBaseDirectory = new File(baseDirectory.getCanonicalPath()+"/test");

    try {
      indexer.index(wrongBaseDirectory.getAbsolutePath());
      fail();
    } catch(LuceneIndexingException ex) {
    }
   
    indexFactoryControl.verify();
  }
}
TOP

Related Classes of org.springmodules.lucene.index.object.directory.DirectoryIndexerTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.