/************************************************************************** OmegaT - Computer Assisted Translation (CAT) tool with fuzzy matching, translation memory, keyword search, glossaries, and translation leveraging into updated projects. Copyright (C) 2016 Aaron Madlon-Kay Home page: http://www.omegat.org/ Support center: http://groups.yahoo.com/group/OmegaT/ This file is part of OmegaT. OmegaT is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OmegaT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. **************************************************************************/ package org.omegat.gui.glossary; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.awt.Frame; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.stream.Stream; import org.junit.Before; import org.junit.Test; import org.omegat.core.Core; import org.omegat.core.TestCore; import org.omegat.core.TestCoreInitializer; import org.omegat.core.data.EntryKey; import org.omegat.core.data.NotLoadedProject; import org.omegat.core.data.ProjectProperties; import org.omegat.core.data.SourceTextEntry; import org.omegat.gui.editor.IEditor; import org.omegat.gui.editor.IEditorFilter; import org.omegat.gui.editor.IEditorSettings; import org.omegat.gui.editor.IPopupMenuConstructor; import org.omegat.gui.editor.autocompleter.AutoCompleterItem; import org.omegat.gui.editor.autocompleter.IAutoCompleter; import org.omegat.gui.editor.mark.Mark; import org.omegat.tokenizer.DefaultTokenizer; import org.omegat.tokenizer.ITokenizer; import org.omegat.util.Language; public class GlossaryAutoCompleterViewTest extends TestCore { private final List<GlossaryEntry> currentEntries = new ArrayList<>(); @Test public void testSuggestions() { GlossaryAutoCompleterView view = new GlossaryAutoCompleterView(); List<AutoCompleterItem> result = view.computeListData("blah", false); assertTrue(result.isEmpty()); Stream.of("foo", "bar", "BAZ").map(t -> new GlossaryEntry("", t, "", true)) .forEach(currentEntries::add); // No context -> suggest everything result = view.computeListData("", false); assertEquals(3, result.size()); // Context with match -> suggest only match(es) result = view.computeListData("f", false); assertEquals(1, result.size()); assertEquals("foo", result.get(0).payload); result = view.computeListData("b", false); assertEquals(3, result.size()); assertEquals("bar", result.get(0).payload); assertEquals("baz", result.get(1).payload); assertEquals("BAZ", result.get(2).payload); // Context match with differing case -> suggest matched case and original result = view.computeListData("F", false); assertEquals(2, result.size()); assertEquals("Foo", result.get(0).payload); assertEquals("foo", result.get(1).payload); result = view.computeListData("FO", false); assertEquals(2, result.size()); assertEquals("FOO", result.get(0).payload); assertEquals("foo", result.get(1).payload); result = view.computeListData("B", false); assertEquals(3, result.size()); // BAZ comes first because it is a verbatim glossary term assertEquals("BAZ", result.get(0).payload); assertEquals("Bar", result.get(1).payload); result = view.computeListData("Ba", false); assertEquals(3, result.size()); assertEquals("Bar", result.get(0).payload); assertEquals("bar", result.get(1).payload); assertEquals("BAZ", result.get(2).payload); // Context match that matches entire option -> counts as no match, // so fall back to suggesting everything result = view.computeListData("foo", false); assertEquals(3, result.size()); // In-context only result = view.computeListData("", true); assertTrue(result.isEmpty()); result = view.computeListData("f", true); assertEquals(1, result.size()); assertEquals("foo", result.get(0).payload); } @Before public final void setUp() { Core.setProject(new NotLoadedProject() { @Override public ITokenizer getTargetTokenizer() { return new DefaultTokenizer(); } @Override public ProjectProperties getProjectProperties() { try { return new ProjectProperties() { @Override public Language getTargetLanguage() { return new Language(Locale.ENGLISH); } }; } catch (Exception e) { return null; } } }); TestCoreInitializer.initEditor(new IEditor() { @Override public String getCurrentFile() { return null; } @Override public String getCurrentTargetFile() { return null; } @Override public SourceTextEntry getCurrentEntry() { return null; } @Override public int getCurrentEntryNumber() { return 0; } @Override public void activateEntry() { } @Override public void commitAndDeactivate() { } @Override public void commitAndLeave() { } @Override public void nextEntry() { } @Override public void prevEntry() { } @Override public void nextEntryWithNote() { } @Override public void prevEntryWithNote() { } @Override public void nextUntranslatedEntry() { } @Override public void nextTranslatedEntry() { } @Override public void nextUniqueEntry() { } @Override public void gotoFile(int fileIndex) { } @Override public void gotoEntry(int entryNum) { } @Override public void gotoEntry(int entryNum, CaretPosition pos) { } @Override public void gotoEntry(String srcString, EntryKey key) { } @Override public void gotoEntryAfterFix(int fixedEntry, String fixedSource) { } @Override public void refreshViewAfterFix(List<Integer> fixedEntries) { } @Override public void refreshView(boolean doCommit) { } @Override public void requestFocus() { } @Override public void changeCase(CHANGE_CASE_TO newCase) { } @Override public void replaceEditText(String text) { } @Override public void replaceEditTextAndMark(String text) { } @Override public void insertText(String text) { } @Override public void insertTextAndMark(String text) { } @Override public void insertTag(String tag) { } @Override public void gotoHistoryForward() { } @Override public void gotoHistoryBack() { } @Override public IEditorSettings getSettings() { return null; } @Override public void undo() { } @Override public void redo() { } @Override public String getSelectedText() { return null; } @Override public void setAlternateTranslationForCurrentEntry(boolean alternate) { } @Override public void markActiveEntrySource(SourceTextEntry requiredActiveEntry, List<Mark> marks, String markerClassName) { } @Override public void registerPopupMenuConstructors(int priority, IPopupMenuConstructor constructor) { } @Override public void remarkOneMarker(String markerClassName) { } @Override public IEditorFilter getFilter() { return null; } @Override public void setFilter(IEditorFilter filter) { } @Override public void removeFilter() { } @Override public String getCurrentTranslation() { return null; } @Override public void windowDeactivated() { } @Override public void registerUntranslated() { } @Override public void registerEmptyTranslation() { } @Override public void registerIdenticalTranslation() { } @Override public IAutoCompleter getAutoCompleter() { return null; } }); TestCoreInitializer.initGlossary(new IGlossaries() { @Override public List<GlossaryEntry> getDisplayedEntries() { return currentEntries; } @Override public void showCreateGlossaryEntryDialog(Frame parent) { } }); currentEntries.clear(); } }