/*
* Copyright (c) 2000-2007 MetaMatrix, Inc.
* All rights reserved.
*/
package org.teiid.test.framework;
import org.teiid.core.util.StringUtil;
import org.teiid.test.framework.exception.TransactionRuntimeException;
@SuppressWarnings("nls")
public abstract class TransactionContainer {
private String testClassName = null;
protected TransactionContainer() {
}
protected void before(TransactionQueryTestCase test) {
}
protected void after(TransactionQueryTestCase test) {
}
public void runTransaction(TransactionQueryTestCase test) {
this.testClassName = StringUtil.getLastToken(test.getClass().getName(),
".");
try {
debug("Start transaction test: " + test.getTestName());
try {
test.setup();
} catch (TransactionRuntimeException tre) {
if (!test.exceptionExpected()) {
tre.printStackTrace();
}
throw tre;
} catch (Throwable e) {
if (!test.exceptionExpected()) {
e.printStackTrace();
}
throw new TransactionRuntimeException(e.getMessage());
}
runTest(test);
debug("Completed transaction test: " + test.getTestName());
} finally {
debug(" test.cleanup");
test.cleanup();
}
}
protected void runTest(TransactionQueryTestCase test) {
debug("Start runTest: " + test.getTestName());
debug(" before(test)");
before(test);
debug(" test.before");
test.before();
debug(" test.testcase");
try {
// run the test
test.testCase();
} catch (Throwable e) {
// this catches the non-SQLExceptions that the AbstractQueryTest catches.
// And therefore, the exception needs to be set as an application exception,
// considered outside the bounds of the normal sqlexceptions.
test.setApplicationException(e);
}
debug(" test.after");
test.after();
debug(" after(test)");
after(test);
debug("End runTest: " + test.getTestName());
}
protected void debug(String message) {
TestLogger.logDebug("[" + this.testClassName + "] " + message);
}
protected void detail(String message) {
TestLogger.log("[" + this.testClassName + "] " + message);
}
protected boolean done() {
return true;
}
}