/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.xml.impl;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import de.rcenvironment.core.component.api.ComponentException;
import de.rcenvironment.core.component.testutils.ComponentContextMock;
import de.rcenvironment.core.component.xml.XMLComponentConstants;
import de.rcenvironment.core.datamodel.api.TypedDatum;
import de.rcenvironment.core.datamodel.api.TypedDatumFactory;
import de.rcenvironment.core.datamodel.api.TypedDatumService;
import de.rcenvironment.core.utils.common.xml.XMLException;
import de.rcenvironment.core.utils.common.xml.api.XMLSupportService;
/**
* Test for the EndpointXMLUtilsImpl.
*
* This unit test only tests for the correct exception handling for wrong parameters. The behavior for correct inputs is already tested in
* the {@link XMLMergerComponentTest}.
*
* TODO review the test cases if reasonable. do they actually create a reasonable safety net for {@link EndpointXMLServiceImpl}?
*
* @author Brigitte Boden
*/
public class EndpointXMLServiceImplTest {
private static final String NULL_POINTER_EXCEPTION_EXPECTED = "NullPointerException expected";
/**
* Junit Exception rule.
*/
@Rule
public ExpectedException exception = ExpectedException.none();
private EndpointXMLServiceImpl endpointXMLService;
private XMLSupportService support;
private EndpointXMLServiceImplTestComponentContextMock context;
private TypedDatumFactory typedDatumFactory;
private File originCPACS;
/**
* Context mock for XMLMerger Component test.
*
* @author Brigitte Boden
*/
private final class EndpointXMLServiceImplTestComponentContextMock extends ComponentContextMock {
private static final long serialVersionUID = 5310024048572964077L;
private static final String OUTPUT_1 = "out_1";
@Override
public Set<String> getOutputs() {
Set<String> outputs = new HashSet<>();
outputs.add(OUTPUT_1);
return outputs;
}
@Override
public boolean isDynamicOutput(String outputName) {
return outputName.equals(OUTPUT_1);
}
}
/**
* Setup for the test.
*
* @throws Exception on error.
*/
@Before
public void setup() throws Exception {
endpointXMLService = new EndpointXMLServiceImpl();
support = EasyMock.createMock(XMLSupportService.class);
EasyMock.expect(support.readXMLFromFile(EasyMock.anyObject(File.class))).andThrow(
new XMLException("This mock only throws exceptions"));
EasyMock.replay(support);
endpointXMLService.bindXMLSupportService(support);
context = new EndpointXMLServiceImplTestComponentContextMock();
typedDatumFactory = context.getService(TypedDatumService.class).getFactory();
originCPACS = new File("src/test/resources/CPACS.xml");
}
/**
* Test for testUpdateXMLWithInputs.
*
* @throws Exception on error.
*/
@Test
public void testUpdateXMLWithInputs() throws Exception {
Map<String, TypedDatum> inputs = new HashMap<String, TypedDatum>();
inputs.put("input", typedDatumFactory.createFloat(0.0));
context.setConfigurationValue(XMLComponentConstants.CONFIG_KEY_XPATH, "xpath");
try {
endpointXMLService.updateXMLWithInputs(null, inputs, context);
fail(NULL_POINTER_EXCEPTION_EXPECTED);
} catch (NullPointerException e) {
assertTrue(true);
}
// removed as the NPE will occur later on, always after the XMLSupportService mock is used that always throws an exception
// try {
// endpointXMLService.updateXMLWithInputs(originCPACS, inputs, null);
// fail(NULL_POINTER_EXCEPTION_EXPECTED);
// } catch (NullPointerException e) {
// assertTrue(true);
// }
try {
endpointXMLService.updateXMLWithInputs(originCPACS, inputs, context);
fail("ComponentException expected");
} catch (ComponentException e) {
assertTrue(true);
}
}
/**
* Test for testUpdateOutputsFromXML.
*
* @throws Exception on error.
*/
@Test
public void testUpdateOutputsFromXML() throws Exception {
try {
endpointXMLService.updateOutputsFromXML(null, context);
fail(NULL_POINTER_EXCEPTION_EXPECTED);
} catch (NullPointerException e) {
assertTrue(true);
}
try {
endpointXMLService.updateOutputsFromXML(originCPACS, null);
fail(NULL_POINTER_EXCEPTION_EXPECTED);
} catch (NullPointerException e) {
assertTrue(true);
}
try {
endpointXMLService.updateOutputsFromXML(originCPACS, context);
fail("ComponentException expected");
} catch (ComponentException e) {
assertTrue(true);
}
}
}