blob: eb8e30e0884c5dbb4b1005644bd2c8c83629d0d5 [file] [log] [blame]
//
// 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.apache.couchdb.nouveau.lucene9;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import jakarta.ws.rs.WebApplicationException;
import java.lang.reflect.Method;
import java.util.Map;
import org.apache.couchdb.nouveau.api.IndexDefinition;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.ar.ArabicAnalyzer;
import org.apache.lucene.analysis.bg.BulgarianAnalyzer;
import org.apache.lucene.analysis.ca.CatalanAnalyzer;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.classic.ClassicAnalyzer;
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.analysis.core.KeywordAnalyzer;
import org.apache.lucene.analysis.core.SimpleAnalyzer;
import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
import org.apache.lucene.analysis.cz.CzechAnalyzer;
import org.apache.lucene.analysis.da.DanishAnalyzer;
import org.apache.lucene.analysis.de.GermanAnalyzer;
import org.apache.lucene.analysis.email.UAX29URLEmailAnalyzer;
import org.apache.lucene.analysis.en.EnglishAnalyzer;
import org.apache.lucene.analysis.es.SpanishAnalyzer;
import org.apache.lucene.analysis.eu.BasqueAnalyzer;
import org.apache.lucene.analysis.fa.PersianAnalyzer;
import org.apache.lucene.analysis.fi.FinnishAnalyzer;
import org.apache.lucene.analysis.fr.FrenchAnalyzer;
import org.apache.lucene.analysis.ga.IrishAnalyzer;
import org.apache.lucene.analysis.gl.GalicianAnalyzer;
import org.apache.lucene.analysis.hi.HindiAnalyzer;
import org.apache.lucene.analysis.hu.HungarianAnalyzer;
import org.apache.lucene.analysis.hy.ArmenianAnalyzer;
import org.apache.lucene.analysis.id.IndonesianAnalyzer;
import org.apache.lucene.analysis.it.ItalianAnalyzer;
import org.apache.lucene.analysis.ja.JapaneseAnalyzer;
import org.apache.lucene.analysis.lv.LatvianAnalyzer;
import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper;
import org.apache.lucene.analysis.nl.DutchAnalyzer;
import org.apache.lucene.analysis.no.NorwegianAnalyzer;
import org.apache.lucene.analysis.pl.PolishAnalyzer;
import org.apache.lucene.analysis.pt.PortugueseAnalyzer;
import org.apache.lucene.analysis.ro.RomanianAnalyzer;
import org.apache.lucene.analysis.ru.RussianAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.sv.SwedishAnalyzer;
import org.apache.lucene.analysis.th.ThaiAnalyzer;
import org.apache.lucene.analysis.tr.TurkishAnalyzer;
import org.junit.jupiter.api.Test;
public class Lucene9AnalyzerFactoryTest {
@Test
public void testkeyword() throws Exception {
assertAnalyzer("keyword", KeywordAnalyzer.class);
}
@Test
public void testsimple() throws Exception {
assertAnalyzer("simple", SimpleAnalyzer.class);
}
@Test
public void testwhitespace() throws Exception {
assertAnalyzer("whitespace", WhitespaceAnalyzer.class);
}
@Test
public void testarabic() throws Exception {
assertAnalyzer("arabic", ArabicAnalyzer.class);
}
@Test
public void testbulgarian() throws Exception {
assertAnalyzer("bulgarian", BulgarianAnalyzer.class);
}
@Test
public void testcatalan() throws Exception {
assertAnalyzer("catalan", CatalanAnalyzer.class);
}
@Test
public void testcjk() throws Exception {
assertAnalyzer("cjk", CJKAnalyzer.class);
}
@Test
public void testchinese() throws Exception {
assertAnalyzer("chinese", SmartChineseAnalyzer.class);
}
@Test
public void testczech() throws Exception {
assertAnalyzer("czech", CzechAnalyzer.class);
}
@Test
public void testdanish() throws Exception {
assertAnalyzer("danish", DanishAnalyzer.class);
}
@Test
public void testgerman() throws Exception {
assertAnalyzer("german", GermanAnalyzer.class);
}
@Test
public void testenglish() throws Exception {
assertAnalyzer("english", EnglishAnalyzer.class);
}
@Test
public void testspanish() throws Exception {
assertAnalyzer("spanish", SpanishAnalyzer.class);
}
@Test
public void testbasque() throws Exception {
assertAnalyzer("basque", BasqueAnalyzer.class);
}
@Test
public void testpersian() throws Exception {
assertAnalyzer("persian", PersianAnalyzer.class);
}
@Test
public void testfinnish() throws Exception {
assertAnalyzer("finnish", FinnishAnalyzer.class);
}
@Test
public void testfrench() throws Exception {
assertAnalyzer("french", FrenchAnalyzer.class);
}
@Test
public void testirish() throws Exception {
assertAnalyzer("irish", IrishAnalyzer.class);
}
@Test
public void testgalician() throws Exception {
assertAnalyzer("galician", GalicianAnalyzer.class);
}
@Test
public void testhindi() throws Exception {
assertAnalyzer("hindi", HindiAnalyzer.class);
}
@Test
public void testhungarian() throws Exception {
assertAnalyzer("hungarian", HungarianAnalyzer.class);
}
@Test
public void testarmenian() throws Exception {
assertAnalyzer("armenian", ArmenianAnalyzer.class);
}
@Test
public void testindonesian() throws Exception {
assertAnalyzer("indonesian", IndonesianAnalyzer.class);
}
@Test
public void testitalian() throws Exception {
assertAnalyzer("italian", ItalianAnalyzer.class);
}
@Test
public void testjapanese() throws Exception {
assertAnalyzer("japanese", JapaneseAnalyzer.class);
}
@Test
public void testlatvian() throws Exception {
assertAnalyzer("latvian", LatvianAnalyzer.class);
}
@Test
public void testdutch() throws Exception {
assertAnalyzer("dutch", DutchAnalyzer.class);
}
@Test
public void testnorwegian() throws Exception {
assertAnalyzer("norwegian", NorwegianAnalyzer.class);
}
@Test
public void testpolish() throws Exception {
assertAnalyzer("polish", PolishAnalyzer.class);
}
@Test
public void testportugese() throws Exception {
assertAnalyzer("portugese", PortugueseAnalyzer.class);
}
@Test
public void testromanian() throws Exception {
assertAnalyzer("romanian", RomanianAnalyzer.class);
}
@Test
public void testrussian() throws Exception {
assertAnalyzer("russian", RussianAnalyzer.class);
}
@Test
public void testclassic() throws Exception {
assertAnalyzer("classic", ClassicAnalyzer.class);
}
@Test
public void teststandard() throws Exception {
assertAnalyzer("standard", StandardAnalyzer.class);
}
@Test
public void testemail() throws Exception {
assertAnalyzer("email", UAX29URLEmailAnalyzer.class);
}
@Test
public void testswedish() throws Exception {
assertAnalyzer("swedish", SwedishAnalyzer.class);
}
@Test
public void testthai() throws Exception {
assertAnalyzer("thai", ThaiAnalyzer.class);
}
@Test
public void testturkish() throws Exception {
assertAnalyzer("turkish", TurkishAnalyzer.class);
}
@Test
public void testFieldAnalyzers() throws Exception {
final IndexDefinition indexDefinition =
new IndexDefinition("standard", Map.of("english", "english", "thai", "thai", "email", "email"));
final Analyzer analyzer = Lucene9AnalyzerFactory.fromDefinition(indexDefinition);
assertThat(analyzer).isInstanceOf(PerFieldAnalyzerWrapper.class);
final Method m = PerFieldAnalyzerWrapper.class.getDeclaredMethod("getWrappedAnalyzer", String.class);
m.setAccessible(true);
assertThat(m.invoke(analyzer, "english")).isInstanceOf(EnglishAnalyzer.class);
assertThat(m.invoke(analyzer, "thai")).isInstanceOf(ThaiAnalyzer.class);
assertThat(m.invoke(analyzer, "email")).isInstanceOf(UAX29URLEmailAnalyzer.class);
assertThat(m.invoke(analyzer, "other")).isInstanceOf(StandardAnalyzer.class);
}
@Test
public void testUnknownAnalyzer() throws Exception {
assertThrows(WebApplicationException.class, () -> Lucene9AnalyzerFactory.newAnalyzer("foo"));
}
private void assertAnalyzer(final String name, final Class<? extends Analyzer> clazz) throws Exception {
assertThat(Lucene9AnalyzerFactory.newAnalyzer(name)).isInstanceOf(clazz);
assertThat(Lucene9AnalyzerFactory.fromDefinition(new IndexDefinition(name, null)))
.isInstanceOf(clazz);
}
}