package org.jabref.logic.autocompleter; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.jabref.model.entry.BibEntry; import org.junit.Assert; import org.junit.Test; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class NameFieldAutoCompleterTest { @SuppressWarnings("unused") @Test(expected = NullPointerException.class) public void initAutoCompleterWithNullPreferenceThrowsException() { new NameFieldAutoCompleter("field", null); } @SuppressWarnings("unused") @Test(expected = NullPointerException.class) public void initAutoCompleterWithNullFieldThrowsException() { new NameFieldAutoCompleter(null, mock(AutoCompletePreferences.class)); } @Test public void completeWithoutAddingAnythingReturnsNothing() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); List<String> result = autoCompleter.complete("test"); Assert.assertEquals(Collections.emptyList(), result); } @Test public void completeAfterAddingNullReturnsNothing() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); autoCompleter.addBibtexEntry(null); List<String> result = autoCompleter.complete("test"); Assert.assertEquals(Collections.emptyList(), result); } @Test public void completeAfterAddingEmptyEntryReturnsNothing() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("test"); Assert.assertEquals(Collections.emptyList(), result); } @Test public void completeAfterAddingEntryWithoutFieldReturnsNothing() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("title", "testTitle"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("test"); Assert.assertEquals(Collections.emptyList(), result); } @Test public void completeNameReturnsName() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Testname"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Testname"); Assert.assertEquals(Arrays.asList("Testname"), result); } @Test public void completeBeginnigOfNameReturnsName() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Testname"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Test"); Assert.assertEquals(Arrays.asList("Testname"), result); } @Test public void completeLowercaseNameReturnsName() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Testname"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("test"); Assert.assertEquals(Arrays.asList("Testname"), result); } @Test public void completeNullReturnsNothing() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "testKey"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete(null); Assert.assertEquals(Collections.emptyList(), result); } @Test public void completeEmptyStringReturnsNothing() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "testKey"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete(""); Assert.assertEquals(Collections.emptyList(), result); } @Test public void completeReturnsMultipleResults() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entryOne = new BibEntry(); entryOne.setField("field", "testNameOne"); autoCompleter.addBibtexEntry(entryOne); BibEntry entryTwo = new BibEntry(); entryTwo.setField("field", "testNameTwo"); autoCompleter.addBibtexEntry(entryTwo); List<String> result = autoCompleter.complete("testName"); Assert.assertEquals(Arrays.asList("testNameOne", "testNameTwo"), result); } @Test public void completeTooShortInputReturnsNothing() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); when(preferences.getShortestLengthToComplete()).thenReturn(100); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Testname"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("test"); Assert.assertEquals(Collections.emptyList(), result); } @Test public void completePartOfNameReturnsNothing() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Vassilis Kostakos"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("osta"); Assert.assertEquals(Collections.emptyList(), result); } @Test public void completeBeginningOfFirstNameReturnsCompleteName() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Vassilis Kostakos"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Vas"); Assert.assertEquals(Arrays.asList("Vassilis Kostakos"), result); } @Test public void completeBeginningOfFirstNameReturnsCompleteNameWithJr() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Reagle, Jr., Joseph M."); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Jos"); Assert.assertEquals(Arrays.asList("Joseph M. Reagle, Jr."), result); } @Test public void completeBeginningOfFirstNameReturnsCompleteNameWithVon() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Eric von Hippel"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Eric"); Assert.assertEquals(Arrays.asList("Eric von Hippel"), result); } @Test public void completeBeginningOfLastNameReturnsNameWithUmlauts() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); when(preferences.getFirstnameMode()).thenReturn(AutoCompleteFirstNameMode.ONLY_FULL); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Honig Bär"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Bä"); Assert.assertEquals(Arrays.asList("Bär, Honig"), result); } @Test public void completeBeginningOfLastNameReturnsNameAndNameWithInitialFirstname() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Vassilis Kostakos"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Kosta"); Assert.assertEquals(Arrays.asList("Kostakos, V.", "Kostakos, Vassilis"), result); } @Test public void completeBeginningOfLastNameReturnsNameIfPref() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); when(preferences.getFirstnameMode()).thenReturn(AutoCompleteFirstNameMode.ONLY_FULL); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Vassilis Kostakos"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Kosta"); Assert.assertEquals(Arrays.asList("Kostakos, Vassilis"), result); } @Test public void completeBeginningOfLastNameReturnsNameWithJrIfPref() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); when(preferences.getFirstnameMode()).thenReturn(AutoCompleteFirstNameMode.ONLY_ABBREVIATED); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Reagle, Jr., Joseph M."); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Rea"); Assert.assertEquals(Arrays.asList("Reagle, Jr., J. M."), result); } @Test public void completeBeginningOfLastNameReturnsNameWithInitialFirstnameIfPref() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); when(preferences.getFirstnameMode()).thenReturn(AutoCompleteFirstNameMode.ONLY_ABBREVIATED); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Vassilis Kostakos"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Kosta"); Assert.assertEquals(Arrays.asList("Kostakos, V."), result); } @Test public void completeVonReturnsNameWithInitialFirstnameIfPref() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); when(preferences.getFirstnameMode()).thenReturn(AutoCompleteFirstNameMode.ONLY_ABBREVIATED); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Eric von Hippel"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("von"); Assert.assertEquals(Arrays.asList("von Hippel, E."), result); } @Test public void completeBeginningOfNameReturnsCompleteName() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Vassilis Kostakos"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Kostakos, Va"); Assert.assertEquals(Arrays.asList("Kostakos, Vassilis"), result); } @Test public void completeBeginningOfLastNameReturnsNothingIfPref() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); when(preferences.getOnlyCompleteFirstLast()).thenReturn(true); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Vassilis Kostakos"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Kosta"); Assert.assertEquals(Collections.emptyList(), result); } @Test public void completeBeginningOfFirstNameReturnsNothingIfPref() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); when(preferences.getOnlyCompleteLastFirst()).thenReturn(true); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "Vassilis Kostakos"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("Vas"); Assert.assertEquals(Collections.emptyList(), result); } @Test public void completeShortNameReturnsName() { AutoCompletePreferences preferences = mock(AutoCompletePreferences.class); NameFieldAutoCompleter autoCompleter = new NameFieldAutoCompleter("field", preferences); BibEntry entry = new BibEntry(); entry.setField("field", "nam"); autoCompleter.addBibtexEntry(entry); List<String> result = autoCompleter.complete("n"); Assert.assertEquals(Arrays.asList("nam"), result); } }