package rtt.core.tests.junit.compare; import org.junit.Before; import org.junit.Test; import rtt.core.archive.output.Element; import rtt.core.archive.output.ElementType; import rtt.core.archive.output.GeneratorType; import rtt.core.testing.compare.OutputCompare; import rtt.core.testing.compare.OutputCompare.CompareResult.Difference; import rtt.core.tests.junit.utils.CompareUtils; public class CompareElementTests { private static final String NAME = "SampleElement"; private static final GeneratorType GENERATOR = GeneratorType.OBJECT; private static final ElementType TYPE = ElementType.VALUE; private static final String VALUE = "aValue"; private OutputCompare comparer; @Before public void setUp() throws Exception{ comparer = new OutputCompare(false); } public static Element createSampleElement(ElementType type, boolean informational) { return createElement(NAME, type, GENERATOR, VALUE, informational); } public static Element createElement(String name, ElementType type, GeneratorType generatedBy, String value, boolean informational) { Element element = new Element() {}; element.setName(name); element.setElementType(type); element.setGeneratedBy(generatedBy); element.setValue(value); element.setInformational(informational); return element; } private Element createSampleElement(boolean informational) { return createSampleElement(TYPE, informational); } private void testThrowsException(Element referenceElement, Element actualElement, Class<? extends Throwable> expectedException) { CompareUtils.testThrowsException(comparer, referenceElement, actualElement, expectedException); } private void testNoDifferences(Element referenceElement, Element actualElement) { CompareUtils.testNoDifferences(comparer, referenceElement, actualElement); } private void testDifference(Element referenceElement, Element actualElement, Difference expected) { CompareUtils.testDifference(comparer, referenceElement, actualElement, expected); } @Test public void testExceptions() throws Exception { testThrowsException(null, null, IllegalArgumentException.class); testThrowsException(null, createSampleElement(false), IllegalArgumentException.class); testThrowsException(createSampleElement(false), null, IllegalArgumentException.class); testThrowsException(null, null, IllegalArgumentException.class); testThrowsException(null, createSampleElement(true), IllegalArgumentException.class); testThrowsException(createSampleElement(true), null, IllegalArgumentException.class); } @Test public void testEqualElements() throws Exception { testNoDifferences(createSampleElement(false), createSampleElement(false)); testNoDifferences(createSampleElement(true), createSampleElement(true)); } @Test public void testUnequalNameAttribute() throws Exception { Element changedElement = createElement("otherName", TYPE, GENERATOR, VALUE, false); testDifference(changedElement, createSampleElement(false), Difference.NAME); testDifference(createSampleElement(false), changedElement, Difference.NAME); testNoDifferences(changedElement, changedElement); changedElement.setInformational(true); testDifference(changedElement, createSampleElement(true), Difference.NAME); testDifference(createSampleElement(true), changedElement, Difference.NAME); testNoDifferences(changedElement, changedElement); } @Test public void testUnequalElementTypeAttribute() throws Exception { Element changedElement = createElement(NAME, ElementType.REFERENCE, GENERATOR, VALUE, false); testDifference(changedElement, createSampleElement(false), Difference.ELEMENT_TYPE); testDifference(createSampleElement(false), changedElement, Difference.ELEMENT_TYPE); testNoDifferences(changedElement, changedElement); changedElement.setInformational(true); testDifference(changedElement, createSampleElement(true), Difference.ELEMENT_TYPE); testDifference(createSampleElement(true), changedElement, Difference.ELEMENT_TYPE); testNoDifferences(changedElement, changedElement); } @Test public void testUnequalGeneratorTypeAttribute() throws Exception { Element changedElement = createElement(NAME, TYPE, GeneratorType.METHOD, VALUE, false); testDifference(changedElement, createSampleElement(false), Difference.GENERATOR_TYPE); testDifference(createSampleElement(false), changedElement, Difference.GENERATOR_TYPE); testNoDifferences(changedElement, changedElement); changedElement.setInformational(true); testDifference(changedElement, createSampleElement(true), Difference.GENERATOR_TYPE); testDifference(createSampleElement(true), changedElement, Difference.GENERATOR_TYPE); testNoDifferences(changedElement, changedElement); } @Test public void testUnequalInformationalAttribute() throws Exception { Element changedElement = createSampleElement(true); testDifference(changedElement, createSampleElement(false), Difference.INFORMATIONAL); testDifference(createSampleElement(false), changedElement, Difference.INFORMATIONAL); testNoDifferences(changedElement, changedElement); changedElement.setInformational(false); testDifference(changedElement, createSampleElement(true), Difference.INFORMATIONAL); testDifference(createSampleElement(true), changedElement, Difference.INFORMATIONAL); testNoDifferences(changedElement, changedElement); } @Test public void testNullValueAttribute() throws Exception { Element changedElement = createElement(NAME, TYPE, GENERATOR, null, false); testDifference(changedElement, createSampleElement(false), Difference.VALUE); testDifference(createSampleElement(false), changedElement, Difference.VALUE); testNoDifferences(changedElement, changedElement); changedElement.setInformational(true); testNoDifferences(changedElement, createSampleElement(true)); testNoDifferences(createSampleElement(true), changedElement); testNoDifferences(changedElement, changedElement); } @Test public void testUnequalValueAttribute() throws Exception { Element changedElement = createElement(NAME, TYPE, GENERATOR, "anOtherValue", false); testDifference(changedElement, createSampleElement(false), Difference.VALUE); testDifference(createSampleElement(false), changedElement, Difference.VALUE); testNoDifferences(changedElement, changedElement); changedElement.setInformational(true); testNoDifferences(changedElement, createSampleElement(true)); testNoDifferences(createSampleElement(true), changedElement); testNoDifferences(changedElement, changedElement); } @Test public void testUnequalChildCount() throws Exception { Element node = createElement(NAME, TYPE, GENERATOR, VALUE, false); node.getElements().add(createSampleElement(false)); testDifference(createSampleElement(false), node, Difference.CHILD_COUNT); testDifference(node, createSampleElement(false), Difference.CHILD_COUNT); node.setInformational(true); testNoDifferences(createSampleElement(true), node); testNoDifferences(node, createSampleElement(true)); } }