package com.plectix.simulator.speciesenumeration;
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.speciesenumeration.util.Entry;
import com.plectix.simulator.speciesenumeration.util.Reachables;
import com.plectix.simulator.speciesenumeration.util.Set;
import com.plectix.simulator.util.io.StringBufferReader;
@RunWith(value = Parameterized.class)
public class TestEnumOfSpeciesCompareXML {
private static final String prefixSourseModel = InitData.pathForSourseModel;
private final InitTestEnumOfSpeciesCompareXML initTestEnumOfSpeciesCompareXML = new InitTestEnumOfSpeciesCompareXML();
private ArrayList<Reachables> reachablesSimplex;
private ArrayList<Set> setsSimplex;
private ArrayList<Entry> entriesSimplex;
private ArrayList<Reachables> reachablesJava;
private ArrayList<Set> setsJava;
private ArrayList<Entry> entriesJava;
private int count;
private final String currentXMLData;
@Parameters
public static Collection<Object[]> configs() {
return OperationModeCollectionGenerator.generate(FileNameCollectionGenerator
.getAllFileNamesWithPathWithModifyName(prefixSourseModel,
"~kappa"),false);
}
public TestEnumOfSpeciesCompareXML(String prefixFile, String path, Integer opMode) throws Exception {
currentXMLData = initTestEnumOfSpeciesCompareXML.generateXML(path,
prefixFile, opMode);
}
@Before
public void prepare() {
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
File sessionSimplex = new File(initTestEnumOfSpeciesCompareXML
.getComparePath());
try {
SAXParser parserxml = parserFactory.newSAXParser();
EnumOfSpeciesParserXMLHandler handler = new EnumOfSpeciesParserXMLHandler();
parserxml.parse(sessionSimplex, handler);
reachablesSimplex = handler.getReachables();
setsSimplex = handler.getSets();
entriesSimplex = handler.getEntres();
parserxml.parse(new InputSource(new StringBufferReader(
currentXMLData)), handler);
reachablesJava = handler.getReachables();
setsJava = handler.getSets();
entriesJava = handler.getEntres();
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
}
@Test
public void testEnumOfSpeciesCompareXML() {
reachablesTest();
setTest();
entryTest();
}
public void reachablesTest() {
Assert.assertEquals("[Error] Entres in XML (JAVA,SIMPLEX) ",
reachablesJava.size(), reachablesSimplex.size());
StringBuffer errors = new StringBuffer();
for (Reachables reachables : reachablesSimplex) {
if (!contains(reachables, reachablesJava))
errors.append("[ERROR] No Reachables '<Reachables Name = \""
+ reachables.getName() + "\" Cardinal = \""
+ reachables.getCordinal() + "\"/>' ==> in Java \n");
}
if (errors.length() > 0) {
fail(errors.toString());
}
}
public void setTest() {
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 Set = '<Set Name = \""
+ set.getName() + "\">' ==> in Java \n");
}
if (errors.length() > 0) {
fail(errors.toString());
}
}
public void entryTest() {
Assert.assertEquals("[Error] Entres in XML (JAVA,SIMPLEX) ",
entriesJava.size(), entriesSimplex.size());
StringBuffer errors = new StringBuffer();
for (Entry entry : entriesSimplex) {
if (!contains(entry, entriesJava))
errors.append("[ERROR] No Entry '<Entry Type = \""
+ entry.getType() + "\" Weight = \""
+ entry.getWeight() + "\" Data = \"" + entry.getData()
+ "/>' ==> in Java \n");
// errors.append(entry.getData() + "\n");
}
if (errors.length() > 0) {
System.out.println("Count = " + count);
fail(errors.toString());
}
}
private boolean contains(Reachables set, ArrayList<Reachables> list) {
for (Reachables setList : list) {
if (setList.equals(set)) {
list.remove(setList);
return true;
}
}
return false;
}
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(Entry entry, ArrayList<Entry> list) {
for (Entry entryList : list) {
if (entryList.equals(entry)) {
count++;
list.remove(entryList);
return true;
}
}
return false;
}
}