/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.app.bulkedit;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import org.dspace.AbstractUnitTest;
import org.junit.*;
import static org.junit.Assert.* ;
import static org.hamcrest.CoreMatchers.*;
import org.apache.log4j.Logger;
/**
* Unit Tests for class DSpaceCSV
*
* @author Stuart Lewis
*/
public class DSpaceCSVTest extends AbstractUnitTest
{
/** log4j category */
private static final Logger log = Logger.getLogger(DSpaceCSVTest.class);
/**
* Test the reading and parsing of CSV files
*/
@Test
public void testDSpaceCSV()
{
try
{
// Test the CSV parsing
String[] csv = {"id,collection,\"dc.title[en]\",dc.contributor.author,dc.description.abstract",
"+,56599ad5-c7d2-4ac3-8354-a1f277d5a31f,Easy line,\"Lewis, Stuart\",A nice short abstract",
"+,56599ad5-c7d2-4ac3-8354-a1f277d5a31f,Two authors,\"Lewis, Stuart||Bloggs, Joe\",Two people wrote this item",
"+,56599ad5-c7d2-4ac3-8354-a1f277d5a31f,Three authors,\"Lewis, Stuart||Bloggs, Joe||Loaf, Meat\",Three people wrote this item",
"+,56599ad5-c7d2-4ac3-8354-a1f277d5a31f,\"Two line\ntitle\",\"Lewis, Stuart\",abstract",
"+,56599ad5-c7d2-4ac3-8354-a1f277d5a31f,\"\"\"Embedded quotes\"\" here\",\"Lewis, Stuart\",\"Abstract with\ntwo\nnew lines\"",
"+,56599ad5-c7d2-4ac3-8354-a1f277d5a31f,\"\"\"Unbalanced embedded\"\" quotes\"\" here\",\"Lewis, Stuart\",\"Abstract with\ntwo\nnew lines\"",};
// Write the string to a file
String filename = "test.csv";
BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(filename), "UTF-8"));
for (String csvLine : csv) {
out.write(csvLine + "\n");
}
out.flush();
out.close();
out = null;
// Test the CSV parsing was OK
DSpaceCSV dcsv = new DSpaceCSV(new File(filename), context);
String[] lines = dcsv.getCSVLinesAsStringArray();
assertThat("testDSpaceCSV Good CSV", lines.length, equalTo(7));
// Check the new lines are OK
List<DSpaceCSVLine> csvLines = dcsv.getCSVLines();
DSpaceCSVLine line = csvLines.get(5);
List<String> value = new ArrayList<String>();
value.add("Abstract with\ntwo\nnew lines");
assertThat("testDSpaceCSV New lines", line.valueToCSV(value, dcsv.valueSeparator),
equalTo("\"Abstract with\ntwo\nnew lines\""));
line = null;
// Test the CSV parsing with a bad heading element value
csv[0] = "id,collection,\"dc.title[en]\",dc.contributor.foobar[en-US],dc.description.abstract";
// Write the string to a file
filename = "test.csv";
out = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(filename), "UTF-8"));
for (String csvLine : csv) {
out.write(csvLine + "\n");
}
out.flush();
out.close();
out = null;
// Test the CSV parsing was OK
try
{
dcsv = new DSpaceCSV(new File(filename), context);
lines = dcsv.getCSVLinesAsStringArray();
fail("An exception should have been thrown due to bad CSV");
}
catch (Exception e)
{
assertThat("testDSpaceCSV Bad heading CSV", e.getMessage(), equalTo("Unknown metadata element in column 4: dc.contributor.foobar"));
}
lines = dcsv.getCSVLinesAsStringArray();
assertThat("testDSpaceCSV Good CSV", lines.length, equalTo(7));
// Test the CSV parsing with a bad heading schema value
csv[0] = "id,collection,\"dcdc.title[en]\",dc.contributor[en-US],dc.description.abstract";
// Write the string to a file
filename = "test.csv";
out = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(filename), "UTF-8"));
for (String csvLine : csv) {
out.write(csvLine + "\n");
}
out.flush();
out.close();
out = null;
// Test the CSV parsing was OK
try
{
dcsv = new DSpaceCSV(new File(filename), context);
lines = dcsv.getCSVLinesAsStringArray();
fail("An exception should have been thrown due to bad CSV");
}
catch (Exception e)
{
assertThat("testDSpaceCSV Bad heading CSV", e.getMessage(), equalTo("Unknown metadata schema in column 3: dcdc.title"));
}
// Delete the test file
File toDelete = new File(filename);
toDelete.delete();
toDelete = null;
// Nullify resources so JUnit will clean them up
dcsv = null;
lines = null;
}
catch (Exception ex) {
log.error("IO Error while creating test CSV file", ex);
fail("IO Error while creating test CSV file");
}
}
}