Skip to content

Commit

Permalink
Merge pull request #1010 from oscargus/exportformattest
Browse files Browse the repository at this point in the history
Added initial tests for ExportFormat
  • Loading branch information
oscargus committed Mar 23, 2016
2 parents b2b7daa + b9bf04a commit e477631
Show file tree
Hide file tree
Showing 12 changed files with 147 additions and 33 deletions.
3 changes: 2 additions & 1 deletion src/main/java/net/sf/jabref/JabRef.java
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,8 @@ public Optional<Vector<ParserResult>> processArguments(String[] args, boolean in
// We have an ExportFormat instance:
try {
System.out.println(Localization.lang("Exporting") + ": " + data[1]);
format.performExport(newBase, pr.getMetaData(), data[1], pr.getEncoding(), null);
format.performExport(newBase, pr.getMetaData(), data[1], pr.getEncoding(),
newBase.getEntries());
} catch (Exception ex) {
System.err.println(Localization.lang("Could not export file") + " '" + data[1] + "': "
+ ex.getMessage());
Expand Down
14 changes: 4 additions & 10 deletions src/main/java/net/sf/jabref/exporter/BibDatabaseWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,15 +81,13 @@ private static List<Comparator<BibEntry>> getSaveComparators(SavePreferences pre
*/
public static List<BibEntry> getSortedEntries(BibDatabaseContext bibDatabaseContext, List<BibEntry> entriesToSort,
SavePreferences preferences) {
Objects.requireNonNull(bibDatabaseContext);
Objects.requireNonNull(entriesToSort);

//if no meta data are present, simply return in original order
if (bibDatabaseContext.getMetaData() == null) {
List<BibEntry> result = new LinkedList<>();
if (entriesToSort == null) {
result.addAll(bibDatabaseContext.getDatabase().getEntries());
} else {
result.addAll(entriesToSort);
}
result.addAll(entriesToSort);
return result;
}

Expand All @@ -98,11 +96,7 @@ public static List<BibEntry> getSortedEntries(BibDatabaseContext bibDatabaseCont
FieldComparatorStack<BibEntry> comparatorStack = new FieldComparatorStack<>(comparators);

List<BibEntry> sorted = new ArrayList<>();
if (entriesToSort == null) {
sorted.addAll(bibDatabaseContext.getDatabase().getEntries());
} else {
sorted.addAll(entriesToSort);
}
sorted.addAll(entriesToSort);

Collections.sort(sorted, comparatorStack);

Expand Down
9 changes: 6 additions & 3 deletions src/main/java/net/sf/jabref/exporter/ExportFormat.java
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,7 @@ private Reader getReader(String filename) throws IOException {
* @param metaData The database's meta data.
* @param file the file to write the resulting export to
* @param encoding The encoding of the database
* @param entries Contains all entries that should be exported. If
* <code>null</code>, all entries will be exported.
* @param entries Contains all entries that should be exported.
* @throws IOException if a problem occurred while trying to write to {@code writer}
* or read from required resources.
* @throws Exception if any other error occurred during export.
Expand All @@ -177,7 +176,11 @@ private Reader getReader(String filename) throws IOException {
@Override
public void performExport(final BibDatabase database, final MetaData metaData, final String file,
final Charset encoding, List<BibEntry> entries) throws Exception {

Objects.requireNonNull(database);
Objects.requireNonNull(entries);
if (entries.isEmpty()) { // Do not export if no entries to export -- avoids exports with only template text
return;
}
File outFile = new File(file);
SaveSession ss = null;
if (this.encoding != null) {
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/net/sf/jabref/exporter/ExportFormats.java
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,11 @@ public void actionPerformed(ActionEvent e) {
final IExportFormat format = eff.getExportFormat();
List<BibEntry> entries = null;
if (selectedOnly) {
// Selected entries
entries = frame.getCurrentBasePanel().getSelectedEntries();
} else {
// All entries
entries = frame.getCurrentBasePanel().getDatabase().getEntries();
}

// Set the global variable for this database's file directory before exporting,
Expand Down
9 changes: 7 additions & 2 deletions src/main/java/net/sf/jabref/exporter/MSBibExportFormat.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Set;

import java.util.Objects;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
Expand All @@ -48,6 +47,12 @@ public MSBibExportFormat() {
@Override
public void performExport(final BibDatabase database, final MetaData metaData, final String file,
final Charset encoding, List<BibEntry> entries) throws IOException {
Objects.requireNonNull(database);
Objects.requireNonNull(entries);

if (entries.isEmpty()) { // Only export if entries exist
return;
}
// forcing to use UTF8 output format for some problems with
// xml export in other encodings
SaveSession ss = new SaveSession(StandardCharsets.UTF_8, false);
Expand Down
8 changes: 7 additions & 1 deletion src/main/java/net/sf/jabref/exporter/ModsExportFormat.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.OutputKeys;
import java.util.List;
import java.util.Set;
import java.util.Objects;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
Expand All @@ -47,6 +47,12 @@ public ModsExportFormat() {
@Override
public void performExport(final BibDatabase database, final MetaData metaData, final String file,
final Charset encoding, List<BibEntry> entries) throws IOException {
Objects.requireNonNull(database);
Objects.requireNonNull(entries);
if (entries.isEmpty()) { // Only export if entries exist
return;
}

SaveSession ss = new SaveSession(StandardCharsets.UTF_8, false);
try (VerifyingWriter ps = ss.getWriter()) {
MODSDatabase md = new MODSDatabase(database, entries);
Expand Down
12 changes: 7 additions & 5 deletions src/main/java/net/sf/jabref/exporter/MySQLExport.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@

import java.nio.charset.Charset;
import java.util.List;
import java.util.Set;

import java.util.Objects;
import net.sf.jabref.model.database.BibDatabase;
import net.sf.jabref.MetaData;
import net.sf.jabref.logic.l10n.Localization;
Expand Down Expand Up @@ -48,9 +47,12 @@ public MySQLExport() {
public void performExport(final BibDatabase database, final MetaData metaData, final String file,
final Charset encodingToUse, List<BibEntry> entries)
throws Exception {

new DBExporterAndImporterFactory().getExporter("MYSQL").exportDatabaseAsFile(database, metaData, entries, file,
encodingToUse);
Objects.requireNonNull(database);
Objects.requireNonNull(entries);
if (!entries.isEmpty()) { // Only export if entries exist
new DBExporterAndImporterFactory().getExporter("MYSQL").exportDatabaseAsFile(database, metaData, entries, file,
encodingToUse);
}

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Set;
import java.util.Objects;
import java.util.zip.CRC32;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
Expand All @@ -57,7 +57,11 @@ public OpenDocumentSpreadsheetCreator() {
@Override
public void performExport(final BibDatabase database, final MetaData metaData, final String file,
final Charset encoding, List<BibEntry> entries) throws Exception {
OpenDocumentSpreadsheetCreator.exportOpenDocumentSpreadsheet(new File(file), database, entries);
Objects.requireNonNull(database);
Objects.requireNonNull(entries);
if (!entries.isEmpty()) { // Only export if entries exists
OpenDocumentSpreadsheetCreator.exportOpenDocumentSpreadsheet(new File(file), database, entries);
}
}

private static void storeOpenDocumentSpreadsheetFile(File file, InputStream source) throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Set;
import java.util.Objects;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

Expand All @@ -56,7 +56,11 @@ public OpenOfficeDocumentCreator() {
@Override
public void performExport(final BibDatabase database, final MetaData metaData, final String file,
final Charset encoding, List<BibEntry> entries) throws Exception {
OpenOfficeDocumentCreator.exportOpenOfficeCalc(new File(file), database, entries);
Objects.requireNonNull(database);
Objects.requireNonNull(entries);
if (!entries.isEmpty()) { // Do not export if no entries
OpenOfficeDocumentCreator.exportOpenOfficeCalc(new File(file), database, entries);
}
}

private static void storeOpenOfficeFile(File file, InputStream source) throws Exception {
Expand Down
12 changes: 7 additions & 5 deletions src/main/java/net/sf/jabref/exporter/PostgreSQLExport.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@

import java.nio.charset.Charset;
import java.util.List;
import java.util.Set;

import java.util.Objects;
import net.sf.jabref.model.database.BibDatabase;
import net.sf.jabref.MetaData;
import net.sf.jabref.logic.l10n.Localization;
Expand Down Expand Up @@ -53,9 +52,12 @@ public PostgreSQLExport() {
@Override
public void performExport(final BibDatabase database, final MetaData metaData, final String file,
final Charset encoding, List<BibEntry> entries) throws Exception {

new DBExporterAndImporterFactory().getExporter("POSTGRESQL").exportDatabaseAsFile(database, metaData, entries,
file, encoding);
Objects.requireNonNull(database);
Objects.requireNonNull(entries);
if (!entries.isEmpty()) { // Only export if entries exist
new DBExporterAndImporterFactory().getExporter("POSTGRESQL").exportDatabaseAsFile(database, metaData, entries,
file, encoding);
}

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
Expand Down Expand Up @@ -63,7 +62,6 @@ public void writeWithNullContextThrowsException() throws IOException {
}

@Test(expected = NullPointerException.class)
@Ignore
public void writeWithNullEntriesThrowsException() throws IOException {
databaseWriter.writePartOfDatabase(mock(Writer.class), bibtexContext, null, new SavePreferences());
}
Expand Down
91 changes: 91 additions & 0 deletions src/test/java/net/sf/jabref/exporter/ExportFormatTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package net.sf.jabref.exporter;

import static org.junit.Assert.*;

import java.io.File;
import java.io.FileReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import com.google.common.base.Charsets;

import net.sf.jabref.Globals;
import net.sf.jabref.JabRefPreferences;
import net.sf.jabref.MetaData;
import net.sf.jabref.logic.journals.JournalAbbreviationLoader;
import net.sf.jabref.model.database.BibDatabase;
import net.sf.jabref.model.entry.BibEntry;

@RunWith(Parameterized.class)
public class ExportFormatTest {

public IExportFormat exportFormat;
public String exportFormatName;
public static BibDatabase database;
public static Charset charset;
public static MetaData metaData;
public static List<BibEntry> entries;

public ExportFormatTest(IExportFormat format, String name) {
exportFormat = format;
exportFormatName = name;
}


@Rule
public TemporaryFolder testFolder = new TemporaryFolder();


@BeforeClass
public static void setUp() {
Globals.journalAbbreviationLoader = new JournalAbbreviationLoader(Globals.prefs);
database = new BibDatabase();
charset = Charsets.UTF_8;
metaData = new MetaData();
entries = Collections.emptyList();
}

@Test
public void testExportingEmptyDatabaseYieldsEmptyFile() throws Exception {
File tmpFile = testFolder.newFile();
String filename = tmpFile.getCanonicalPath();
exportFormat.performExport(database, metaData, filename, charset, entries);
try (FileReader fileReader = new FileReader(tmpFile)) {
char[] buffer = new char[512];
assertEquals(-1, fileReader.read(buffer)); // Empty file
}
}

@Test(expected = NullPointerException.class)
public void testExportingNullDatabaseThrowsNPE() throws Exception {
File tmpFile = testFolder.newFile();
String filename = tmpFile.getCanonicalPath();
exportFormat.performExport(null, metaData, filename, charset, entries);
}

@Test(expected = NullPointerException.class)
public void testExportingNullEntriesThrowsNPE() throws Exception {
File tmpFile = testFolder.newFile();
String filename = tmpFile.getCanonicalPath();
exportFormat.performExport(database, metaData, filename, charset, null);
}

@Parameterized.Parameters(name = "{index}: {1}")
public static Collection<Object[]> exportFormats() {
Collection<Object[]> result = new ArrayList<>();
Globals.prefs = JabRefPreferences.getInstance();
ExportFormats.initAllExports();
for (IExportFormat format : ExportFormats.getExportFormats().values()) {
result.add(new Object[] {format, format.getDisplayName()});
}
return result;
}
}

0 comments on commit e477631

Please sign in to comment.