package com.plectix.simulator.subviews; import static org.junit.Assert.fail; import java.io.File; import java.util.ArrayList; import java.util.Collection; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.xml.sax.InputSource; import com.plectix.simulator.FileNameCollectionGenerator; import com.plectix.simulator.OperationModeCollectionGenerator; import com.plectix.simulator.subviews.util.Entry; import com.plectix.simulator.subviews.util.Set; import com.plectix.simulator.subviews.util.Tag; import com.plectix.simulator.util.io.StringBufferReader; @RunWith(value = Parameterized.class) public class TestSubViewsCompareXML { private static final String prefixSourseModel = InitData.pathForSourseModel; private final InitTestSubViewsCompareXML initTestSubViewsCompareXML = new InitTestSubViewsCompareXML(); private ArrayList<Set> setsSimplex; private ArrayList<Tag> tagsSimplex; private ArrayList<Entry> entresSimplex; private ArrayList<Set> setsJava; private ArrayList<Tag> tagsJava; private ArrayList<Entry> entresJava; private final String currentXMLData; @Parameters public static Collection<Object[]> configs() { return OperationModeCollectionGenerator.generate(FileNameCollectionGenerator .getAllFileNamesWithPathWithModifyName(prefixSourseModel, "~kappa"),false); } public TestSubViewsCompareXML(String prefixFile, String path, Integer opMode) throws Exception { currentXMLData = initTestSubViewsCompareXML.generateXML(path, prefixFile, opMode); } @Before public void prepare() { SAXParserFactory parserFactory = SAXParserFactory.newInstance(); File sessionSimplex = new File(initTestSubViewsCompareXML .getComparePath()); try { SAXParser parserxml = parserFactory.newSAXParser(); SubViewsParserXMLHandler handler = new SubViewsParserXMLHandler(); parserxml.parse(sessionSimplex, handler); setsSimplex = handler.getSets(); tagsSimplex = handler.getTags(); entresSimplex = handler.getEntres(); parserxml.parse(new InputSource(new StringBufferReader(currentXMLData)), handler); setsJava = handler.getSets(); tagsJava = handler.getTags(); entresJava = handler.getEntres(); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } } @Test public void testSubViewsCompareXML() { setAgentTest(); tagDataTest(); entryDataTest(); } public void setAgentTest() { Assert.assertEquals("[Error] Set in XML (JAVA,SIMPLEX) ", setsJava .size(), setsSimplex.size()); StringBuffer errors = new StringBuffer(); for (Set set : setsSimplex) { if (!contains(set, setsJava)) errors.append("[ERROR] No Agent = '" + set.getAgent() + "' > in Java \n"); } if (errors.length() > 0) { fail(errors.toString()); } } public void tagDataTest() { Assert.assertEquals("[Error] Tag in XML (JAVA,SIMPLEX) ", tagsJava .size(), tagsSimplex.size()); StringBuffer errors = new StringBuffer(); for (Tag tag : tagsSimplex) { if (!contains(tag, tagsJava)) errors.append("[ERROR] No Tag Data = '" + tag.getData() + "' > in Java \n"); } if (errors.length() > 0) { fail(errors.toString()); } } public void entryDataTest() { Assert.assertEquals("[Error] Entres in XML (JAVA,SIMPLEX) ", entresJava .size(), entresSimplex.size()); StringBuffer errors = new StringBuffer(); for (Entry entry : entresSimplex) { if (!contains(entry, entresJava)) errors.append("[ERROR] No Entry Data = '" + entry.getData() + "' > in Java \n"); } if (errors.length() > 0) { fail(errors.toString()); } } private boolean contains(Set set, ArrayList<Set> list) { for (Set setList : list) { if (setList.equals(set)) { list.remove(setList); return true; } } return false; } private boolean contains(Tag tag, ArrayList<Tag> list) { for (Tag tagList : list) { if (tagList.equals(tag)) { list.remove(tagList); return true; } } return false; } private boolean contains(Entry entry, ArrayList<Entry> list) { for (Entry entryList : list) { if (entryList.equals(entry)) { list.remove(entryList); return true; } } return false; } }