package org.voyanttools.trombone.input.expand;
import static org.junit.Assert.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.voyanttools.trombone.input.source.FileInputSource;
import org.voyanttools.trombone.input.source.InputSource;
import org.voyanttools.trombone.model.StoredDocumentSource;
import org.voyanttools.trombone.storage.Storage;
import org.voyanttools.trombone.storage.StoredDocumentSourceStorage;
import org.voyanttools.trombone.util.FlexibleParameters;
import org.voyanttools.trombone.util.TestHelper;
public class XslExpanderTest {
@Test
public void test() throws IOException {
InputSource inputSource;
inputSource = new FileInputSource(TestHelper.getResource("formats/chars.xlsx"));
test(inputSource);
inputSource = new FileInputSource(TestHelper.getResource("formats/chars.xls"));
test(inputSource);
}
private void test(InputSource inputSource) throws IOException {
Storage storage = TestHelper.getDefaultTestStorage();
StoredDocumentSourceStorage storedDocumentSourceStorage = storage.getStoredDocumentSourceStorage();
StoredDocumentSource storedDocumentSource;
List<StoredDocumentSource> expandedSourceDocumentSources;
storedDocumentSource = storedDocumentSourceStorage.getStoredDocumentSource(inputSource);
StoredDocumentSourceExpander storedDocumentSourceExpander;
FlexibleParameters parameters;
InputStream inputStream;
String contents;
// no parameters, this would get handled by an extractor, not the expander
storedDocumentSourceExpander = new StoredDocumentSourceExpander(storedDocumentSourceStorage);
expandedSourceDocumentSources = storedDocumentSourceExpander.expandXsl(storedDocumentSource);
assertEquals(1, expandedSourceDocumentSources.size());
/* COLUMNS */
// documents as columns, no columns defined so use all
parameters = new FlexibleParameters();
parameters.setParameter("tableDocuments", "columns");
storedDocumentSourceExpander = new StoredDocumentSourceExpander(storedDocumentSourceStorage, parameters);
expandedSourceDocumentSources = storedDocumentSourceExpander.expandXsl(storedDocumentSource);
assertEquals("phrase1", expandedSourceDocumentSources.get(0).getMetadata().getTitle());
assertEquals(2, expandedSourceDocumentSources.size());
// first column tableDocumentsColumns, default header column
parameters = new FlexibleParameters();
parameters.setParameter("tableDocuments", "columns");
parameters.setParameter("tableContent", 1);
storedDocumentSourceExpander = new StoredDocumentSourceExpander(storedDocumentSourceStorage, parameters);
expandedSourceDocumentSources = storedDocumentSourceExpander.expandXsl(storedDocumentSource);
assertEquals(1, expandedSourceDocumentSources.size());
assertEquals("phrase1", expandedSourceDocumentSources.get(0).getMetadata().getTitle());
inputStream = storedDocumentSourceStorage.getStoredDocumentSourceInputStream(expandedSourceDocumentSources.get(0).getId());
contents = IOUtils.toString(inputStream);
inputStream.close();
// contents = IOUtils.toString(storedDocumentSourceStorage.getStoredDocumentSourceInputStream(expandedSourceDocumentSources.get(0).getId()));
assertEquals(1, contents.split("\n").length);
// first column tableDocumentsColumns, no header column
parameters = new FlexibleParameters();
parameters.setParameter("tableDocuments", "columns");
parameters.setParameter("tableContent", 1);
parameters.setParameter("tableNoHeadersRow", "true");
storedDocumentSourceExpander = new StoredDocumentSourceExpander(storedDocumentSourceStorage, parameters);
expandedSourceDocumentSources = storedDocumentSourceExpander.expandXsl(storedDocumentSource);
assertEquals("1.0.1", expandedSourceDocumentSources.get(0).getMetadata().getTitle());
assertEquals(1, expandedSourceDocumentSources.size());
inputStream = storedDocumentSourceStorage.getStoredDocumentSourceInputStream(expandedSourceDocumentSources.get(0).getId());
contents = IOUtils.toString(inputStream);
inputStream.close();
// contents = IOUtils.toString(storedDocumentSourceStorage.getStoredDocumentSourceInputStream(expandedSourceDocumentSources.get(0).getId()));
assertEquals(2, contents.split("\n+").length);
// first and second columns tableDocumentsColumns
parameters = new FlexibleParameters();
parameters.setParameter("tableDocuments", "columns");
parameters.setParameter("tableContent", "1,2");
parameters.setParameter("tableNoHeadersRow", "true");
storedDocumentSourceExpander = new StoredDocumentSourceExpander(storedDocumentSourceStorage, parameters);
expandedSourceDocumentSources = storedDocumentSourceExpander.expandXsl(storedDocumentSource);
assertEquals(2, expandedSourceDocumentSources.size());
// first and second columns merged (third doesn't is empty or doesn't exist) tableDocumentsColumns
parameters = new FlexibleParameters();
parameters.setParameter("tableDocuments", "columns");
parameters.setParameter("tableContent", "1+2,3000");
storedDocumentSourceExpander = new StoredDocumentSourceExpander(storedDocumentSourceStorage, parameters);
expandedSourceDocumentSources = storedDocumentSourceExpander.expandXsl(storedDocumentSource);
assertEquals(1, expandedSourceDocumentSources.size());
// syntax error with column definitions
parameters = new FlexibleParameters();
parameters.setParameter("tableDocuments", "columns");
parameters.setParameter("tableContent", "a; 2, 3");
storedDocumentSourceExpander = new StoredDocumentSourceExpander(storedDocumentSourceStorage, parameters);
boolean caught = false;
try {
expandedSourceDocumentSources = storedDocumentSourceExpander.expandXsl(storedDocumentSource);
fail("We should have had an illegal argument exception.");
}
catch (IllegalArgumentException e) {
}
/* ROWS */
// documents as rows, nothing defined
parameters = new FlexibleParameters();
parameters.setParameter("tableDocuments", "rows");
storedDocumentSourceExpander = new StoredDocumentSourceExpander(storedDocumentSourceStorage, parameters);
expandedSourceDocumentSources = storedDocumentSourceExpander.expandXsl(storedDocumentSource);
assertEquals("phrase1 phrase 2", expandedSourceDocumentSources.get(0).getMetadata().getTitle());
assertEquals("1.0+1.2", expandedSourceDocumentSources.get(0).getMetadata().getLocation());
assertEquals(1, expandedSourceDocumentSources.size());
// documents as rows, first column only
parameters = new FlexibleParameters();
parameters.setParameter("tableDocuments", "rows");
parameters.setParameter("tableContent", 1);
storedDocumentSourceExpander = new StoredDocumentSourceExpander(storedDocumentSourceStorage, parameters);
expandedSourceDocumentSources = storedDocumentSourceExpander.expandXsl(storedDocumentSource);
assertEquals(1, expandedSourceDocumentSources.size());
assertEquals("phrase1", expandedSourceDocumentSources.get(0).getMetadata().getTitle());
assertEquals("1.0.2", expandedSourceDocumentSources.get(0).getMetadata().getLocation());
inputStream = storedDocumentSourceStorage.getStoredDocumentSourceInputStream(expandedSourceDocumentSources.get(0).getId());
contents = IOUtils.toString(inputStream);
inputStream.close();
// contents = IOUtils.toString(storedDocumentSourceStorage.getStoredDocumentSourceInputStream(expandedSourceDocumentSources.get(0).getId()));
assertEquals(1, contents.split("\n").length);
// documents as rows, first column only, use header
parameters = new FlexibleParameters();
parameters.setParameter("tableDocuments", "rows");
parameters.setParameter("tableContent", 1);
parameters.setParameter("tableNoHeadersRow", "true");
storedDocumentSourceExpander = new StoredDocumentSourceExpander(storedDocumentSourceStorage, parameters);
expandedSourceDocumentSources = storedDocumentSourceExpander.expandXsl(storedDocumentSource);
assertEquals("1.0.1", expandedSourceDocumentSources.get(0).getMetadata().getTitle());
assertEquals(2, expandedSourceDocumentSources.size());
inputStream = storedDocumentSourceStorage.getStoredDocumentSourceInputStream(expandedSourceDocumentSources.get(0).getId());
contents = IOUtils.toString(inputStream);
inputStream.close();
// contents = IOUtils.toString(storedDocumentSourceStorage.getStoredDocumentSourceInputStream(expandedSourceDocumentSources.get(0).getId()));
assertEquals(2, contents.split("\n+").length);
// first and second columns
parameters = new FlexibleParameters();
parameters.setParameter("tableDocuments", "columns");
parameters.setParameter("tableContent", "1,2");
storedDocumentSourceExpander = new StoredDocumentSourceExpander(storedDocumentSourceStorage, parameters);
expandedSourceDocumentSources = storedDocumentSourceExpander.expandXsl(storedDocumentSource);
assertEquals(2, expandedSourceDocumentSources.size());
// first and second columns merged (third doesn't is empty or doesn't exist) tableDocumentsColumns
parameters = new FlexibleParameters();
parameters.setParameter("tableDocuments", "columns");
parameters.setParameter("tableContent", "1+2,3000");
storedDocumentSourceExpander = new StoredDocumentSourceExpander(storedDocumentSourceStorage, parameters);
expandedSourceDocumentSources = storedDocumentSourceExpander.expandXsl(storedDocumentSource);
assertEquals(1, expandedSourceDocumentSources.size());
storage.destroy();
}
}