/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.utils.common.xml.impl;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertNotNull;
import java.io.File;
import java.io.InputStream;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import de.rcenvironment.core.utils.common.TempFileService;
import de.rcenvironment.core.utils.common.TempFileServiceAccess;
import de.rcenvironment.core.utils.common.xml.XMLException;
/**
* A test for the XMLSupport class.
*
* TODO Moved here for 6.2 because the class XMLException could not be moved due to serialization issues. Should be moved back to
* core.utils.common in 7.0.
*
* @author Brigitte Boden
*/
public class XMLSupportImplTest {
/**
* JUnit Rule for expected exceptions.
*/
@Rule
public ExpectedException thrown = ExpectedException.none();
private XMLSupportServiceImpl xmlSupport;
private File inputFile;
private String inputString;
private InputStream inputStream;
private File invalidFile;
private String invalidString;
private InputStream invalidStream;
private TempFileService tempFileService;
private File testRootDir;
private Log log;
/**
* Setup for the XMLSupport Test.
*
* @throws Exception on error.
*/
@Before
public void setup() throws Exception {
log = LogFactory.getLog(getClass());
xmlSupport = new XMLSupportServiceImpl();
inputFile = new File("src/test/resources/compareCPACS_1.xml");
inputString = FileUtils.readFileToString(inputFile);
inputStream = getClass().getClassLoader().getResourceAsStream("compareCPACS_1.xml");
invalidFile = new File("src/test/resources/invalidFile.xml");
invalidString = FileUtils.readFileToString(invalidFile);
invalidStream = getClass().getClassLoader().getResourceAsStream("invalidFile.xml");
// Setup root directory for testing
TempFileServiceAccess.setupUnitTestEnvironment();
tempFileService = TempFileServiceAccess.getInstance();
testRootDir = tempFileService.createManagedTempDir();
log.debug("Testing in temporary directory " + testRootDir.getAbsolutePath());
}
/**
* Tests all the methods for reading XML.
*
* @throws Exception on error.
*/
@Test
public void testReadXML() throws Exception {
// Valid input should be parsed correctly
assertNotNull(xmlSupport.readXMLFromFile(inputFile));
// test that all streams are properly closed
assertFalse(de.rcenvironment.core.utils.common.FileUtils.isLocked(inputFile));
assertNotNull(xmlSupport.readXMLFromStream(inputStream));
assertNotNull(xmlSupport.readXMLFromString(inputString));
// Null input should result in XMLException, no other Exceptions
thrown.expect(XMLException.class);
assertNull(xmlSupport.readXMLFromFile(null));
assertNull(xmlSupport.readXMLFromStream(null));
assertNull(xmlSupport.readXMLFromString(null));
// Same for invalid inputs
assertNull(xmlSupport.readXMLFromFile(invalidFile));
// test that all streams are properly closed
assertFalse(de.rcenvironment.core.utils.common.FileUtils.isLocked(invalidFile));
assertNull(xmlSupport.readXMLFromStream(invalidStream));
assertNull(xmlSupport.readXMLFromString(invalidString));
}
/**
* Tests all the methods for writing XML.
*
* @throws Exception on error.
*/
@Test
public void testWriteXML() throws Exception {
Document doc = xmlSupport.readXMLFromFile(inputFile);
File file = tempFileService.createTempFileFromPattern("testfile*.xml");
xmlSupport.writeXMLtoFile(doc, file);
// test that all streams are properly closed
assertFalse(de.rcenvironment.core.utils.common.FileUtils.isLocked(file));
assertNotNull(FileUtils.readFileToString(file));
String string = xmlSupport.writeXMLToString(doc);
assertNotNull(string);
String elementString = xmlSupport.writeXMLToString(doc.getDocumentElement());
assertNotNull(elementString);
// Test behavior for null values
// Null input should result in XMLException, no other Exceptions
thrown.expect(XMLException.class);
Document nullDoc = null;
Element nullElement = null;
assertNull(xmlSupport.writeXMLToString(nullDoc));
assertNull(xmlSupport.writeXMLToString(nullElement));
xmlSupport.writeXMLtoFile(null, file);
// test that all streams are properly closed
assertFalse(de.rcenvironment.core.utils.common.FileUtils.isLocked(file));
xmlSupport.writeXMLtoFile(doc, null);
}
/**
* Tests methods for handling Documents.
*
* @throws Exception on error.
*/
@Test
public void testHandleDocuments() throws Exception {
Document newDoc = xmlSupport.createDocument();
assertNotNull(xmlSupport.createElement(newDoc, "element"));
// Test behavior for null values
// Null input should result in XMLException, no other Exceptions
thrown.expect(XMLException.class);
assertNull(xmlSupport.createElement(null, "element"));
assertNull(xmlSupport.createElementTree(null, "xpath"));
assertNull(xmlSupport.createElementTree(newDoc, null));
}
}