package com.plectix.simulator.parser; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Map; import org.apache.commons.cli.ParseException; import org.junit.Before; import org.junit.Test; import com.plectix.simulator.Initializator; import com.plectix.simulator.parser.abstractmodel.reader.KappaParagraphReader; import com.plectix.simulator.parser.abstractmodel.reader.RulesParagraphReader; import com.plectix.simulator.parser.util.AgentFactory; import com.plectix.simulator.util.DefaultPropertiesForTest; import com.plectix.simulator.util.Failer; import com.plectix.simulator.util.MessageConstructor; public class ExceptionsTest extends DefaultPropertiesForTest { private final String separator = File.separator; private final String prefix = "test.data" + separator + "new_parser" + separator; private final String mySourceFilePath = prefix + "ExceptionsTestFile" + DEFAULT_EXTENSION_FILE; private final String myExceptionsDataFilePath = prefix + "ExceptionsTestData" + DEFAULT_EXTENSION_FILE; private final AgentFactory myAgentFactory = new AgentFactory(false); private final Map<Integer, String> myExceptionsData = new LinkedHashMap<Integer, String>(); private enum ReaderUsageModifier { RULES("#RULES"), SOLUTION("#SOLUTION"), STORIES("#STORIES"), OBSERVABLES( "#OBSERVABLES"), PERTURBATIONS("#PERTURBATIONS"); private final String myLine; private ReaderUsageModifier(String line) { myLine = line; } public static ReaderUsageModifier getModifier(String line) { for (ReaderUsageModifier modifier : ReaderUsageModifier.values()) { if (modifier.myLine.equals(line)) { return modifier; } } return null; } } private KappaParagraphReader<?> checkReader(String line) throws ParseException { ReaderUsageModifier modifier = ReaderUsageModifier.getModifier(line); if (modifier == null) { return null; } switch (modifier) { case RULES: return new RulesParagraphReader(Initializator .prepareDefaultArguments(mySourceFilePath, null), myAgentFactory); } return null; } @Before public void setup() { try { BufferedReader reader = new BufferedReader(new FileReader( myExceptionsDataFilePath)); String line = reader.readLine(); for (int i = 1; line != null; i++) { myExceptionsData.put(i, line); line = reader.readLine(); } } catch (IOException e) { e.printStackTrace(); junit.framework.Assert.fail(e.getMessage()); } } @Test public void test() { Failer failer = new Failer(); MessageConstructor mc = new MessageConstructor(); try { BufferedReader reader = new BufferedReader(new FileReader( mySourceFilePath)); String line = reader.readLine(); KappaFileParagraph oneLineParagraph; KappaParagraphReader<?> kappaReader = null; for (int i = 0; line != null; line = reader.readLine()) { KappaParagraphReader<?> checkReader = checkReader(line); if (checkReader != null) { kappaReader = checkReader; continue; } else { i++; } oneLineParagraph = new KappaFileParagraph(); oneLineParagraph.addLine(new KappaFileLine(i, line)); try { kappaReader.readComponent(oneLineParagraph); mc.addValue("line " + (i + 1)); mc.addComment("No exceptions was catched"); } catch (SimulationDataFormatException e) { failer.assertEquals("", myExceptionsData.get(i), e .getErrorType() + ""); } } failer.failOnMC(mc); } catch (IOException e) { failer.fail(e.getMessage()); } catch (ParseException e) { failer.fail(e.getMessage()); } } }