You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2012/04/07 19:37:17 UTC
svn commit: r1310805 -
/lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java
Author: rmuir
Date: Sat Apr 7 17:37:16 2012
New Revision: 1310805
URL: http://svn.apache.org/viewvc?rev=1310805&view=rev
Log:
add basic charfilter support to TestRandomChains
Modified:
lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java
Modified: lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java?rev=1310805&r1=1310804&r2=1310805&view=diff
==============================================================================
--- lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java (original)
+++ lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java Sat Apr 7 17:37:16 2012
@@ -33,6 +33,8 @@ import java.util.Random;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.BaseTokenStreamTestCase;
import org.apache.lucene.analysis.CachingTokenFilter;
+import org.apache.lucene.analysis.CharReader;
+import org.apache.lucene.analysis.CharStream;
import org.apache.lucene.analysis.EmptyTokenizer;
import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.TokenStream;
@@ -50,12 +52,14 @@ import org.junit.BeforeClass;
public class TestRandomChains extends BaseTokenStreamTestCase {
static Class[] tokenizers;
static Class[] tokenfilters;
+ static Class[] charfilters;
@BeforeClass
public static void beforeClass() throws Exception {
List<Class> analysisClasses = getClassesForPackage("org.apache.lucene.analysis");
List<Class> tokenizersList = new ArrayList<Class>();
List<Class> tokenfiltersList = new ArrayList<Class>();
+ List<Class> charfiltersList = new ArrayList<Class>();
for (Class c : analysisClasses) {
// don't waste time with abstract classes or deprecated known-buggy ones
if (Modifier.isAbstract(c.getModifiers()) || c.getAnnotation(Deprecated.class) != null
@@ -77,6 +81,8 @@ public class TestRandomChains extends Ba
tokenizersList.add(c);
} else if (TokenFilter.class.isAssignableFrom(c)) {
tokenfiltersList.add(c);
+ } else if (CharStream.class.isAssignableFrom(c)) {
+ charfiltersList.add(c);
}
}
tokenizers = tokenizersList.toArray(new Class[0]);
@@ -93,9 +99,17 @@ public class TestRandomChains extends Ba
return arg0.getName().compareTo(arg1.getName());
}
});
+ charfilters = charfiltersList.toArray(new Class[0]);
+ Arrays.sort(charfilters, new Comparator<Class>() {
+ @Override
+ public int compare(Class arg0, Class arg1) {
+ return arg0.getName().compareTo(arg1.getName());
+ }
+ });
if (VERBOSE) {
System.out.println("tokenizers = " + Arrays.toString(tokenizers));
System.out.println("tokenfilters = " + Arrays.toString(tokenfilters));
+ System.out.println("charfilters = " + Arrays.toString(charfilters));
}
}
@@ -103,6 +117,7 @@ public class TestRandomChains extends Ba
public static void afterClass() throws Exception {
tokenizers = null;
tokenfilters = null;
+ charfilters = null;
}
static class MockRandomAnalyzer extends Analyzer {
@@ -122,15 +137,22 @@ public class TestRandomChains extends Ba
@Override
protected Reader initReader(Reader reader) {
- // TODO: random charfilter chain!
- return super.initReader(reader);
+ Random random = new Random(seed);
+ CharFilterSpec charfilterspec = newCharFilterChain(random, reader);
+ return charfilterspec.reader;
}
@Override
public String toString() {
Random random = new Random(seed);
- TokenizerSpec tokenizerSpec = newTokenizer(random, new StringReader(""));
StringBuilder sb = new StringBuilder();
+ CharFilterSpec charfilterSpec = newCharFilterChain(random, new StringReader(""));
+ sb.append("\ncharfilters=");
+ sb.append(charfilterSpec.toString);
+ // intentional: initReader gets its own separate random
+ random = new Random(seed);
+ TokenizerSpec tokenizerSpec = newTokenizer(random, charfilterSpec.reader);
+ sb.append("\n");
sb.append("tokenizer=");
sb.append(tokenizerSpec.toString);
TokenFilterSpec tokenfilterSpec = newFilterChain(random, tokenizerSpec.tokenizer);
@@ -165,6 +187,39 @@ public class TestRandomChains extends Ba
return spec;
}
+ private CharFilterSpec newCharFilterChain(Random random, Reader reader) {
+ CharFilterSpec spec = new CharFilterSpec();
+ spec.reader = reader;
+ StringBuilder descr = new StringBuilder();
+ int numFilters = random.nextInt(3);
+ for (int i = 0; i < numFilters; i++) {
+ boolean success = false;
+ while (!success) {
+ try {
+ // TODO: also look for other variants and handle them special
+ int idx = random.nextInt(charfilters.length);
+ try {
+ Constructor c = charfilters[idx].getConstructor(Reader.class);
+ spec.reader = (Reader) c.newInstance(spec.reader);
+ } catch (NoSuchMethodException e) {
+ Constructor c = charfilters[idx].getConstructor(CharStream.class);
+ spec.reader = (Reader) c.newInstance(CharReader.get(spec.reader));
+ }
+
+ if (descr.length() > 0) {
+ descr.append(",");
+ }
+ descr.append(charfilters[idx].toString());
+ success = true;
+ } catch (Exception e) {
+ // ignore
+ }
+ }
+ }
+ spec.toString = descr.toString();
+ return spec;
+ }
+
private TokenFilterSpec newFilterChain(Random random, Tokenizer tokenizer) {
TokenFilterSpec spec = new TokenFilterSpec();
spec.stream = tokenizer;
@@ -208,6 +263,11 @@ public class TestRandomChains extends Ba
String toString;
}
+ static class CharFilterSpec {
+ Reader reader;
+ String toString;
+ }
+
public void testRandomChains() throws Throwable {
int numIterations = atLeast(20);
for (int i = 0; i < numIterations; i++) {