package dbfit.util;
import fit.Binding;
import fit.Fixture;
import fit.Parse;
import static dbfit.util.CellHelper.appendObjectValue;
public class SymbolAccessQueryBinding extends Binding.QueryBinding {
public void doCell(Fixture fixture, Parse cell) {
ContentOfTableCell content = new ContentOfTableCell(cell.text());
try {
if (content.isSymbolSetter()) {
Object actual = this.adapter.get();
dbfit.util.SymbolUtil.setSymbol(content.text(), actual);
appendObjectValue(cell, actual, !content.isSymbolHidden());
// fixture.ignore(cell);
} else if (content.isSymbolGetter()) {
Object actual = this.adapter.get();
Object expected = this.adapter.parse(content.text());
appendObjectValue(cell, expected, !content.isSymbolHidden());
if (adapter.equals(actual, expected)) {
fixture.right(cell);
} else {
fixture.wrong(cell, String.valueOf(actual));
}
} else if (content.isExpectingInequality()) {
//expect failing comparison
Object actual = this.adapter.get();
String expectedVal = content.getExpectedFailureValue();
appendObjectValue(cell, actual);
if (adapter.equals(actual, adapter.parse(expectedVal))) {
fixture.wrong(cell);
} else {
fixture.right(cell);
}
} else {
super.doCell(fixture, cell);
}
} catch (Throwable t) {
fixture.exception(cell, t);
}
}
static class ContentOfTableCell {
private String content;
ContentOfTableCell(String content) {
this.content = content;
}
public boolean isSymbolSetter() {
return SymbolUtil.isSymbolSetter(content);
}
public String text() {
return content;
}
public boolean isSymbolGetter() {
return SymbolUtil.isSymbolGetter(content);
}
public boolean isSymbolHidden() {
return SymbolUtil.isSymbolHidden(content);
}
private boolean isExpectingInequality() {
return content.startsWith("fail[") || content.endsWith("]");
}
public String getExpectedFailureValue() {
return content.substring(5, content.length() - 1);
}
}
}