package de.fuberlin.projectci.test.driver; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import org.junit.Before; import org.junit.Test; import de.fuberlin.commons.util.LogFactory; import de.fuberlin.commons.lexer.ILexer; import de.fuberlin.commons.parser.ISyntaxTree; import de.fuberlin.projectci.grammar.Grammar; import de.fuberlin.projectci.lrparser.Driver; import de.fuberlin.projectci.lrparser.SyntaxTreeNode; import de.fuberlin.projectci.parseTable.ParseTable; /** * Testcases für den Driver * */ public class DriverTest { private static Logger logger = LogFactory.getLogger(DriverTest.class); private List<DriverTestDataProvider> testDataProviders; public static interface DriverTestDataProvider{ public ParseTable getParseTable() ; public Grammar getGrammar(); public ILexer getLexer(); public ISyntaxTree expectedResult(); } @Before public void setUp() throws Exception { testDataProviders= new ArrayList<DriverTest.DriverTestDataProvider>(); //testDataProviders.add(new DriverTestDataProvider1()); testDataProviders.add(new DriverTestDataProvider2()); } @Test public void testDriver() { Driver driver=new Driver(); for (DriverTestDataProvider aTestDataProvider : testDataProviders()) { ISyntaxTree expectedTree=aTestDataProvider.expectedResult(); ISyntaxTree tree=driver.parse(aTestDataProvider.getLexer(), aTestDataProvider.getParseTable()); // Driver.parse reduziert den Parsebaum nicht mehr automatisch zu einem AST ((SyntaxTreeNode)tree).reduceToAbstractSyntaxTree(); logger.info("Abstract Syntax Tree:\n"+tree); if (expectedTree!=null){ // Leider ist es nicht so leicht möglich den erwarteten Parsebaum zu spezifizieren // Einige Testfälle sind daher nur visuell überprüfbar --> assert macht da keinen Sinn. assertEquals(tree, expectedTree); } } } private List<DriverTestDataProvider> testDataProviders(){ return testDataProviders; } }