package com.plectix.simulator.xmlmap; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import java.util.Collection; import java.util.Set; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; 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.util.io.StringBufferReader; import com.plectix.simulator.xmlmap.rulecompression.Association; import com.plectix.simulator.xmlmap.rulecompression.InitTestRuleCompression; import com.plectix.simulator.xmlmap.rulecompression.RuleTag; import com.plectix.simulator.xmlmap.rulecompression.SAXHandler; @RunWith(value = Parameterized.class) public class TestRuleCompressionMap { private static final String separator = File.separator; private static final String prefixSourseModel = "test.data" + separator + "ruleCompressions" + separator + "model" + separator + "quantitative" + separator; private static String currentXMLData; private final InitTestRuleCompression init = new InitTestRuleCompression(); private SAXParserFactory parserFactory; private SAXParser parserxml; private File sessionSimplex; private SAXHandler handler; private Set<Association> complxQuantitativeAss; private Set<Association> complxQualitativeAss; private Set<Association> jsimQuantitativeAss; private Set<Association> jsimQualitativeAss; private Set<RuleTag> jsimQuantitativeRules; private Set<RuleTag> jsimQualitativeRules; private Set<RuleTag> complxQuantitativeRules; private Set<RuleTag> complxQualitativeRules; @Parameters public static Collection<Object[]> configs() { return OperationModeCollectionGenerator.generate(FileNameCollectionGenerator.getAllFileNamesWithPathWithModifyName( prefixSourseModel, "~kappa"),false); } public TestRuleCompressionMap(String count, String patch, Integer opMode) throws Exception { currentXMLData = init.generateXML(patch, count, opMode); } @Before public void prepare() { parserFactory = SAXParserFactory.newInstance(); try { sessionSimplex = new File(init.getComparePath()); parserxml = parserFactory.newSAXParser(); handler = new com.plectix.simulator.xmlmap.rulecompression.SAXHandler(); parserxml.parse(sessionSimplex, handler); complxQuantitativeAss = handler.getQuantitativeAssociations(); complxQualitativeAss = handler.getQualitativeAssociations(); complxQuantitativeRules = handler.getQuantitativeRules(); complxQualitativeRules = handler.getQualitativeRules(); parserxml.parse(new InputSource(new StringBufferReader(currentXMLData)), handler); jsimQuantitativeAss = handler.getQuantitativeAssociations(); jsimQualitativeAss = handler.getQualitativeAssociations(); jsimQuantitativeRules = handler.getQuantitativeRules(); jsimQualitativeRules = handler.getQualitativeRules(); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } } @Test public void testAssociation(){ String message = "Fail in:" + sessionSimplex.getName(); assertTrue(message + " jsimQuantitativeSize=" + jsimQuantitativeAss.size() + " complxQuantitativeSize=" + complxQuantitativeAss.size() + " jsimQualitativeSize=" + jsimQualitativeAss.size() + " complxQualitativeSize=" + complxQualitativeAss.size(), ( jsimQuantitativeAss.size()==complxQuantitativeAss.size() && jsimQualitativeAss.size()==complxQualitativeAss.size() ) ); boolean isFail = false; StringBuffer sb = new StringBuffer(message); checkSets(sb, isFail, jsimQuantitativeAss, complxQuantitativeAss); checkSets(sb, isFail, jsimQualitativeAss, complxQualitativeAss); if(isFail){ System.err.println(sb.toString()); fail(message); } } private <T> void checkSets(StringBuffer sb, boolean isFail, Set<T> jsim, Set<T> complx){ sb.append("\n"); for(T as : jsim){ if(!complx.contains(as)){ sb.append("JSim:"); sb.append(as); if(as instanceof RuleTag){ sb.append("\n"); sb.append("OSim:"); sb.append(getComplxRuleById(((RuleTag) as).getId())); sb.append("\n---------------------------"); } else sb.append("\n"); // System.err.println("JSim:" + as); isFail = true; } // assertTrue(complxAss.contains(as)); } } @Test public void testRules(){ String message = "Fail in:" + sessionSimplex.getName(); assertTrue(message + " jsimQuantitativeSize=" + jsimQuantitativeRules.size() + " complxQuantitativeSize=" + complxQuantitativeRules.size() + " jsimQualitativeSize=" + jsimQualitativeRules.size() + " complxQualitativeSize=" + complxQualitativeRules.size(), ( jsimQuantitativeRules.size()==complxQuantitativeRules.size() && jsimQualitativeRules.size()==complxQualitativeRules.size() ) ); boolean isFail = false; StringBuffer sb = new StringBuffer(message); checkSets(sb, isFail, jsimQuantitativeRules,complxQuantitativeRules); checkSets(sb, isFail, jsimQualitativeRules,complxQualitativeRules); if(isFail){ System.err.println(sb.toString()); fail(message); } } private RuleTag getComplxRuleById(int id){ for(RuleTag rt : complxQuantitativeRules){ if(rt.getId() == id) return rt; } return null; } }