fitnesse.fixtures.LoopingActionFixture Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fitnesse Show documentation
Show all versions of fitnesse Show documentation
The fully integrated standalone wiki, and acceptance testing framework.
The newest version!
// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.fixtures;
import java.lang.reflect.Method;
import java.util.Stack;
import fit.ActionFixture;
import fit.Parse;
public class LoopingActionFixture extends ActionFixture {
Stack loopContexts = new Stack<>();
Parse rows;
boolean isSpecialName(String name) {
return name.equals("do") || name.equals("while");
}
Method getAction(String name) throws SecurityException, NoSuchMethodException {
String methodName = isSpecialName(name) ? ("action_" + name) : name;
return getClass().getMethod(methodName, new Class>[]{});
}
@Override
public void doRows(Parse rows) {
this.rows = rows;
while (this.rows != null) {
doRow(this.rows);
this.rows = this.rows.more;
}
}
@Override
public void doCells(Parse cells) {
this.cells = cells;
try {
Method action = getAction(cells.text());
action.invoke(this);
}
catch (Exception e) {
exception(cells, e);
}
}
public void action_do() {
loopContexts.push(rows);
}
public void action_while() throws Exception {
String methodName = cells.more.text();
Method action = getActor().getClass().getMethod(methodName);
Boolean result = (Boolean) action.invoke(getActor());
if (result.booleanValue()) {
rows = loopContexts.peek();
} else {
loopContexts.pop();
}
}
}