/*
* 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.core;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.TermQuery;
import org.easymock.MockControl;
import org.easymock.classextension.MockClassControl;
import org.springmodules.lucene.AbstractLuceneTestCase;
import org.springmodules.lucene.index.LuceneIndexingException;
import org.springmodules.lucene.index.document.handler.AbstractDocumentHandler;
import org.springmodules.lucene.index.document.handler.DefaultDocumentHandlerManager;
import org.springmodules.lucene.index.document.handler.DocumentHandler;
import org.springmodules.lucene.index.document.handler.DocumentHandlerManager;
import org.springmodules.lucene.index.document.handler.IdentityDocumentMatching;
import org.springmodules.lucene.index.document.handler.file.AbstractInputStreamDocumentHandler;
import org.springmodules.lucene.index.factory.IndexFactory;
import org.springmodules.lucene.index.factory.LuceneIndexReader;
import org.springmodules.lucene.index.factory.LuceneIndexWriter;
import org.springmodules.lucene.search.factory.LuceneHits;
import org.springmodules.lucene.search.factory.LuceneSearcher;
/**
* @author Brian McCallister
* @author Thierry Templier
*/
public class DefaultLuceneIndexTemplateTests extends AbstractLuceneTestCase {
/*
* Test for void deleteDocument(int)
*/
final public void testDeleteDocumentint() throws Exception {
SimpleAnalyzer analyzer = new SimpleAnalyzer();
MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
MockControl indexReaderControl = MockControl.createStrictControl(LuceneIndexReader.class);
LuceneIndexReader indexReader = (LuceneIndexReader)indexReaderControl.getMock();
indexFactory.getIndexReader();
indexFactoryControl.setReturnValue(indexReader, 1);
indexReader.deleteDocument(0);
indexReaderControl.setVoidCallable(1);
indexReader.close();
indexReaderControl.setVoidCallable(1);
indexFactoryControl.replay();
indexReaderControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
template.deleteDocument(0);
indexFactoryControl.verify();
indexReaderControl.verify();
}
/*
* Test for void deleteDocument(Term)
*/
final public void testDeleteDocumentTerm() throws Exception {
SimpleAnalyzer analyzer = new SimpleAnalyzer();
MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
MockControl indexReaderControl = MockControl.createStrictControl(LuceneIndexReader.class);
LuceneIndexReader indexReader = (LuceneIndexReader)indexReaderControl.getMock();
indexFactory.getIndexReader();
indexFactoryControl.setReturnValue(indexReader, 1);
indexReader.deleteDocuments(new Term("field","lucene"));
indexReaderControl.setReturnValue(1, 1);
indexReader.close();
indexReaderControl.setVoidCallable(1);
indexFactoryControl.replay();
indexReaderControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
template.deleteDocuments(new Term("field","lucene"));
indexFactoryControl.verify();
indexReaderControl.verify();
}
final public void testUndeleteDocuments() throws Exception {
SimpleAnalyzer analyzer = new SimpleAnalyzer();
MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
MockControl indexReaderControl = MockControl.createStrictControl(LuceneIndexReader.class);
LuceneIndexReader indexReader = (LuceneIndexReader)indexReaderControl.getMock();
indexFactory.getIndexReader();
indexFactoryControl.setReturnValue(indexReader, 1);
indexReader.undeleteAll();
indexReaderControl.setVoidCallable(1);
indexReader.close();
indexReaderControl.setVoidCallable(1);
indexFactoryControl.replay();
indexReaderControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
template.undeleteDocuments();
indexFactoryControl.verify();
indexReaderControl.verify();
}
final public void testIsDeleted() throws Exception {
SimpleAnalyzer analyzer = new SimpleAnalyzer();
MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
MockControl indexReaderControl = MockControl.createStrictControl(LuceneIndexReader.class);
LuceneIndexReader indexReader = (LuceneIndexReader)indexReaderControl.getMock();
indexFactory.getIndexReader();
indexFactoryControl.setReturnValue(indexReader, 1);
indexReader.isDeleted(0);
indexReaderControl.setReturnValue(true, 1);
indexReader.close();
indexReaderControl.setVoidCallable(1);
indexFactoryControl.replay();
indexReaderControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
boolean deleted = template.isDeleted(0);
indexFactoryControl.verify();
indexReaderControl.verify();
assertTrue(deleted);
}
final public void testHasDeletions() throws Exception {
SimpleAnalyzer analyzer = new SimpleAnalyzer();
MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
MockControl indexReaderControl = MockControl.createStrictControl(LuceneIndexReader.class);
LuceneIndexReader indexReader = (LuceneIndexReader)indexReaderControl.getMock();
indexFactory.getIndexReader();
indexFactoryControl.setReturnValue(indexReader, 1);
indexReader.hasDeletions();
indexReaderControl.setReturnValue(true, 1);
indexReader.close();
indexReaderControl.setVoidCallable(1);
indexFactoryControl.replay();
indexReaderControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
boolean deletions = template.hasDeletions();
indexFactoryControl.verify();
indexReaderControl.verify();
assertTrue(deletions);
}
final public void testGetMaxDoc() throws Exception {
SimpleAnalyzer analyzer = new SimpleAnalyzer();
MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
MockControl indexReaderControl = MockControl.createStrictControl(LuceneIndexReader.class);
LuceneIndexReader indexReader = (LuceneIndexReader)indexReaderControl.getMock();
indexFactory.getIndexReader();
indexFactoryControl.setReturnValue(indexReader, 1);
indexReader.maxDoc();
indexReaderControl.setReturnValue(3, 1);
indexReader.close();
indexReaderControl.setVoidCallable(1);
indexFactoryControl.replay();
indexReaderControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
int maxDoc = template.getMaxDoc();
indexFactoryControl.verify();
indexReaderControl.verify();
assertEquals(maxDoc, 3);
}
final public void testGetNumDocs() throws Exception {
SimpleAnalyzer analyzer = new SimpleAnalyzer();
MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
MockControl indexReaderControl = MockControl.createStrictControl(LuceneIndexReader.class);
LuceneIndexReader indexReader = (LuceneIndexReader)indexReaderControl.getMock();
indexFactory.getIndexReader();
indexFactoryControl.setReturnValue(indexReader, 1);
indexReader.numDocs();
indexReaderControl.setReturnValue(3, 1);
indexReader.close();
indexReaderControl.setVoidCallable(1);
indexFactoryControl.replay();
indexReaderControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
int numDoc = template.getNumDocs();
indexFactoryControl.verify();
indexReaderControl.verify();
assertEquals(numDoc, 3);
}
final public void testAddDocument() 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 documentCreatorControl = MockControl.createStrictControl(DocumentCreator.class);
DocumentCreator documentCreator = (DocumentCreator)documentCreatorControl.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);
documentCreator.createDocument();
documentCreatorControl.setReturnValue(document);
indexWriter.addDocument(document);
indexWriterControl.setVoidCallable(1);
indexWriter.close();
indexWriterControl.setVoidCallable(1);
indexFactoryControl.replay();
indexWriterControl.replay();
documentCreatorControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
template.addDocument(documentCreator);
indexFactoryControl.verify();
indexWriterControl.verify();
documentCreatorControl.verify();
}
final public void testAddDocumentWithInputStream() 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 documentCreatorControl = MockControl.createStrictControl(InputStreamDocumentCreator.class);
InputStreamDocumentCreator documentCreator = (InputStreamDocumentCreator)documentCreatorControl.getMock();
MockControl inputStreamControl = MockClassControl.createStrictControl(InputStream.class);
InputStream inputStream = (InputStream)inputStreamControl.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);
documentCreator.createInputStream();
documentCreatorControl.setReturnValue(inputStream, 1);
documentCreator.createDocumentFromInputStream(inputStream);
documentCreatorControl.setReturnValue(document, 1);
indexWriter.addDocument(document);
indexWriterControl.setVoidCallable(1);
inputStream.close();
inputStreamControl.setVoidCallable(1);
indexWriter.close();
indexWriterControl.setVoidCallable(1);
indexFactoryControl.replay();
indexWriterControl.replay();
documentCreatorControl.replay();
inputStreamControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
template.addDocument(documentCreator);
indexFactoryControl.verify();
indexWriterControl.verify();
documentCreatorControl.verify();
inputStreamControl.verify();
}
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());
}
final public void testAddDocumentWithInputStreamAndManager() throws Exception {
//Initialization of the index
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 documentHandlerManagerControl = MockControl.createStrictControl(DocumentHandlerManager.class);
DocumentHandlerManager documentHandlerManager = (DocumentHandlerManager)documentHandlerManagerControl.getMock();
MockControl documentHandlerControl = MockControl.createStrictControl(DocumentHandler.class);
DocumentHandler documentHandler = (DocumentHandler)documentHandlerControl.getMock();
MockControl inputStreamControl = MockClassControl.createStrictControl(InputStream.class);
final InputStream inputStream = (InputStream)inputStreamControl.getMock();
//file
final File file = getFileFromClasspath("test.txt");
final Map description = new HashMap();
description.put(AbstractInputStreamDocumentHandler.FILENAME, file.getPath());
//final FileInputStream inputStream = new FileInputStream(file);
//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);
//DocumentHandler documentHandler = documentHandlerManager.getDocumentHandler(getResourceName());
documentHandlerManager.getDocumentHandler(file.getPath());
documentHandlerManagerControl.setReturnValue(documentHandler, 1);
//Document document = documentHandler.getDocument(getResourceDescription(),inputStream);
documentHandler.getDocument(description, inputStream);
documentHandlerControl.setReturnValue(document, 1);
inputStream.close();
inputStreamControl.setVoidCallable(1);
indexWriter.addDocument(document);
indexWriterControl.setVoidCallable(1);
indexWriter.close();
indexWriterControl.setVoidCallable(1);
indexFactoryControl.replay();
indexWriterControl.replay();
documentHandlerManagerControl.replay();
documentHandlerControl.replay();
inputStreamControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory,analyzer);
final boolean[] called = {false, false, false};
template.addDocument(new InputStreamDocumentCreatorWithManager(documentHandlerManager) {
protected String getResourceName() {
called[0] = true;
return file.getPath();
}
protected Map getResourceDescription() {
called[1] = true;
return description;
}
public InputStream createInputStream() throws IOException {
called[2] = true;
return inputStream;
}
});
indexFactoryControl.verify();
indexWriterControl.verify();
inputStreamControl.verify();
documentHandlerManagerControl.verify();
documentHandlerControl.verify();
inputStreamControl.verify();
assertTrue(called[0]);
assertTrue(called[1]);
assertTrue(called[2]);
}
final public void testAddDocumentWithInputStreamAndManagerError() 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 documentHandlerManagerControl = MockControl.createStrictControl(DocumentHandlerManager.class);
DocumentHandlerManager documentHandlerManager = (DocumentHandlerManager)documentHandlerManagerControl.getMock();
MockControl documentHandlerControl = MockControl.createStrictControl(DocumentHandler.class);
DocumentHandler documentHandler = (DocumentHandler)documentHandlerControl.getMock();
MockControl inputStreamControl = MockClassControl.createStrictControl(InputStream.class);
final InputStream inputStream = (InputStream)inputStreamControl.getMock();
//file
final File file = getFileFromClasspath("test.foo");
final Map description = new HashMap();
description.put(AbstractInputStreamDocumentHandler.FILENAME, file.getPath());
//final FileInputStream inputStream = new FileInputStream(file);
//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);
//DocumentHandler documentHandler = documentHandlerManager.getDocumentHandler(getResourceName());
documentHandlerManager.getDocumentHandler(file.getPath());
documentHandlerManagerControl.setReturnValue(null, 1);
//Document document = documentHandler.getDocument(getResourceDescription(),inputStream);
/*documentHandler.getDocument(description, inputStream);
documentHandlerControl.setReturnValue(document, 1);*/
/*inputStream.close();
inputStreamControl.setVoidCallable(1);
indexWriter.addDocument(document);
indexWriterControl.setVoidCallable(1);
indexWriter.close();
indexWriterControl.setVoidCallable(1);*/
inputStream.close();
inputStreamControl.setVoidCallable(1);
indexFactoryControl.replay();
indexWriterControl.replay();
documentHandlerManagerControl.replay();
documentHandlerControl.replay();
inputStreamControl.replay();
//Lucene template
final boolean[] called = {false, false, false};
try {
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
template.addDocument(new InputStreamDocumentCreatorWithManager(documentHandlerManager) {
protected String getResourceName() {
called[0] = true;
return file.getPath();
}
protected Map getResourceDescription() {
called[1] = true;
return description;
}
public InputStream createInputStream() throws IOException {
called[2] = true;
return inputStream;
}
});
fail();
} catch(LuceneIndexingException ex) {
}
indexFactoryControl.verify();
indexWriterControl.verify();
inputStreamControl.verify();
documentHandlerManagerControl.verify();
documentHandlerControl.verify();
inputStreamControl.verify();
assertTrue(called[0]);
assertFalse(called[1]);
assertTrue(called[2]);
}
final public void testAddDocumentWithManager() 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();
DefaultDocumentHandlerManager manager = new DefaultDocumentHandlerManager();
//Object to index
final String text = "a text";
//document
final Document document = new Document();
document.add(new Field("text", text, Field.Store.YES, Field.Index.TOKENIZED));
final boolean[] called = {false, false};
manager.registerDocumentHandler(new IdentityDocumentMatching("java.lang.String"), new AbstractDocumentHandler() {
public boolean supports(Class clazz) {
called[0]=true;
return true;
}
protected Document doGetDocument(Map description, Object object) throws Exception {
called[1]=true;
return document;
}
});
indexFactory.getIndexWriter();
indexFactoryControl.setReturnValue(indexWriter, 1);
indexWriter.addDocument(document);
indexWriterControl.setVoidCallable(1);
indexWriter.close();
indexWriterControl.setVoidCallable(1);
indexFactoryControl.replay();
indexWriterControl.replay();
//Lucene template
LuceneIndexTemplate template=new DefaultLuceneIndexTemplate(indexFactory,analyzer);
template.addDocument(new DocumentCreatorWithManager(manager, text));
//Check if a writer has been opened
//Check if the writer calls the addDocument method
//Check if the writer of the template is closed
indexFactoryControl.verify();
indexWriterControl.verify();
//Check if the writer calls the getResourceName, getResourceDescription and
//createInputStream methods
assertTrue(called[0]);
assertTrue(called[1]);
}
final public void testAddDocumentWithManagerError() 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();
DefaultDocumentHandlerManager manager=new DefaultDocumentHandlerManager();
//Object to index
final String text="a text";
//document
final Document document = new Document();
document.add(new Field("text", text, Field.Store.YES, Field.Index.TOKENIZED));
final boolean[] called = {false, false};
manager.registerDocumentHandler(new IdentityDocumentMatching("text"), new AbstractDocumentHandler() {
public boolean supports(Class clazz) {
called[0] = true;
return true;
}
protected Document doGetDocument(Map description, Object object) throws Exception {
called[1] = true;
return document;
}
});
indexFactoryControl.replay();
indexWriterControl.replay();
try {
//Lucene template
LuceneIndexTemplate template=new DefaultLuceneIndexTemplate(indexFactory,analyzer);
template.addDocument(new DocumentCreatorWithManager(manager, text));
fail();
} catch(Exception ex) {
//Check if a writer has been opened
//Check if the writer calls the addDocument method
//Check if the writer of the template is closed
indexFactoryControl.verify();
indexWriterControl.verify();
//Check if the writer calls the getResourceName, getResourceDescription and
//createInputStream methods
assertFalse(called[0]);
assertFalse(called[1]);
}
}
final public void testAddDocumentWithManagerAndName() 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();
DefaultDocumentHandlerManager manager=new DefaultDocumentHandlerManager();
//Object to index
final String text="a text";
//document
final Document document = new Document();
document.add(new Field("text", text, Field.Store.YES, Field.Index.TOKENIZED));
final boolean[] called = {false, false};
manager.registerDocumentHandler(new IdentityDocumentMatching("text"), new AbstractDocumentHandler() {
public boolean supports(Class clazz) {
called[0] = true;
return true;
}
protected Document doGetDocument(Map description, Object object) throws Exception {
called[1] = true;
return document;
}
});
indexFactory.getIndexWriter();
indexFactoryControl.setReturnValue(indexWriter, 1);
indexWriter.addDocument(document);
indexWriterControl.setVoidCallable(1);
indexWriter.close();
indexWriterControl.setVoidCallable(1);
indexFactoryControl.replay();
indexWriterControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
template.addDocument(new DocumentCreatorWithManager(manager, "text", text));
//Check if a writer has been opened
//Check if the writer calls the addDocument method
//Check if the writer of the template is closed
indexFactoryControl.verify();
indexWriterControl.verify();
//Check if the writer calls the getResourceName, getResourceDescription and
//createInputStream methods
assertTrue(called[0]);
assertTrue(called[1]);
}
final public void testAddDocumentWithManagerAndNameError() 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();
DefaultDocumentHandlerManager manager=new DefaultDocumentHandlerManager();
//Object to index
final String text="a text";
//document
final Document document = new Document();
document.add(new Field("text", text, Field.Store.YES, Field.Index.TOKENIZED));
final boolean[] called = {false, false};
manager.registerDocumentHandler(new IdentityDocumentMatching("text1"), new AbstractDocumentHandler() {
public boolean supports(Class clazz) {
called[0] = true;
return true;
}
protected Document doGetDocument(Map description, Object object) throws Exception {
called[1] = true;
return document;
}
});
indexFactoryControl.replay();
indexWriterControl.replay();
try {
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
template.addDocument(new DocumentCreatorWithManager(manager, "text", text));
fail();
} catch(Exception ex) {
//Check if a writer has been opened
//Check if the writer calls the addDocument method
//Check if the writer of the template is closed
indexFactoryControl.verify();
indexWriterControl.verify();
//Check if the writer calls the getResourceName, getResourceDescription and
//createInputStream methods
assertFalse(called[0]);
assertFalse(called[1]);
}
}
final public void testAddDocuments() 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 documentsCreatorControl = MockControl.createStrictControl(DocumentsCreator.class);
DocumentsCreator documentsCreator = (DocumentsCreator)documentsCreatorControl.getMock();
//documents
List documents = new ArrayList();
Document document1 = new Document();
document1.add(new Field("field", "a sample", Field.Store.YES, Field.Index.TOKENIZED));
document1.add(new Field("filter", "a sample filter", Field.Store.YES, Field.Index.TOKENIZED));
document1.add(new Field("sort", "2", Field.Store.YES, Field.Index.UN_TOKENIZED));
documents.add(document1);
indexFactory.getIndexWriter();
indexFactoryControl.setReturnValue(indexWriter, 1);
documentsCreator.createDocuments();
documentsCreatorControl.setReturnValue(documents, 1);
indexWriter.addDocument(document1);
indexWriterControl.setVoidCallable();
indexWriter.close();
indexWriterControl.setVoidCallable(1);
indexFactoryControl.replay();
indexWriterControl.replay();
documentsCreatorControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory,analyzer);
template.addDocuments(documentsCreator);
indexFactoryControl.verify();
indexWriterControl.verify();
documentsCreatorControl.verify();
}
final public void testUpdateDocument() 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 indexReaderControl = MockControl.createStrictControl(LuceneIndexReader.class);
LuceneIndexReader indexReader = (LuceneIndexReader)indexReaderControl.getMock();
MockControl searcherControl = MockControl.createStrictControl(LuceneSearcher.class);
LuceneSearcher searcher = (LuceneSearcher)searcherControl.getMock();
MockControl documentModifierControl = MockControl.createStrictControl(DocumentModifier.class);
DocumentModifier documentModifier = (DocumentModifier)documentModifierControl.getMock();
MockControl hitsControl = MockControl.createStrictControl(LuceneHits.class);
LuceneHits hits = (LuceneHits)hitsControl.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));
Term term = new Term("id","2");
indexFactory.getIndexReader();
indexFactoryControl.setReturnValue(indexReader, 1);
indexReader.createSearcher();
indexReaderControl.setReturnValue(searcher);
searcher.search(new TermQuery(term));
searcherControl.setReturnValue(hits);
hits.length();
hitsControl.setReturnValue(1, 2);
hits.doc(0);
hitsControl.setReturnValue(document);
documentModifier.updateDocument(document);
documentModifierControl.setReturnValue(document, 1);
searcher.close();
searcherControl.setVoidCallable(1);
indexReader.close();
indexReaderControl.setVoidCallable(1);
indexFactory.getIndexReader();
indexFactoryControl.setReturnValue(indexReader, 1);
indexReader.deleteDocuments(term);
indexReaderControl.setReturnValue(1, 1);
indexReader.close();
indexReaderControl.setVoidCallable(1);
indexFactory.getIndexWriter();
indexFactoryControl.setReturnValue(indexWriter, 1);
indexWriter.addDocument(document);
indexWriterControl.setVoidCallable();
indexWriter.close();
indexWriterControl.setVoidCallable(1);
indexFactoryControl.replay();
indexReaderControl.replay();
indexWriterControl.replay();
searcherControl.replay();
documentModifierControl.replay();
hitsControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
template.updateDocument(term, documentModifier);
indexFactoryControl.verify();
indexReaderControl.verify();
indexWriterControl.verify();
searcherControl.verify();
documentModifierControl.verify();
hitsControl.verify();
}
final public void testUpdateDocuments() 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 indexReaderControl = MockControl.createStrictControl(LuceneIndexReader.class);
LuceneIndexReader indexReader = (LuceneIndexReader)indexReaderControl.getMock();
MockControl searcherControl = MockControl.createStrictControl(LuceneSearcher.class);
LuceneSearcher searcher = (LuceneSearcher)searcherControl.getMock();
MockControl documentsModifierControl = MockControl.createStrictControl(DocumentsModifier.class);
DocumentsModifier documentsModifier = (DocumentsModifier)documentsModifierControl.getMock();
MockControl hitsControl = MockControl.createStrictControl(LuceneHits.class);
LuceneHits hits = (LuceneHits)hitsControl.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));
Term term = new Term("id","2");
List documents = new ArrayList();
indexFactory.getIndexReader();
indexFactoryControl.setReturnValue(indexReader, 1);
indexReader.createSearcher();
indexReaderControl.setReturnValue(searcher);
searcher.search(new TermQuery(term));
searcherControl.setReturnValue(hits);
documentsModifier.updateDocuments(hits);
documentsModifierControl.setReturnValue(documents, 1);
searcher.close();
searcherControl.setVoidCallable(1);
indexReader.close();
indexReaderControl.setVoidCallable(1);
indexFactory.getIndexReader();
indexFactoryControl.setReturnValue(indexReader, 1);
indexReader.deleteDocuments(term);
indexReaderControl.setReturnValue(1, 1);
indexReader.close();
indexReaderControl.setVoidCallable(1);
indexFactory.getIndexWriter();
indexFactoryControl.setReturnValue(indexWriter, 1);
indexWriter.addDocument(document);
indexWriterControl.setVoidCallable();
indexWriter.close();
indexWriterControl.setVoidCallable(1);
indexFactoryControl.replay();
indexReaderControl.replay();
indexWriterControl.replay();
searcherControl.replay();
documentsModifierControl.replay();
hitsControl.replay();
}
final public void testOptimize() 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();
indexFactory.getIndexWriter();
indexFactoryControl.setReturnValue(indexWriter, 1);
indexWriter.optimize();
indexWriterControl.setVoidCallable(1);
indexWriter.close();
indexWriterControl.setVoidCallable(1);
indexFactoryControl.replay();
indexWriterControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
template.optimize();
indexFactoryControl.verify();
indexWriterControl.verify();
}
/*
* Test for Object read(ReaderCallback)
*/
final public void testRead() throws Exception {
SimpleAnalyzer analyzer = new SimpleAnalyzer();
MockControl indexFactoryControl = MockControl.createStrictControl(IndexFactory.class);
IndexFactory indexFactory = (IndexFactory)indexFactoryControl.getMock();
MockControl indexReaderControl = MockControl.createStrictControl(LuceneIndexReader.class);
LuceneIndexReader indexReader = (LuceneIndexReader)indexReaderControl.getMock();
MockControl readerCallbackControl = MockControl.createStrictControl(ReaderCallback.class);
ReaderCallback readerCallback = (ReaderCallback)readerCallbackControl.getMock();
indexFactory.getIndexReader();
indexFactoryControl.setReturnValue(indexReader, 1);
readerCallback.doWithReader(indexReader);
readerCallbackControl.setReturnValue("return", 1);
indexReader.close();
indexReaderControl.setVoidCallable(1);
indexFactoryControl.replay();
indexReaderControl.replay();
readerCallbackControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
Object ret = template.read(readerCallback);
indexFactoryControl.verify();
indexReaderControl.verify();
readerCallbackControl.verify();
assertEquals(ret, "return");
}
/*
* Test for Object write(WriterCallback)
*/
final public void testWrite() 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 writerCallbackControl = MockControl.createStrictControl(WriterCallback.class);
WriterCallback writerCallback = (WriterCallback)writerCallbackControl.getMock();
indexFactory.getIndexWriter();
indexFactoryControl.setReturnValue(indexWriter, 1);
writerCallback.doWithWriter(indexWriter);
writerCallbackControl.setReturnValue("return", 1);
indexWriter.close();
indexWriterControl.setVoidCallable(1);
indexFactoryControl.replay();
indexWriterControl.replay();
writerCallbackControl.replay();
//Lucene template
LuceneIndexTemplate template = new DefaultLuceneIndexTemplate(indexFactory, analyzer);
Object ret = template.write(writerCallback);
indexFactoryControl.verify();
indexWriterControl.verify();
writerCallbackControl.verify();
assertEquals(ret, "return");
}
}