Additional fix related to BATCH-40, ExitStatus was not being propagated from the RepeatCallback correctly.

This commit is contained in:
lucasward
2007-09-19 03:13:56 +00:00
parent 4a3fc5e9e6
commit 6b72d3933a
4 changed files with 25 additions and 2 deletions

View File

@@ -109,7 +109,7 @@ public class ExitStatus implements Serializable {
* logical and of the current value and the argument provided.
*/
public ExitStatus and(boolean continuable) {
return new ExitStatus(this.continuable && continuable);
return new ExitStatus(this.continuable && continuable, this.exitCode, this.exitDescription);
}
/*

View File

@@ -203,7 +203,10 @@ public class RepeatTemplate implements RepeatOperations {
executeAfterInterceptors(context, value);
// An exception alone is not sufficient grounds for not
// continuing
result = result.and(canContinue(value));
if(value instanceof ExitStatus){
result = (ExitStatus)value;
}
// N.B. the order may be important here:
if (isComplete(context, value) || isMarkedComplete(context)) {

View File

@@ -66,6 +66,11 @@ public class ExitStatusTests extends TestCase {
public void testAndExitStatus() {
assertTrue(ExitStatus.CONTINUABLE.and(ExitStatus.CONTINUABLE.isContinuable()).isContinuable());
assertFalse(ExitStatus.CONTINUABLE.and(ExitStatus.FINISHED.isContinuable()).isContinuable());
assertTrue(ExitStatus.FINISHED.and(ExitStatus.CONTINUABLE.isContinuable()).getExitCode()
== ExitStatus.FINISHED.getExitCode());
ExitStatus status = new ExitStatus(false, "CUSTOM_CODE", "CUSTOM_DESCRIPTION");
assertTrue(status.and(true).getExitCode() == "CUSTOM_CODE");
assertTrue(status.and(true).getExitDescription() == "CUSTOM_DESCRIPTION");
}
public void testAddExitCode() throws Exception {

View File

@@ -387,5 +387,20 @@ public class SimpleRepeatTemplateTests extends AbstractTradeBatchTests {
assertFalse(result.isContinuable());
}
public void testCustomExitCode(){
ExitStatus status = template.iterate(new RepeatCallback(){
public ExitStatus doInIteration(RepeatContext context)
throws Exception {
ExitStatus exitStatus = new ExitStatus(false, "CUSTOM_CODE");
return exitStatus;
}
});
assertEquals("CUSTOM_CODE", status.getExitCode());
}
}