fit.ColumnFixture Maven / Gradle / Ivy
// Modified or written by Object Mentor, Inc. for inclusion with FitNesse.
// Copyright (c) 2002 Cunningham & Cunningham, Inc.
// Released under the terms of the GNU General Public License version 2 or later.
package fit;
public class ColumnFixture extends Fixture {
protected Binding[] columnBindings;
protected boolean executeCalledForRow = false;
@Override
public void doRows(Parse rows) {
bindColumnHeadersToMethodsAndFields(rows.parts);
super.doRows(rows.more);
}
@Override
public void doRow(Parse row) {
executeCalledForRow = false;
try {
reset();
super.doRow(row);
if (!executeCalledForRow)
execute();
} catch (Exception e) {
exception(row.leaf(), e);
}
}
@Override
public void doCell(Parse cell, int column) {
try {
columnBindings[column].doCell(this, cell);
} catch (Throwable e) { // NOSONAR
exception(cell, e);
}
}
@Override
public void check(Parse cell, TypeAdapter a) {
try {
executeIfNeeded();
} catch (Exception e) {
exception(cell, e);
}
super.check(cell, a);
}
protected void executeIfNeeded() throws Exception {
if (!executeCalledForRow) {
executeCalledForRow = true;
execute();
}
}
public void reset() throws Exception {
}
public void execute() throws Exception {
}
protected void bindColumnHeadersToMethodsAndFields(Parse heads) {
try {
columnBindings = new Binding[heads.size()];
for (int i = 0; heads != null; i++, heads = heads.more) {
columnBindings[i] = createBinding(i, heads);
}
} catch (Throwable throwable) { // NOSONAR
exception(heads, throwable);
}
}
protected Binding createBinding(int column, Parse heads) throws Throwable {
return Binding.create(this, heads.text());
}
}