package org.jabref.logic.search; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.BibtexEntryTypes; import org.jabref.model.entry.FieldName; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class SearchQueryTest { @Test public void testToString() { assertEquals("\"asdf\" (case sensitive, regular expression)", new SearchQuery("asdf", true, true).toString()); assertEquals("\"asdf\" (case insensitive, plain text)", new SearchQuery("asdf", false, false).toString()); } @Test public void testIsContainsBasedSearch() { assertFalse(new SearchQuery("asdf", true, false).isContainsBasedSearch()); assertFalse(new SearchQuery("asdf", true, true).isContainsBasedSearch()); assertFalse(new SearchQuery("author=asdf", true, false).isContainsBasedSearch()); } @Test public void testIsGrammarBasedSearch() { assertTrue(new SearchQuery("asdf", true, false).isGrammarBasedSearch()); assertTrue(new SearchQuery("asdf", true, true).isGrammarBasedSearch()); assertTrue(new SearchQuery("author=asdf", true, false).isGrammarBasedSearch()); } @Test public void testGrammarSearch() { BibEntry entry = new BibEntry(); entry.addKeyword("one two", ','); SearchQuery searchQuery = new SearchQuery("keywords=\"one two\"", false, false); assertTrue(searchQuery.isMatch(entry)); } @Test public void testGrammarSearchFullEntryLastCharMissing() { BibEntry entry = new BibEntry(); entry.setField(FieldName.TITLE, "systematic revie"); SearchQuery searchQuery = new SearchQuery("title=\"systematic review\"", false, false); assertFalse(searchQuery.isMatch(entry)); } @Test public void testGrammarSearchFullEntry() { BibEntry entry = new BibEntry(); entry.setField(FieldName.TITLE, "systematic review"); SearchQuery searchQuery = new SearchQuery("title=\"systematic review\"", false, false); assertTrue(searchQuery.isMatch(entry)); } @Test public void testSearchingForOpenBraketInBooktitle() { BibEntry e = new BibEntry(BibtexEntryTypes.INPROCEEDINGS.getName()); e.setField(FieldName.BOOKTITLE, "Super Conference (SC)"); SearchQuery searchQuery = new SearchQuery("booktitle=\"(\"", false, false); assertTrue(searchQuery.isMatch(e)); } @Test public void testSearchMatchesSingleKeywordNotPart() { BibEntry e = new BibEntry(BibtexEntryTypes.INPROCEEDINGS.getName()); e.setField("keywords", "banana, pineapple, orange"); SearchQuery searchQuery = new SearchQuery("anykeyword==apple", false, false); assertFalse(searchQuery.isMatch(e)); } @Test public void testSearchMatchesSingleKeyword() { BibEntry e = new BibEntry(BibtexEntryTypes.INPROCEEDINGS.getName()); e.setField("keywords", "banana, pineapple, orange"); SearchQuery searchQuery = new SearchQuery("anykeyword==pineapple", false, false); assertTrue(searchQuery.isMatch(e)); } @Test public void testSearchAllFields() { BibEntry e = new BibEntry(BibtexEntryTypes.INPROCEEDINGS.getName()); e.setField("title", "Fruity features"); e.setField("keywords", "banana, pineapple, orange"); SearchQuery searchQuery = new SearchQuery("anyfield==\"fruity features\"", false, false); assertTrue(searchQuery.isMatch(e)); } @Test public void testSearchAllFieldsNotForSpecificField() { BibEntry e = new BibEntry(BibtexEntryTypes.INPROCEEDINGS.getName()); e.setField("title", "Fruity features"); e.setField("keywords", "banana, pineapple, orange"); SearchQuery searchQuery = new SearchQuery("anyfield=fruit and keywords!=banana", false, false); assertFalse(searchQuery.isMatch(e)); } @Test public void testSearchAllFieldsAndSpecificField() { BibEntry e = new BibEntry(BibtexEntryTypes.INPROCEEDINGS.getName()); e.setField("title", "Fruity features"); e.setField("keywords", "banana, pineapple, orange"); SearchQuery searchQuery = new SearchQuery("anyfield=fruit and keywords=apple", false, false); assertTrue(searchQuery.isMatch(e)); } @Test public void testIsMatch() { BibEntry entry = new BibEntry(); entry.setType(BibtexEntryTypes.ARTICLE); entry.setField("author", "asdf"); assertFalse(new SearchQuery("qwer", true, true).isMatch(entry)); assertTrue(new SearchQuery("asdf", true, true).isMatch(entry)); assertTrue(new SearchQuery("author=asdf", true, true).isMatch(entry)); } @Test public void testIsValidQueryNotAsRegEx() { assertTrue(new SearchQuery("asdf", true, false).isValid()); } @Test public void testIsValidQueryContainsBracketNotAsRegEx() { assertTrue(new SearchQuery("asdf[", true, false).isValid()); } @Test public void testIsNotValidQueryContainsBracketNotAsRegEx() { assertTrue(new SearchQuery("asdf[", true, true).isValid()); } @Test public void testIsValidQueryAsRegEx() { assertTrue(new SearchQuery("asdf", true, true).isValid()); } @Test public void testIsValidQueryWithNumbersAsRegEx() { assertTrue(new SearchQuery("123", true, true).isValid()); } @Test public void testIsValidQueryContainsBracketAsRegEx() { assertTrue(new SearchQuery("asdf[", true, true).isValid()); } @Test public void testIsValidQueryWithEqualSignAsRegEx() { assertTrue(new SearchQuery("author=asdf", true, true).isValid()); } @Test public void testIsValidQueryWithNumbersAndEqualSignAsRegEx() { assertTrue(new SearchQuery("author=123", true, true).isValid()); } @Test public void testIsValidQueryWithEqualSignNotAsRegEx() { assertTrue(new SearchQuery("author=asdf", true, false).isValid()); } @Test public void testIsValidQueryWithNumbersAndEqualSignNotAsRegEx() { assertTrue(new SearchQuery("author=123", true, false).isValid()); } @Test public void isMatchedForNormalAndFieldBasedSearchMixed() { BibEntry entry = new BibEntry(); entry.setType(BibtexEntryTypes.ARTICLE); entry.setField("author", "asdf"); entry.setField("abstract", "text"); assertTrue(new SearchQuery("text AND author=asdf", true, true).isMatch(entry)); } }