
nl.praegus.fitnesse.slim.tables.ConditionalScriptTable Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of toolchain-fitnesse-plugin Show documentation
Show all versions of toolchain-fitnesse-plugin Show documentation
Auto-register autocomplete responder and add debug script table
package nl.praegus.fitnesse.slim.tables;
import fitnesse.slim.MethodExecutionResult;
import fitnesse.slim.SlimExpressionEvaluator;
import fitnesse.slim.instructions.Instruction;
import fitnesse.testsystems.TestExecutionException;
import fitnesse.testsystems.slim.SlimTestContext;
import fitnesse.testsystems.slim.Table;
import fitnesse.testsystems.slim.results.SlimTestResult;
import fitnesse.testsystems.slim.tables.ScriptTable;
import fitnesse.testsystems.slim.tables.SlimAssertion;
import fitnesse.testsystems.slim.tables.SlimExpectation;
import fitnesse.testsystems.slim.tables.SyntaxError;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ConditionalScriptTable extends ScriptTable {
private boolean conditionResult;
private boolean fromConditionalScenario;
public ConditionalScriptTable(Table table, String tableId, SlimTestContext context) {
super(table, tableId, context);
}
public ConditionalScriptTable(Table table, String tableId, SlimTestContext context, boolean fromConditionalScenario) {
super(table, tableId, context);
this.fromConditionalScenario = fromConditionalScenario;
}
@Override
protected String getTableKeyword() {
return "script if";
}
@Override
// returns a list of statements
protected List instructionsForRow(int row) throws TestExecutionException {
List assertions;
if ((null == getParent() || fromConditionalScenario) && row > 1 && !conditionResult) {
assertions = skip(row);
} else {
assertions = super.instructionsForRow(row);
}
return assertions;
}
@Override
protected List invokeAction(int startingCol, int endingCol, int row, SlimExpectation expectation) throws SyntaxError {
List assertions = new ArrayList<>();
if ((null == getParent() || fromConditionalScenario) && row == 1) {
if (this.table.getColumnCountInRow(row) > 1) {
throw new SyntaxError("Conditional script tables can contain only the condition in the first row.");
}
String expr = this.table.getCellContents(0, row);
try {
SlimExpressionEvaluator evaluator = new SlimExpressionEvaluator();
Map symbols = new HashMap<>();
for(Map.Entry symbol: getTestContext().getSymbols().entrySet()) {
symbols.put(symbol.getKey(), new MethodExecutionResult(symbol.getValue(), String.class));
}
evaluator.setContext(expr, symbols);
conditionResult = Boolean.parseBoolean(evaluator.evaluate(replaceSymbols(expr)).toString());
} catch (IllegalArgumentException e) {
throw new SyntaxError(e.getMessage());
}
} else {
assertions.addAll(super.invokeAction(startingCol, endingCol, row, expectation));
}
return assertions;
}
private List skip(int row) {
List assertions = new ArrayList<>();
SlimAssertion skipAssertion = createSkipAssertion(row);
assertions.add(skipAssertion);
return assertions;
}
private SlimAssertion createSkipAssertion(int row) {
Instruction instruction = Instruction.NOOP_INSTRUCTION;
return makeAssertion(instruction, new SkipExpectation(0, row));
}
protected class SkipExpectation extends RowExpectation {
SkipExpectation(int col, int row) {
super(col, row);
}
@Override
protected SlimTestResult createEvaluationMessage(String actual, String expected) {
return SlimTestResult.testNotRun();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy