package org.jabref.gui.search;
import java.util.Collection;
import java.util.concurrent.TimeUnit;
import javax.swing.JFrame;
import org.jabref.gui.BasePanel;
import org.jabref.model.entry.BibEntry;
import org.jabref.testutils.TestUtils;
import org.jabref.testutils.category.GUITests;
import org.assertj.swing.core.ComponentFinder;
import org.assertj.swing.edt.FailOnThreadViolationRepaintManager;
import org.assertj.swing.finder.WindowFinder;
import org.assertj.swing.fixture.FrameFixture;
import org.assertj.swing.fixture.JTextComponentFixture;
import org.assertj.swing.junit.testcase.AssertJSwingJUnitTestCase;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.experimental.categories.Category;
@Category(GUITests.class)
public class SearchResultsTest extends AssertJSwingJUnitTestCase {
private FrameFixture frameFixture;
@BeforeClass
public static void before() {
FailOnThreadViolationRepaintManager.uninstall();
}
@Override
protected void onSetUp() {
TestUtils.initJabRef();
frameFixture = WindowFinder.findFrame(JFrame.class).withTimeout(15, TimeUnit.SECONDS).using(robot());
}
@Override
protected void onTearDown() {
frameFixture.close();
frameFixture = null;
TestUtils.closeJabRef();
}
@Test
public void testSearchFieldQuery() {
frameFixture.menuItemWithPath("Search", "Search").click();
JTextComponentFixture searchField = frameFixture.textBox();
ComponentFinder finder = robot().finder();
BasePanel panel = finder.findByType(BasePanel.class);
Collection<BibEntry> entries = panel.getDatabase().getEntries();
searchField.deleteText().enterText("");
Assert.assertEquals(19, entries.size());
searchField.deleteText().enterText("entrytype=article");
Assert.assertFalse(entries.stream().noneMatch(entry -> entry.isSearchHit()));
Assert.assertEquals(5, entries.stream().filter(entry -> entry.isSearchHit()).count());
searchField.deleteText().enterText("entrytype=proceedings");
Assert.assertFalse(entries.stream().noneMatch(entry -> entry.isSearchHit()));
Assert.assertEquals(13, entries.stream().filter(entry -> entry.isSearchHit()).count());
searchField.deleteText().enterText("entrytype=book");
Assert.assertFalse(entries.stream().noneMatch(entry -> entry.isSearchHit()));
Assert.assertEquals(1, entries.stream().filter(entry -> entry.isSearchHit()).count());
}
@Test
public void testSeachWithoutResults() {
frameFixture.menuItemWithPath("Search", "Search").click();
JTextComponentFixture searchField = frameFixture.textBox();
ComponentFinder finder = robot().finder();
BasePanel panel = finder.findByType(BasePanel.class);
Collection<BibEntry> entries = panel.getDatabase().getEntries();
searchField.deleteText().enterText("asdf");
Assert.assertTrue(entries.stream().noneMatch(entry -> entry.isSearchHit()));
}
@Test
public void testSearchInvalidQuery() {
frameFixture.menuItemWithPath("Search", "Search").click();
JTextComponentFixture searchField = frameFixture.textBox();
ComponentFinder finder = robot().finder();
BasePanel panel = finder.findByType(BasePanel.class);
Collection<BibEntry> entries = panel.getDatabase().getEntries();
searchField.deleteText().enterText("asdf[");
Assert.assertTrue(entries.stream().noneMatch(entry -> entry.isSearchHit()));
}
}