From 7e0bd7c2e6254337ce04085bd5eb3ebd86479c43 Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Mon, 21 Mar 2016 15:03:21 +0100 Subject: [PATCH 1/4] Added initial tests for ExportFormat --- .../sf/jabref/exporter/ExportFormatTest.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/test/java/net/sf/jabref/exporter/ExportFormatTest.java diff --git a/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java b/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java new file mode 100644 index 00000000000..beb94d164e9 --- /dev/null +++ b/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java @@ -0,0 +1,69 @@ +package net.sf.jabref.exporter; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +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; + +public class ExportFormatTest { + + @Before + public void setUp() { + Globals.prefs = JabRefPreferences.getInstance(); + ExportFormats.initAllExports(); + Globals.journalAbbreviationLoader = new JournalAbbreviationLoader(Globals.prefs); + + } + + @Test + public void testExportingEmptyDatabaseLayoutBasedFormat() throws Exception { + BibDatabase db = new BibDatabase(); + Map exportFormats = ExportFormats.getExportFormats(); + IExportFormat exportFormat = exportFormats.get("html"); + try { + File tmpFile = File.createTempFile("exporttest", "html"); + tmpFile.deleteOnExit(); + String filename = tmpFile.getCanonicalPath(); + List entries = Collections.emptyList(); + Charset charset = Charsets.UTF_8; + MetaData metaData = new MetaData(); + exportFormat.performExport(db, metaData, filename, charset, entries); + } catch (IOException e) { + Assert.fail("Exception caught: " + e.toString() + e.getMessage()); + } + } + + @Test + public void testExportingEmptyDatabaseClassBasedFormat() throws Exception { + BibDatabase db = new BibDatabase(); + Map exportFormats = ExportFormats.getExportFormats(); + IExportFormat exportFormat = exportFormats.get("oocalc"); + try { + File tmpFile = File.createTempFile("exporttest", "oocalc"); + tmpFile.deleteOnExit(); + String filename = tmpFile.getCanonicalPath(); + List entries = Collections.emptyList(); + Charset charset = Charsets.UTF_8; + MetaData metaData = new MetaData(); + exportFormat.performExport(db, metaData, filename, charset, entries); + } catch (IOException e) { + Assert.fail("Exception caught: " + e.toString() + e.getMessage()); + } + } + +} From 50152cc959c00ae412908ba31b27da1b6df150a4 Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Tue, 22 Mar 2016 09:23:29 +0100 Subject: [PATCH 2/4] Improved tests and always include all entries instead of null --- src/main/java/net/sf/jabref/JabRef.java | 3 +- .../net/sf/jabref/exporter/ExportFormat.java | 3 +- .../net/sf/jabref/exporter/ExportFormats.java | 4 ++ .../sf/jabref/exporter/ExportFormatTest.java | 59 +++++++++++-------- 4 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/main/java/net/sf/jabref/JabRef.java b/src/main/java/net/sf/jabref/JabRef.java index d8e78a8fc2d..362550dd063 100644 --- a/src/main/java/net/sf/jabref/JabRef.java +++ b/src/main/java/net/sf/jabref/JabRef.java @@ -275,7 +275,8 @@ public Optional> 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()); diff --git a/src/main/java/net/sf/jabref/exporter/ExportFormat.java b/src/main/java/net/sf/jabref/exporter/ExportFormat.java index ba1fa96c9bc..8a84d5422e9 100644 --- a/src/main/java/net/sf/jabref/exporter/ExportFormat.java +++ b/src/main/java/net/sf/jabref/exporter/ExportFormat.java @@ -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 - * null, 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. diff --git a/src/main/java/net/sf/jabref/exporter/ExportFormats.java b/src/main/java/net/sf/jabref/exporter/ExportFormats.java index 261ad9cea21..e07f5caf759 100644 --- a/src/main/java/net/sf/jabref/exporter/ExportFormats.java +++ b/src/main/java/net/sf/jabref/exporter/ExportFormats.java @@ -202,7 +202,11 @@ public void actionPerformed(ActionEvent e) { final IExportFormat format = eff.getExportFormat(); List 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, diff --git a/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java b/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java index beb94d164e9..a61a030b7bf 100644 --- a/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java +++ b/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java @@ -1,15 +1,18 @@ package net.sf.jabref.exporter; +import static org.junit.Assert.*; + import java.io.File; -import java.io.IOException; +import java.io.FileReader; import java.nio.charset.Charset; import java.util.Collections; import java.util.List; import java.util.Map; -import org.junit.Assert; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TemporaryFolder; import com.google.common.base.Charsets; @@ -22,6 +25,10 @@ public class ExportFormatTest { + @Rule + public TemporaryFolder testFolder = new TemporaryFolder(); + + @Before public void setUp() { Globals.prefs = JabRefPreferences.getInstance(); @@ -32,37 +39,39 @@ public void setUp() { @Test public void testExportingEmptyDatabaseLayoutBasedFormat() throws Exception { - BibDatabase db = new BibDatabase(); + BibDatabase database = new BibDatabase(); Map exportFormats = ExportFormats.getExportFormats(); - IExportFormat exportFormat = exportFormats.get("html"); - try { - File tmpFile = File.createTempFile("exporttest", "html"); - tmpFile.deleteOnExit(); - String filename = tmpFile.getCanonicalPath(); - List entries = Collections.emptyList(); - Charset charset = Charsets.UTF_8; - MetaData metaData = new MetaData(); - exportFormat.performExport(db, metaData, filename, charset, entries); - } catch (IOException e) { - Assert.fail("Exception caught: " + e.toString() + e.getMessage()); + IExportFormat exportFormat = exportFormats.get("ris"); + File tmpFile = testFolder.newFile(); + tmpFile.deleteOnExit(); + String filename = tmpFile.getCanonicalPath(); + List entries = Collections.emptyList(); + Charset charset = Charsets.UTF_8; + MetaData metaData = new MetaData(); + exportFormat.performExport(database, metaData, filename, charset, entries); + assertTrue(tmpFile.exists()); + try (FileReader fileReader = new FileReader(tmpFile)) { + char[] buffer = new char[512]; + assertEquals(-1, fileReader.read(buffer)); // Empty file } } @Test public void testExportingEmptyDatabaseClassBasedFormat() throws Exception { - BibDatabase db = new BibDatabase(); + BibDatabase database = new BibDatabase(); Map exportFormats = ExportFormats.getExportFormats(); IExportFormat exportFormat = exportFormats.get("oocalc"); - try { - File tmpFile = File.createTempFile("exporttest", "oocalc"); - tmpFile.deleteOnExit(); - String filename = tmpFile.getCanonicalPath(); - List entries = Collections.emptyList(); - Charset charset = Charsets.UTF_8; - MetaData metaData = new MetaData(); - exportFormat.performExport(db, metaData, filename, charset, entries); - } catch (IOException e) { - Assert.fail("Exception caught: " + e.toString() + e.getMessage()); + File tmpFile = File.createTempFile("exporttest", "oocalc"); + tmpFile.deleteOnExit(); + String filename = tmpFile.getCanonicalPath(); + List entries = Collections.emptyList(); + Charset charset = Charsets.UTF_8; + MetaData metaData = new MetaData(); + exportFormat.performExport(database, metaData, filename, charset, entries); + assertTrue(tmpFile.exists()); + try (FileReader fileReader = new FileReader(tmpFile)) { + char[] buffer = new char[512]; + assertEquals(-1, fileReader.read(buffer)); // Empty file } } From d3164639826c9d8dd935becdbf547923c7580c7f Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Tue, 22 Mar 2016 09:47:04 +0100 Subject: [PATCH 3/4] Improved the tests to test all exporters and restored the previously ignored BibDatabaseWriter change --- .../sf/jabref/exporter/BibDatabaseWriter.java | 14 ++-- .../net/sf/jabref/exporter/ExportFormat.java | 6 +- .../sf/jabref/exporter/MSBibExportFormat.java | 9 ++- .../sf/jabref/exporter/ModsExportFormat.java | 8 ++- .../net/sf/jabref/exporter/MySQLExport.java | 12 ++-- .../OpenDocumentSpreadsheetCreator.java | 8 ++- .../exporter/OpenOfficeDocumentCreator.java | 8 ++- .../sf/jabref/exporter/PostgreSQLExport.java | 12 ++-- .../exporter/BibDatabaseWriterTest.java | 2 - .../sf/jabref/exporter/ExportFormatTest.java | 67 ++++++++++++------- 10 files changed, 92 insertions(+), 54 deletions(-) diff --git a/src/main/java/net/sf/jabref/exporter/BibDatabaseWriter.java b/src/main/java/net/sf/jabref/exporter/BibDatabaseWriter.java index a15e4dc2592..c5eb985993e 100644 --- a/src/main/java/net/sf/jabref/exporter/BibDatabaseWriter.java +++ b/src/main/java/net/sf/jabref/exporter/BibDatabaseWriter.java @@ -81,15 +81,13 @@ private static List> getSaveComparators(SavePreferences pre */ public static List getSortedEntries(BibDatabaseContext bibDatabaseContext, List 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 result = new LinkedList<>(); - if (entriesToSort == null) { - result.addAll(bibDatabaseContext.getDatabase().getEntries()); - } else { - result.addAll(entriesToSort); - } + result.addAll(entriesToSort); return result; } @@ -98,11 +96,7 @@ public static List getSortedEntries(BibDatabaseContext bibDatabaseCont FieldComparatorStack comparatorStack = new FieldComparatorStack<>(comparators); List sorted = new ArrayList<>(); - if (entriesToSort == null) { - sorted.addAll(bibDatabaseContext.getDatabase().getEntries()); - } else { - sorted.addAll(entriesToSort); - } + sorted.addAll(entriesToSort); Collections.sort(sorted, comparatorStack); diff --git a/src/main/java/net/sf/jabref/exporter/ExportFormat.java b/src/main/java/net/sf/jabref/exporter/ExportFormat.java index 8a84d5422e9..f016fac962d 100644 --- a/src/main/java/net/sf/jabref/exporter/ExportFormat.java +++ b/src/main/java/net/sf/jabref/exporter/ExportFormat.java @@ -176,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 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) { diff --git a/src/main/java/net/sf/jabref/exporter/MSBibExportFormat.java b/src/main/java/net/sf/jabref/exporter/MSBibExportFormat.java index 99b1a64e0fd..76a3bc2454e 100644 --- a/src/main/java/net/sf/jabref/exporter/MSBibExportFormat.java +++ b/src/main/java/net/sf/jabref/exporter/MSBibExportFormat.java @@ -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; @@ -48,6 +47,12 @@ public MSBibExportFormat() { @Override public void performExport(final BibDatabase database, final MetaData metaData, final String file, final Charset encoding, List 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); diff --git a/src/main/java/net/sf/jabref/exporter/ModsExportFormat.java b/src/main/java/net/sf/jabref/exporter/ModsExportFormat.java index 0f79efb9b2e..4b2c0674912 100644 --- a/src/main/java/net/sf/jabref/exporter/ModsExportFormat.java +++ b/src/main/java/net/sf/jabref/exporter/ModsExportFormat.java @@ -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; @@ -47,6 +47,12 @@ public ModsExportFormat() { @Override public void performExport(final BibDatabase database, final MetaData metaData, final String file, final Charset encoding, List 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); diff --git a/src/main/java/net/sf/jabref/exporter/MySQLExport.java b/src/main/java/net/sf/jabref/exporter/MySQLExport.java index edb18cca240..0e9878b03d8 100644 --- a/src/main/java/net/sf/jabref/exporter/MySQLExport.java +++ b/src/main/java/net/sf/jabref/exporter/MySQLExport.java @@ -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; @@ -48,9 +47,12 @@ public MySQLExport() { public void performExport(final BibDatabase database, final MetaData metaData, final String file, final Charset encodingToUse, List 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); + } } diff --git a/src/main/java/net/sf/jabref/exporter/OpenDocumentSpreadsheetCreator.java b/src/main/java/net/sf/jabref/exporter/OpenDocumentSpreadsheetCreator.java index 0698d37406b..41ff2946391 100644 --- a/src/main/java/net/sf/jabref/exporter/OpenDocumentSpreadsheetCreator.java +++ b/src/main/java/net/sf/jabref/exporter/OpenDocumentSpreadsheetCreator.java @@ -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; @@ -57,7 +57,11 @@ public OpenDocumentSpreadsheetCreator() { @Override public void performExport(final BibDatabase database, final MetaData metaData, final String file, final Charset encoding, List 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 { diff --git a/src/main/java/net/sf/jabref/exporter/OpenOfficeDocumentCreator.java b/src/main/java/net/sf/jabref/exporter/OpenOfficeDocumentCreator.java index 97a49e4723b..625e5fdc75a 100644 --- a/src/main/java/net/sf/jabref/exporter/OpenOfficeDocumentCreator.java +++ b/src/main/java/net/sf/jabref/exporter/OpenOfficeDocumentCreator.java @@ -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; @@ -56,7 +56,11 @@ public OpenOfficeDocumentCreator() { @Override public void performExport(final BibDatabase database, final MetaData metaData, final String file, final Charset encoding, List 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 { diff --git a/src/main/java/net/sf/jabref/exporter/PostgreSQLExport.java b/src/main/java/net/sf/jabref/exporter/PostgreSQLExport.java index a4f843e405f..31f4131888a 100644 --- a/src/main/java/net/sf/jabref/exporter/PostgreSQLExport.java +++ b/src/main/java/net/sf/jabref/exporter/PostgreSQLExport.java @@ -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; @@ -53,9 +52,12 @@ public PostgreSQLExport() { @Override public void performExport(final BibDatabase database, final MetaData metaData, final String file, final Charset encoding, List 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); + } } diff --git a/src/test/java/net/sf/jabref/exporter/BibDatabaseWriterTest.java b/src/test/java/net/sf/jabref/exporter/BibDatabaseWriterTest.java index 21ddb38a0da..e2830041d36 100644 --- a/src/test/java/net/sf/jabref/exporter/BibDatabaseWriterTest.java +++ b/src/test/java/net/sf/jabref/exporter/BibDatabaseWriterTest.java @@ -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; @@ -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()); } diff --git a/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java b/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java index a61a030b7bf..f3a74c7b1a4 100644 --- a/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java +++ b/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java @@ -38,41 +38,60 @@ public void setUp() { } @Test - public void testExportingEmptyDatabaseLayoutBasedFormat() throws Exception { + public void testExportingEmptyDatabaseYieldsEmptyFile() throws Exception { BibDatabase database = new BibDatabase(); - Map exportFormats = ExportFormats.getExportFormats(); - IExportFormat exportFormat = exportFormats.get("ris"); - File tmpFile = testFolder.newFile(); - tmpFile.deleteOnExit(); - String filename = tmpFile.getCanonicalPath(); + for (Map.Entry exportFormats : ExportFormats.getExportFormats().entrySet()) { + IExportFormat exportFormat = exportFormats.getValue(); + File tmpFile = testFolder.newFile(); + tmpFile.deleteOnExit(); + String filename = tmpFile.getCanonicalPath(); + List entries = Collections.emptyList(); + Charset charset = Charsets.UTF_8; + MetaData metaData = new MetaData(); + exportFormat.performExport(database, metaData, filename, charset, entries); + assertTrue(exportFormats.getKey() + " failed -- no file", tmpFile.exists()); + try (FileReader fileReader = new FileReader(tmpFile)) { + char[] buffer = new char[512]; + assertEquals(exportFormats.getKey() + " failed -- non-empty file", -1, fileReader.read(buffer)); // Empty file + } + } + } + + @Test + public void testExportingNullDatabaseThrowsNPE() throws Exception { List entries = Collections.emptyList(); Charset charset = Charsets.UTF_8; MetaData metaData = new MetaData(); - exportFormat.performExport(database, metaData, filename, charset, entries); - assertTrue(tmpFile.exists()); - try (FileReader fileReader = new FileReader(tmpFile)) { - char[] buffer = new char[512]; - assertEquals(-1, fileReader.read(buffer)); // Empty file + for (Map.Entry exportFormats : ExportFormats.getExportFormats().entrySet()) { + try { + IExportFormat exportFormat = exportFormats.getValue(); + File tmpFile = testFolder.newFile(); + tmpFile.deleteOnExit(); + String filename = tmpFile.getCanonicalPath(); + exportFormat.performExport(null, metaData, filename, charset, entries); + fail(); + } catch (NullPointerException expected) { + // Ignore -- this is what we want! + } } } @Test - public void testExportingEmptyDatabaseClassBasedFormat() throws Exception { + public void testExportingNullEntriesThrowsNPE() throws Exception { BibDatabase database = new BibDatabase(); - Map exportFormats = ExportFormats.getExportFormats(); - IExportFormat exportFormat = exportFormats.get("oocalc"); - File tmpFile = File.createTempFile("exporttest", "oocalc"); - tmpFile.deleteOnExit(); - String filename = tmpFile.getCanonicalPath(); - List entries = Collections.emptyList(); Charset charset = Charsets.UTF_8; MetaData metaData = new MetaData(); - exportFormat.performExport(database, metaData, filename, charset, entries); - assertTrue(tmpFile.exists()); - try (FileReader fileReader = new FileReader(tmpFile)) { - char[] buffer = new char[512]; - assertEquals(-1, fileReader.read(buffer)); // Empty file + for (Map.Entry exportFormats : ExportFormats.getExportFormats().entrySet()) { + try { + IExportFormat exportFormat = exportFormats.getValue(); + File tmpFile = testFolder.newFile(); + tmpFile.deleteOnExit(); + String filename = tmpFile.getCanonicalPath(); + exportFormat.performExport(database, metaData, filename, charset, null); + fail(); + } catch (NullPointerException expected) { + // Ignore -- this is what we want! + } } } - } From b9bf04a5de9f1d8fe31e0be10a044e9519fab34d Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Tue, 22 Mar 2016 14:01:57 +0100 Subject: [PATCH 4/4] Parameterized tests --- .../sf/jabref/exporter/ExportFormatTest.java | 104 +++++++++--------- 1 file changed, 49 insertions(+), 55 deletions(-) diff --git a/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java b/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java index f3a74c7b1a4..bfd8eea04bf 100644 --- a/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java +++ b/src/test/java/net/sf/jabref/exporter/ExportFormatTest.java @@ -5,15 +5,16 @@ 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 java.util.Map; - -import org.junit.Before; +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; @@ -23,75 +24,68 @@ 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 entries; + + public ExportFormatTest(IExportFormat format, String name) { + exportFormat = format; + exportFormatName = name; + } + + @Rule public TemporaryFolder testFolder = new TemporaryFolder(); - @Before - public void setUp() { - Globals.prefs = JabRefPreferences.getInstance(); - ExportFormats.initAllExports(); + @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 { - BibDatabase database = new BibDatabase(); - for (Map.Entry exportFormats : ExportFormats.getExportFormats().entrySet()) { - IExportFormat exportFormat = exportFormats.getValue(); - File tmpFile = testFolder.newFile(); - tmpFile.deleteOnExit(); - String filename = tmpFile.getCanonicalPath(); - List entries = Collections.emptyList(); - Charset charset = Charsets.UTF_8; - MetaData metaData = new MetaData(); - exportFormat.performExport(database, metaData, filename, charset, entries); - assertTrue(exportFormats.getKey() + " failed -- no file", tmpFile.exists()); - try (FileReader fileReader = new FileReader(tmpFile)) { - char[] buffer = new char[512]; - assertEquals(exportFormats.getKey() + " failed -- non-empty file", -1, fileReader.read(buffer)); // Empty file - } + 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 + @Test(expected = NullPointerException.class) public void testExportingNullDatabaseThrowsNPE() throws Exception { - List entries = Collections.emptyList(); - Charset charset = Charsets.UTF_8; - MetaData metaData = new MetaData(); - for (Map.Entry exportFormats : ExportFormats.getExportFormats().entrySet()) { - try { - IExportFormat exportFormat = exportFormats.getValue(); - File tmpFile = testFolder.newFile(); - tmpFile.deleteOnExit(); - String filename = tmpFile.getCanonicalPath(); - exportFormat.performExport(null, metaData, filename, charset, entries); - fail(); - } catch (NullPointerException expected) { - // Ignore -- this is what we want! - } - } + File tmpFile = testFolder.newFile(); + String filename = tmpFile.getCanonicalPath(); + exportFormat.performExport(null, metaData, filename, charset, entries); } - @Test + @Test(expected = NullPointerException.class) public void testExportingNullEntriesThrowsNPE() throws Exception { - BibDatabase database = new BibDatabase(); - Charset charset = Charsets.UTF_8; - MetaData metaData = new MetaData(); - for (Map.Entry exportFormats : ExportFormats.getExportFormats().entrySet()) { - try { - IExportFormat exportFormat = exportFormats.getValue(); - File tmpFile = testFolder.newFile(); - tmpFile.deleteOnExit(); - String filename = tmpFile.getCanonicalPath(); - exportFormat.performExport(database, metaData, filename, charset, null); - fail(); - } catch (NullPointerException expected) { - // Ignore -- this is what we want! - } + File tmpFile = testFolder.newFile(); + String filename = tmpFile.getCanonicalPath(); + exportFormat.performExport(database, metaData, filename, charset, null); + } + + @Parameterized.Parameters(name = "{index}: {1}") + public static Collection exportFormats() { + Collection result = new ArrayList<>(); + Globals.prefs = JabRefPreferences.getInstance(); + ExportFormats.initAllExports(); + for (IExportFormat format : ExportFormats.getExportFormats().values()) { + result.add(new Object[] {format, format.getDisplayName()}); } + return result; } }