blob: b9f364d3881efe569461fa8ae4b277be7cf05189 [file]
/*------------------------------------------------------------------------------
* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
*
* Distributable under the terms of either the Apache License (Version 2.0) or
* the GNU Lesser General Public License, as specified in the COPYING file.
------------------------------------------------------------------------------*/
#include "test.h"
#ifndef NO_WILDCARD_QUERY
void _testWildcard(CuTest* tc, IndexSearcher* searcher, const TCHAR* qt, int expectedLen){
Term* term = _CLNEW Term(_T("body"), qt);
Query* query = _CLNEW WildcardQuery(term);
//test the wildcardquery
Hits* result = searcher->search(query);
CLUCENE_ASSERT(expectedLen == result->length());
_CLDELETE(result);
_CLDELETE(query);
//now test wildcardfilter
Filter* filter = _CLNEW WildcardFilter(term);
BitSet* bits = filter->bits(searcher->getReader());
CLUCENE_ASSERT(expectedLen == bits->count());
_CLDELETE(filter);
_CLDELETE(bits);
_CLDECDELETE(term);
}
void testAsterisk(CuTest *tc){
RAMDirectory indexStore;
SimpleAnalyzer<TCHAR> an;
IndexWriter* writer = _CLNEW IndexWriter(&indexStore, &an, true);
Document doc1;
Document doc2;
doc1.add(*_CLNEW Field(_T("body"), _T("metal"),Field::STORE_YES | Field::INDEX_TOKENIZED));
doc2.add(*_CLNEW Field(_T("body"), _T("metals"),Field::STORE_YES | Field::INDEX_TOKENIZED));
writer->addDocument(&doc1);
writer->addDocument(&doc2);
writer->close();
_CLDELETE(writer);
//////////////////////////////////////////////////
IndexReader* reader = IndexReader::open(&indexStore);
IndexSearcher* searcher = _CLNEW IndexSearcher(reader);
_testWildcard(tc, searcher, _T("metal*"), 2);
_testWildcard(tc, searcher, _T("m*tal"), 1);
_testWildcard(tc, searcher, _T("m*tal*"), 2);
Term* term = _CLNEW Term(_T("body"), _T("metal"));
Query* query1 = _CLNEW TermQuery(term);
_CLDECDELETE(term);
Hits* result = searcher->search(query1);
CLUCENE_ASSERT(1 == result->length());
_CLDELETE(result);
_CLDELETE(query1);
indexStore.close();
searcher->close();
reader->close();
_CLDELETE(reader);
_CLDELETE(searcher);
}
void testQuestionmark(CuTest *tc){
RAMDirectory indexStore;
SimpleAnalyzer<TCHAR> an;
IndexWriter* writer = _CLNEW IndexWriter(&indexStore, &an, true);
Document doc1;
Document doc2;
Document doc3;
Document doc4;
doc1.add(*_CLNEW Field(_T("body"), _T("metal"),Field::STORE_YES | Field::INDEX_TOKENIZED));
doc2.add(*_CLNEW Field(_T("body"), _T("metals"),Field::STORE_YES | Field::INDEX_TOKENIZED));
doc3.add(*_CLNEW Field(_T("body"), _T("mXtals"),Field::STORE_YES | Field::INDEX_TOKENIZED));
doc4.add(*_CLNEW Field(_T("body"), _T("mXtXls"),Field::STORE_YES | Field::INDEX_TOKENIZED));
writer->addDocument(&doc1);
writer->addDocument(&doc2);
writer->addDocument(&doc3);
writer->addDocument(&doc4);
writer->close();
_CLDELETE(writer);
//////////////////////////////////////////////////////
IndexReader* reader = IndexReader::open(&indexStore);
IndexSearcher* searcher = _CLNEW IndexSearcher(reader);
_testWildcard(tc, searcher, _T("m?tal"), 1);
_testWildcard(tc, searcher, _T("metal?"), 1);
_testWildcard(tc, searcher, _T("metal??"), 0);
_testWildcard(tc, searcher, _T("meta??"), 1); //metals
_testWildcard(tc, searcher, _T("metals?"), 0);
_testWildcard(tc, searcher, _T("m?t?ls"), 3);
indexStore.close();
reader->close();
searcher->close();
_CLDELETE(reader);
_CLDELETE(searcher);
}
#else
void _NO_WILDCARD_QUERY(CuTest *tc){
CuNotImpl(tc,_T("Wildcard"));
}
#endif
CuSuite *testwildcard(void)
{
CuSuite *suite = CuSuiteNew(_T("CLucene Wildcard Test"));
#ifndef NO_WILDCARD_QUERY
SUITE_ADD_TEST(suite, testQuestionmark);
SUITE_ADD_TEST(suite, testAsterisk);
#else
SUITE_ADD_TEST(suite, _NO_WILDCARD_QUERY);
#endif
return suite;
}
// EOF