diff --git a/spellchecker/hunspell/src/test/java/org/omegat/spellchecker/hunspell/HunspellSpellcheckerTest.java b/spellchecker/hunspell/src/test/java/org/omegat/spellchecker/hunspell/HunspellSpellcheckerTest.java index 2c6e8873d7..ee4471a263 100644 --- a/spellchecker/hunspell/src/test/java/org/omegat/spellchecker/hunspell/HunspellSpellcheckerTest.java +++ b/spellchecker/hunspell/src/test/java/org/omegat/spellchecker/hunspell/HunspellSpellcheckerTest.java @@ -32,6 +32,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Collections; +import java.util.concurrent.CountDownLatch; import org.apache.commons.io.FileUtils; import org.junit.AfterClass; @@ -42,11 +43,13 @@ import org.omegat.core.Core; import org.omegat.core.CoreEvents; +import org.omegat.core.TestCoreInitializer; import org.omegat.core.data.NotLoadedProject; import org.omegat.core.data.ProjectProperties; import org.omegat.core.events.IProjectEventListener; import org.omegat.core.spellchecker.ISpellChecker; import org.omegat.filters2.master.PluginUtils; +import org.omegat.gui.main.ConsoleWindow; import org.omegat.util.Language; import org.omegat.util.TestPreferencesInitializer; @@ -58,12 +61,13 @@ public class HunspellSpellcheckerTest { private static Path configDir; @BeforeClass - public static void setUpClass() throws IOException { + public static void setUpClass() throws Exception { PluginUtils.loadPlugins(Collections.emptyMap()); tmpDir = Files.createTempDirectory("omegat"); assertThat(tmpDir.toFile()).isDirectory(); configDir = Files.createDirectory(tmpDir.resolve(".omegat")); TestPreferencesInitializer.init(configDir.toString()); + TestCoreInitializer.initMainWindow(new ConsoleWindow()); Files.createDirectory(configDir.resolve("spelling")); copyFile("es_MX.aff"); copyFile("es_MX.dic"); @@ -138,9 +142,15 @@ public ProjectProperties getProjectProperties() { }); HunSpellCheckerMock checker = new HunSpellCheckerMock(); assertThat(checker.initialize()).as("Success initialize").isTrue(); + assertThat(checker.getInitializeCounter()).as("Hunspell Checker initialized once").isEqualTo(1); + // Fire project change events twice + final CountDownLatch latch = new CountDownLatch(2); + CoreEvents.registerProjectChangeListener(eventType -> latch.countDown()); CoreEvents.fireProjectChange(IProjectEventListener.PROJECT_CHANGE_TYPE.LOAD); CoreEvents.fireProjectChange(IProjectEventListener.PROJECT_CHANGE_TYPE.LOAD); - assertThat(checker.getCounter()).as("Hunspell Checker initialized once").isEqualTo(1); + latch.await(); + // + assertThat(checker.getInitializeCounter()).as("Hunspell Checker loaded 3rd times").isEqualTo(3); } private static void copyFile(String target) throws IOException { @@ -154,19 +164,19 @@ private static void copyFile(String target) throws IOException { } public static class HunSpellCheckerMock extends HunSpellChecker { - private int counter = 0; + private int initializeCounter = 0; public HunSpellCheckerMock() { super(); } @Override public boolean initialize() { - counter++; + initializeCounter++; return super.initialize(); } - public int getCounter() { - return counter; + public int getInitializeCounter() { + return initializeCounter; } } } diff --git a/src/org/omegat/externalfinder/ExternalFinder.java b/src/org/omegat/externalfinder/ExternalFinder.java index fcf0823a7d..61a18ad65b 100644 --- a/src/org/omegat/externalfinder/ExternalFinder.java +++ b/src/org/omegat/externalfinder/ExternalFinder.java @@ -58,6 +58,7 @@ import org.omegat.util.StaticUtils; import org.omegat.util.gui.MenuExtender; import org.omegat.util.gui.MenuItemPager; +import org.omegat.util.gui.StaticUIUtils; /** * Entry point for ExternalFinder functionality. @@ -89,9 +90,11 @@ private ExternalFinder() { * OmegaT will call this method when loading. */ public static void loadPlugins() { - // register listeners - CoreEvents.registerApplicationEventListener(generateIApplicationEventListener()); - CoreEvents.registerProjectChangeListener(generateIProjectEventListener()); + // register listeners when GUI environment + if (StaticUIUtils.isGUI()) { + CoreEvents.registerApplicationEventListener(generateIApplicationEventListener()); + CoreEvents.registerProjectChangeListener(generateIProjectEventListener()); + } } private static IProjectEventListener generateIProjectEventListener() {