mirror of https://github.com/apache/lucene.git
LUCENE-2510: add tests
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/lucene2510@1365375 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2fbd91eb5c
commit
ef25010554
|
@ -0,0 +1,128 @@
|
|||
package org.apache.lucene.analysis.core;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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.
|
||||
*/
|
||||
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.IdentityHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.lucene.analysis.CachingTokenFilter;
|
||||
import org.apache.lucene.analysis.CharFilter;
|
||||
import org.apache.lucene.analysis.EmptyTokenizer;
|
||||
import org.apache.lucene.analysis.MockCharFilter;
|
||||
import org.apache.lucene.analysis.MockFixedLengthPayloadFilter;
|
||||
import org.apache.lucene.analysis.MockGraphTokenFilter;
|
||||
import org.apache.lucene.analysis.MockHoleInjectingTokenFilter;
|
||||
import org.apache.lucene.analysis.MockRandomLookaheadTokenFilter;
|
||||
import org.apache.lucene.analysis.MockTokenFilter;
|
||||
import org.apache.lucene.analysis.MockTokenizer;
|
||||
import org.apache.lucene.analysis.MockVariableLengthPayloadFilter;
|
||||
import org.apache.lucene.analysis.TokenFilter;
|
||||
import org.apache.lucene.analysis.Tokenizer;
|
||||
import org.apache.lucene.analysis.ValidatingTokenFilter;
|
||||
import org.apache.lucene.analysis.core.TestRandomChains;
|
||||
import org.apache.lucene.analysis.path.ReversePathHierarchyTokenizer;
|
||||
import org.apache.lucene.analysis.sinks.TeeSinkTokenFilter;
|
||||
import org.apache.lucene.analysis.snowball.SnowballFilter;
|
||||
import org.apache.lucene.analysis.util.CharFilterFactory;
|
||||
import org.apache.lucene.analysis.util.TokenFilterFactory;
|
||||
import org.apache.lucene.analysis.util.TokenizerFactory;
|
||||
import org.apache.lucene.util.LuceneTestCase;
|
||||
|
||||
/**
|
||||
* Tests that any newly added Tokenizers/TokenFilters/CharFilters have a
|
||||
* corresponding factory.
|
||||
*/
|
||||
public class TestAllAnalyzersHaveFactories extends LuceneTestCase {
|
||||
|
||||
// these are test-only components (e.g. test-framework)
|
||||
private static final Set<Class<?>> testComponents = Collections.newSetFromMap(new IdentityHashMap<Class<?>,Boolean>());
|
||||
static {
|
||||
Collections.<Class<?>>addAll(testComponents,
|
||||
MockTokenizer.class,
|
||||
MockCharFilter.class,
|
||||
MockFixedLengthPayloadFilter.class,
|
||||
MockGraphTokenFilter.class,
|
||||
MockHoleInjectingTokenFilter.class,
|
||||
MockRandomLookaheadTokenFilter.class,
|
||||
MockTokenFilter.class,
|
||||
MockVariableLengthPayloadFilter.class,
|
||||
EmptyTokenizer.class,
|
||||
ValidatingTokenFilter.class
|
||||
);
|
||||
}
|
||||
|
||||
// these are 'crazy' components like cachingtokenfilter. does it make sense to add factories for these?
|
||||
private static final Set<Class<?>> crazyComponents = Collections.newSetFromMap(new IdentityHashMap<Class<?>,Boolean>());
|
||||
static {
|
||||
Collections.<Class<?>>addAll(crazyComponents,
|
||||
CachingTokenFilter.class,
|
||||
TeeSinkTokenFilter.class
|
||||
);
|
||||
}
|
||||
|
||||
// these are oddly-named (either the actual analyzer, or its factory)
|
||||
// they do actually have factories.
|
||||
// TODO: clean this up!
|
||||
private static final Set<Class<?>> oddlyNamedComponents = Collections.newSetFromMap(new IdentityHashMap<Class<?>,Boolean>());
|
||||
static {
|
||||
Collections.<Class<?>>addAll(oddlyNamedComponents,
|
||||
ReversePathHierarchyTokenizer.class, // this is supported via an option to PathHierarchyTokenizer's factory
|
||||
SnowballFilter.class // this is called SnowballPorterFilterFactory
|
||||
);
|
||||
}
|
||||
|
||||
public void test() throws Exception {
|
||||
List<Class<?>> analysisClasses = new ArrayList<Class<?>>();
|
||||
TestRandomChains.getClassesForPackage("org.apache.lucene.analysis", analysisClasses);
|
||||
|
||||
for (final Class<?> c : analysisClasses) {
|
||||
final int modifiers = c.getModifiers();
|
||||
if (
|
||||
// don't waste time with abstract classes or deprecated known-buggy ones
|
||||
Modifier.isAbstract(modifiers) || !Modifier.isPublic(modifiers)
|
||||
|| c.isSynthetic() || c.isAnonymousClass() || c.isMemberClass() || c.isInterface()
|
||||
|| testComponents.contains(c)
|
||||
|| crazyComponents.contains(c)
|
||||
|| oddlyNamedComponents.contains(c)
|
||||
|| c.isAnnotationPresent(Deprecated.class)
|
||||
|| !(Tokenizer.class.isAssignableFrom(c) || TokenFilter.class.isAssignableFrom(c) || CharFilter.class.isAssignableFrom(c))
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Tokenizer.class.isAssignableFrom(c)) {
|
||||
String clazzName = c.getSimpleName();
|
||||
assertTrue(clazzName.endsWith("Tokenizer"));
|
||||
assertNotNull(TokenizerFactory.forName(clazzName.substring(0, clazzName.length() - 9)));
|
||||
} else if (TokenFilter.class.isAssignableFrom(c)) {
|
||||
String clazzName = c.getSimpleName();
|
||||
assertTrue(clazzName.endsWith("Filter"));
|
||||
String simpleName = clazzName.substring(0, clazzName.length() - (clazzName.endsWith("TokenFilter") ? 11 : 6));
|
||||
assertNotNull(TokenFilterFactory.forName(simpleName));
|
||||
} else if (CharFilter.class.isAssignableFrom(c)) {
|
||||
String clazzName = c.getSimpleName();
|
||||
assertTrue(clazzName.endsWith("CharFilter"));
|
||||
assertNotNull(CharFilterFactory.forName(clazzName.substring(0, clazzName.length() - 10)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -235,7 +235,7 @@ public class TestRandomChains extends BaseTokenStreamTestCase {
|
|||
private static <T> Constructor<T> castConstructor(Class<T> instanceClazz, Constructor<?> ctor) {
|
||||
return (Constructor<T>) ctor;
|
||||
}
|
||||
private static void getClassesForPackage(String pckgname, List<Class<?>> classes) throws Exception {
|
||||
static void getClassesForPackage(String pckgname, List<Class<?>> classes) throws Exception {
|
||||
final ClassLoader cld = TestRandomChains.class.getClassLoader();
|
||||
final String path = pckgname.replace('.', '/');
|
||||
final Enumeration<URL> resources = cld.getResources(path);
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
package org.apache.lucene.analysis.util;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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.
|
||||
*/
|
||||
|
||||
import org.apache.lucene.analysis.charfilter.HTMLStripCharFilterFactory;
|
||||
import org.apache.lucene.analysis.core.LowerCaseFilterFactory;
|
||||
import org.apache.lucene.analysis.core.WhitespaceTokenizerFactory;
|
||||
import org.apache.lucene.analysis.miscellaneous.RemoveDuplicatesTokenFilterFactory;
|
||||
import org.apache.lucene.util.LuceneTestCase;
|
||||
|
||||
public class TestAnalysisSPILoader extends LuceneTestCase {
|
||||
|
||||
public void testLookupTokenizer() {
|
||||
assertEquals(WhitespaceTokenizerFactory.class, TokenizerFactory.forName("Whitespace").getClass());
|
||||
assertEquals(WhitespaceTokenizerFactory.class, TokenizerFactory.forName("WHITESPACE").getClass());
|
||||
assertEquals(WhitespaceTokenizerFactory.class, TokenizerFactory.forName("whitespace").getClass());
|
||||
}
|
||||
|
||||
public void testLookupTokenizerClass() {
|
||||
assertEquals(WhitespaceTokenizerFactory.class, TokenizerFactory.lookupClass("Whitespace"));
|
||||
assertEquals(WhitespaceTokenizerFactory.class, TokenizerFactory.lookupClass("WHITESPACE"));
|
||||
assertEquals(WhitespaceTokenizerFactory.class, TokenizerFactory.lookupClass("whitespace"));
|
||||
}
|
||||
|
||||
public void testAvailableTokenizers() {
|
||||
assertTrue(TokenizerFactory.availableTokenizers().contains("whitespace"));
|
||||
}
|
||||
|
||||
public void testLookupTokenFilter() {
|
||||
assertEquals(LowerCaseFilterFactory.class, TokenFilterFactory.forName("Lowercase").getClass());
|
||||
assertEquals(LowerCaseFilterFactory.class, TokenFilterFactory.forName("LOWERCASE").getClass());
|
||||
assertEquals(LowerCaseFilterFactory.class, TokenFilterFactory.forName("lowercase").getClass());
|
||||
|
||||
assertEquals(RemoveDuplicatesTokenFilterFactory.class, TokenFilterFactory.forName("RemoveDuplicates").getClass());
|
||||
assertEquals(RemoveDuplicatesTokenFilterFactory.class, TokenFilterFactory.forName("REMOVEDUPLICATES").getClass());
|
||||
assertEquals(RemoveDuplicatesTokenFilterFactory.class, TokenFilterFactory.forName("removeduplicates").getClass());
|
||||
}
|
||||
|
||||
public void testLookupTokenFilterClass() {
|
||||
assertEquals(LowerCaseFilterFactory.class, TokenFilterFactory.lookupClass("Lowercase"));
|
||||
assertEquals(LowerCaseFilterFactory.class, TokenFilterFactory.lookupClass("LOWERCASE"));
|
||||
assertEquals(LowerCaseFilterFactory.class, TokenFilterFactory.lookupClass("lowercase"));
|
||||
|
||||
assertEquals(RemoveDuplicatesTokenFilterFactory.class, TokenFilterFactory.lookupClass("RemoveDuplicates"));
|
||||
assertEquals(RemoveDuplicatesTokenFilterFactory.class, TokenFilterFactory.lookupClass("REMOVEDUPLICATES"));
|
||||
assertEquals(RemoveDuplicatesTokenFilterFactory.class, TokenFilterFactory.lookupClass("removeduplicates"));
|
||||
}
|
||||
|
||||
public void testAvailableTokenFilters() {
|
||||
assertTrue(TokenFilterFactory.availableTokenFilters().contains("lowercase"));
|
||||
assertTrue(TokenFilterFactory.availableTokenFilters().contains("removeduplicates"));
|
||||
}
|
||||
|
||||
public void testLookupCharFilter() {
|
||||
assertEquals(HTMLStripCharFilterFactory.class, CharFilterFactory.forName("HTMLStrip").getClass());
|
||||
assertEquals(HTMLStripCharFilterFactory.class, CharFilterFactory.forName("HTMLSTRIP").getClass());
|
||||
assertEquals(HTMLStripCharFilterFactory.class, CharFilterFactory.forName("htmlstrip").getClass());
|
||||
}
|
||||
|
||||
public void testLookupCharFilterClass() {
|
||||
assertEquals(HTMLStripCharFilterFactory.class, CharFilterFactory.lookupClass("HTMLStrip"));
|
||||
assertEquals(HTMLStripCharFilterFactory.class, CharFilterFactory.lookupClass("HTMLSTRIP"));
|
||||
assertEquals(HTMLStripCharFilterFactory.class, CharFilterFactory.lookupClass("htmlstrip"));
|
||||
}
|
||||
|
||||
public void testAvailableCharFilters() {
|
||||
assertTrue(CharFilterFactory.availableCharFilters().contains("htmlstrip"));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue