package org.jabref.gui;
import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;
import javax.swing.JButton;
import javax.swing.JDialog;
import org.jabref.testutils.category.GUITests;
import org.assertj.swing.core.GenericTypeMatcher;
import org.assertj.swing.dependency.jsr305.Nonnull;
import org.assertj.swing.fixture.JTableFixture;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import static org.assertj.swing.finder.WindowFinder.findDialog;
@RunWith(Parameterized.class)
@Category(GUITests.class)
public class ParameterizedDialogNewEntryTest extends AbstractUITest {
private final String databaseMode;
private final String entryType;
public ParameterizedDialogNewEntryTest(String databaseMode, String entryType) {
this.databaseMode = databaseMode;
this.entryType = entryType;
}
@Test
public void addEntryOfGivenType() {
mainFrame.menuItemWithPath("File", "New " + databaseMode + " database").click();
JTableFixture entryTable = mainFrame.table();
entryTable.requireRowCount(0);
mainFrame.menuItemWithPath("BibTeX", "New entry...").click();
selectEntryType();
entryTable.requireRowCount(1);
}
private void selectEntryType() {
GenericTypeMatcher<JDialog> matcher = new GenericTypeMatcher<JDialog>(JDialog.class) {
@Override
protected boolean isMatching(JDialog dialog) {
return "Select entry type".equals(dialog.getTitle());
}
};
findDialog(matcher).withTimeout(10_000).using(robot()).button(new GenericTypeMatcher<JButton>(JButton.class) {
@Override
protected boolean isMatching(@Nonnull JButton jButton) {
return entryType.equals(jButton.getText());
}
}).click();
}
@Test
public void addEntryPlainTextOfGivenType() {
mainFrame.menuItemWithPath("File", "New " + databaseMode + " database").click();
JTableFixture entryTable = mainFrame.table();
entryTable.requireRowCount(0);
mainFrame.menuItemWithPath("BibTeX", "New entry from plain text...").click();
selectEntryType();
GenericTypeMatcher<JDialog> matcher2 = plainTextMatcher();
findDialog(matcher2).withTimeout(10_000).using(robot()).button(new GenericTypeMatcher<JButton>(JButton.class) {
@Override
protected boolean isMatching(@Nonnull JButton jButton) {
return "Accept".equals(jButton.getText());
}
}).click();
entryTable.requireRowCount(1);
}
@Test
public void closeAddingEntryPlainTextOfGivenType() {
mainFrame.menuItemWithPath("File", "New " + databaseMode + " database").click();
JTableFixture entryTable = mainFrame.table();
entryTable.requireRowCount(0);
mainFrame.menuItemWithPath("BibTeX", "New entry from plain text...").click();
selectEntryType();
GenericTypeMatcher<JDialog> matcher2 = plainTextMatcher();
findDialog(matcher2).withTimeout(10_000).using(robot()).close();
entryTable.requireRowCount(0);
}
@Test
public void cancelAddingEntryPlainTextOfGivenType() {
mainFrame.menuItemWithPath("File", "New " + databaseMode + " database").click();
JTableFixture entryTable = mainFrame.table();
entryTable.requireRowCount(0);
mainFrame.menuItemWithPath("BibTeX", "New entry from plain text...").click();
selectEntryType();
GenericTypeMatcher<JDialog> matcher2 = plainTextMatcher();
findDialog(matcher2).withTimeout(10_000).using(robot()).button(new GenericTypeMatcher<JButton>(JButton.class) {
@Override
protected boolean isMatching(@Nonnull JButton jButton) {
return "Cancel".equals(jButton.getText());
}
}).click();
entryTable.requireRowCount(0);
}
private GenericTypeMatcher<JDialog> plainTextMatcher() {
GenericTypeMatcher<JDialog> matcher2 = new GenericTypeMatcher<JDialog>(JDialog.class) {
@Override
protected boolean isMatching(JDialog dialog) {
return ("Plain text import for " + entryType.toLowerCase(Locale.ENGLISH)).equals(dialog.getTitle());
}
};
return matcher2;
}
@Parameterized.Parameters(name = "{index}: {0} : {1}")
public static Collection<Object[]> instancesToTest() {
// Create entry from menu
// Structure:
// {"BibTeX"/"biblatex", "type"}
// @formatter:off
return Arrays.asList(
new Object[]{"BibTeX", "Article"},
/* new Object[]{"BibTeX", "InBook"},
new Object[]{"BibTeX", "Book"},
new Object[]{"BibTeX", "Booklet"},
new Object[]{"BibTeX", "InCollection"},
new Object[]{"BibTeX", "Conference"},
new Object[]{"BibTeX", "InProceedings"},
new Object[]{"BibTeX", "Proceedings"},
new Object[]{"BibTeX", "Manual"},
new Object[]{"BibTeX", "MastersThesis"},
new Object[]{"BibTeX", "PhdThesis"},
new Object[]{"BibTeX", "TechReport"},
new Object[]{"BibTeX", "Unpublished"},
new Object[]{"BibTeX", "Misc"},
new Object[]{"BibTeX", "Electronic"},
new Object[]{"BibTeX", "IEEEtranBSTCTL"},
new Object[]{"BibTeX", "Periodical"},
new Object[]{"BibTeX", "Patent"},
new Object[]{"BibTeX", "Standard"},
new Object[]{"biblatex", "Article"},
new Object[]{"biblatex", "Book"},
new Object[]{"biblatex", "BookInBook"},
new Object[]{"biblatex", "Booklet"},
new Object[]{"biblatex", "Collection"},
new Object[]{"biblatex", "Conference"},
new Object[]{"biblatex", "Electronic"},
new Object[]{"biblatex", "IEEEtranBSTCTL"},
new Object[]{"biblatex", "InBook"},
new Object[]{"biblatex", "InCollection"},
new Object[]{"biblatex", "InProceedings"},
new Object[]{"biblatex", "InReference"},
new Object[]{"biblatex", "Manual"},
new Object[]{"biblatex", "MastersThesis"},
new Object[]{"biblatex", "Misc"},
new Object[]{"biblatex", "MvBook"},
new Object[]{"biblatex", "MvCollection"},
new Object[]{"biblatex", "MvProceedings"},
new Object[]{"biblatex", "MvReference"},
new Object[]{"biblatex", "Online"},
new Object[]{"biblatex", "Patent"},
new Object[]{"biblatex", "Periodical"},
new Object[]{"biblatex", "PhdThesis"},
new Object[]{"biblatex", "Proceedings"},
new Object[]{"biblatex", "Reference"},
new Object[]{"biblatex", "Report"},
new Object[]{"biblatex", "Set"},
new Object[]{"biblatex", "SuppBook"},
new Object[]{"biblatex", "SuppCollection"},
new Object[]{"biblatex", "SuppPeriodical"},
new Object[]{"biblatex", "TechReport"},
new Object[]{"biblatex", "Thesis"},
new Object[]{"biblatex", "Unpublished"},*/
new Object[]{"biblatex", "WWW"}
);
// @formatter:on
}
}