package org.jabref.logic.search; import java.util.Collections; import java.util.List; import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.BibtexEntryTypes; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; public class DatabaseSearcherTest { public static final SearchQuery INVALID_SEARCH_QUERY = new SearchQuery("\\asd123{}asdf", true, true); private BibDatabase database; @Before public void setUp() { database = new BibDatabase(); } @Test public void testNoMatchesFromEmptyDatabase() { List<BibEntry> matches = new DatabaseSearcher(new SearchQuery("whatever", true, true), database).getMatches(); assertEquals(Collections.emptyList(), matches); } @Test public void testNoMatchesFromEmptyDatabaseWithInvalidSearchExpression() { List<BibEntry> matches = new DatabaseSearcher(INVALID_SEARCH_QUERY, database).getMatches(); assertEquals(Collections.emptyList(), matches); } @Test public void testGetDatabaseFromMatchesDatabaseWithEmptyEntries() { database.insertEntry(new BibEntry()); List<BibEntry> matches = new DatabaseSearcher(new SearchQuery("whatever", true, true), database).getMatches(); assertEquals(Collections.emptyList(), matches); } @Test public void testNoMatchesFromDatabaseWithArticleTypeEntry() { BibEntry entry = new BibEntry(); entry.setType("article"); entry.setField("author", "harrer"); database.insertEntry(entry); List<BibEntry> matches = new DatabaseSearcher(new SearchQuery("whatever", true, true), database).getMatches(); assertEquals(Collections.emptyList(), matches); } @Test public void testCorrectMatchFromDatabaseWithArticleTypeEntry() { BibEntry entry = new BibEntry(); entry.setType("article"); entry.setField("author", "harrer"); database.insertEntry(entry); List<BibEntry> matches = new DatabaseSearcher(new SearchQuery("harrer", true, true), database).getMatches(); assertEquals(Collections.singletonList(entry), matches); } @Test public void testNoMatchesFromEmptyDatabaseWithInvalidQuery() { SearchQuery query = new SearchQuery("asdf[", true, true); DatabaseSearcher databaseSearcher = new DatabaseSearcher(query, database); assertEquals(Collections.emptyList(), databaseSearcher.getMatches()); } @Test public void testCorrectMatchFromDatabaseWithIncollectionTypeEntry() { BibEntry entry = new BibEntry(); entry.setType(BibtexEntryTypes.INCOLLECTION); entry.setField("author", "tonho"); database.insertEntry(entry); SearchQuery query = new SearchQuery("tonho", true, true); List<BibEntry> matches = new DatabaseSearcher(query, database).getMatches(); assertEquals(Collections.singletonList(entry), matches); } @Test public void testNoMatchesFromDatabaseWithTwoEntries() { BibEntry entry = new BibEntry(); database.insertEntry(entry); entry = new BibEntry(); entry.setType(BibtexEntryTypes.INCOLLECTION); entry.setField("author", "tonho"); database.insertEntry(entry); SearchQuery query = new SearchQuery("tonho", true, true); DatabaseSearcher databaseSearcher = new DatabaseSearcher(query, database); assertEquals(Collections.singletonList(entry), databaseSearcher.getMatches()); } @Test public void testNoMatchesFromDabaseWithIncollectionTypeEntry() { BibEntry entry = new BibEntry(); entry.setType(BibtexEntryTypes.INCOLLECTION); entry.setField("author", "tonho"); database.insertEntry(entry); SearchQuery query = new SearchQuery("asdf", true, true); DatabaseSearcher databaseSearcher = new DatabaseSearcher(query, database); assertEquals(Collections.emptyList(), databaseSearcher.getMatches()); } @Test public void testNoMatchFromDatabaseWithEmptyEntry() { BibEntry entry = new BibEntry(); database.insertEntry(entry); SearchQuery query = new SearchQuery("tonho", true, true); DatabaseSearcher databaseSearcher = new DatabaseSearcher(query, database); assertEquals(Collections.emptyList(), databaseSearcher.getMatches()); } }