diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-07-19 00:06:17 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-07-27 00:56:05 +0800 |
| commit | 664815d74ffdc030fd52f0ed0480b1cd615ef384 (patch) | |
| tree | acf194d0ca0c6c7b04c1782af3d2507455f56d5a /runtime/src/test/java | |
| parent | 2c47af75968e2bdfae717d52cd0c137ed542673b (diff) | |
| download | RoughlyEnoughItems-664815d74ffdc030fd52f0ed0480b1cd615ef384.tar.gz RoughlyEnoughItems-664815d74ffdc030fd52f0ed0480b1cd615ef384.tar.bz2 RoughlyEnoughItems-664815d74ffdc030fd52f0ed0480b1cd615ef384.zip | |
Add InputMethods, Close #574
Diffstat (limited to 'runtime/src/test/java')
| -rw-r--r-- | runtime/src/test/java/InputMethodTest.java | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/runtime/src/test/java/InputMethodTest.java b/runtime/src/test/java/InputMethodTest.java new file mode 100644 index 000000000..0b0ba1cb3 --- /dev/null +++ b/runtime/src/test/java/InputMethodTest.java @@ -0,0 +1,99 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import it.unimi.dsi.fastutil.ints.IntList; +import me.shedaniel.rei.impl.Internals; +import me.shedaniel.rei.impl.client.search.argument.InputMethodMatcher; +import me.shedaniel.rei.impl.client.search.method.unihan.PinyinInputMethod; +import me.shedaniel.rei.impl.client.search.method.unihan.UniHanManager; +import me.shedaniel.rei.impl.common.InternalLogger; +import org.apache.logging.log4j.Level; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.nio.file.Path; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class InputMethodTest { + public static final InternalLogger LOGGER = new InternalLogger() { + @Override + public void throwException(Throwable throwable) { + throwable.printStackTrace(); + } + + @Override + public void log(Level level, String message) { + System.out.println("[" + level.name() + "] " + message); + } + + @Override + public void log(Level level, String message, Throwable throwable) { + System.out.println("[" + level.name() + "] " + message); + throwable.printStackTrace(); + } + }; + + @TempDir + static Path tempDir; + + static PinyinInputMethod pinyinInputMethod; + + @BeforeAll + static void setup() { + Internals.attachInstanceSupplier(LOGGER, "logger"); + + UniHanManager manager = new UniHanManager(tempDir.resolve("unihan.zip")); + pinyinInputMethod = new PinyinInputMethod(manager); + ExecutorService service = Executors.newSingleThreadExecutor(); + pinyinInputMethod.prepare(service).join(); + service.shutdown(); + } + + void testPinyin() { + assertTrue(pinyinContains("漢", "han")); + assertTrue(pinyinContains("漢語", "hanyu")); + assertTrue(pinyinContains("漢", "ha")); + assertTrue(pinyinContains("漢語", "hayu")); + assertTrue(pinyinContains("测试文本", "ceshiwenben")); + assertTrue(pinyinContains("测试文本", "ceshiwenbe")); + assertTrue(pinyinContains("测试文本", "ceshiwben")); + assertTrue(pinyinContains("测试文本", "ceshwbe")); + assertTrue(pinyinContains("测试文本", "ce4shi4wb")); + assertFalse(pinyinContains("测试文本", "ce2shi4wb")); + assertTrue(pinyinContains("合金炉", "hejinlu")); + assertTrue(pinyinContains("洗矿场", "xikuangchang")); + assertTrue(pinyinContains("洗矿场", "xikuachang")); + assertTrue(pinyinContains("流体", "liuti")); + assertTrue(pinyinContains("轰20", "hong2")); + assertTrue(pinyinContains("hong2", "hong2")); + } + + boolean pinyinContains(String input, String substr) { + return InputMethodMatcher.contains(pinyinInputMethod, IntList.of(input.codePoints().toArray()), IntList.of(substr.codePoints().toArray())); + } +} |
