Skip to content
Snippets Groups Projects
Commit 344ac678 authored by Nelson Tavares de Sousa's avatar Nelson Tavares de Sousa
Browse files

refactored visitor and adopted changes to all classes; made the

exception test more restrictive
parent 136d6c7b
No related branches found
No related tags found
No related merge requests found
...@@ -17,7 +17,6 @@ package teetime.framework; ...@@ -17,7 +17,6 @@ package teetime.framework;
import java.lang.Thread.UncaughtExceptionHandler; import java.lang.Thread.UncaughtExceptionHandler;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
...@@ -162,8 +161,6 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught ...@@ -162,8 +161,6 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught
private Thread createThread(final AbstractExceptionListener newListener, final Set<Stage> intraStages, final Stage stage, final AbstractRunnableStage runnable) { private Thread createThread(final AbstractExceptionListener newListener, final Set<Stage> intraStages, final Stage stage, final AbstractRunnableStage runnable) {
final Thread thread = new Thread(runnable); final Thread thread = new Thread(runnable);
stage.setExceptionHandler(newListener);
stage.setOwningThread(thread);
for (Stage intraStage : intraStages) { for (Stage intraStage : intraStages) {
intraStage.setOwningThread(thread); intraStage.setOwningThread(thread);
intraStage.setExceptionHandler(newListener); intraStage.setExceptionHandler(newListener);
...@@ -324,10 +321,7 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught ...@@ -324,10 +321,7 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught
private Set<Stage> traverseIntraStages(final Stage stage) { private Set<Stage> traverseIntraStages(final Stage stage) {
final Traversor traversor = new Traversor(new IntraStageVisitor()); final Traversor traversor = new Traversor(new IntraStageVisitor());
if (stage.getOutputPorts().length == 0) { traversor.traverse(stage);
return new HashSet<Stage>();
}
traversor.traverse(stage, stage.getOutputPorts()[0].getPipe());
return traversor.getVisitedStage(); return traversor.getVisitedStage();
} }
} }
...@@ -23,6 +23,6 @@ public interface IStageVisitor { ...@@ -23,6 +23,6 @@ public interface IStageVisitor {
CONTINUE, STOP CONTINUE, STOP
} }
VisitorBehavior visit(Stage stage, IPipe inputPipe); VisitorBehavior visit(IPipe inputPipe);
} }
...@@ -22,7 +22,7 @@ public class IntraStageVisitor implements IStageVisitor { ...@@ -22,7 +22,7 @@ public class IntraStageVisitor implements IStageVisitor {
public IntraStageVisitor() {} public IntraStageVisitor() {}
@Override @Override
public VisitorBehavior visit(final Stage stage, final IPipe inputPipe) { public VisitorBehavior visit(final IPipe inputPipe) {
if (inputPipe instanceof AbstractIntraThreadPipe) { if (inputPipe instanceof AbstractIntraThreadPipe) {
return VisitorBehavior.CONTINUE; return VisitorBehavior.CONTINUE;
} }
......
...@@ -30,12 +30,7 @@ public class Traversor { ...@@ -30,12 +30,7 @@ public class Traversor {
this.stageVisitor = stageVisitor; this.stageVisitor = stageVisitor;
} }
public void traverse(final Stage stage, final IPipe inputPipe) { public void traverse(final Stage stage) {
VisitorBehavior visitorBehavior = stageVisitor.visit(stage, inputPipe);
if (visitorBehavior == VisitorBehavior.STOP) {
return;
}
if (!visitedStage.add(stage)) { if (!visitedStage.add(stage)) {
return; return;
...@@ -44,9 +39,9 @@ public class Traversor { ...@@ -44,9 +39,9 @@ public class Traversor {
OutputPort<?>[] outputPorts = stage.getOutputPorts(); OutputPort<?>[] outputPorts = stage.getOutputPorts();
for (OutputPort<?> outputPort : outputPorts) { for (OutputPort<?> outputPort : outputPorts) {
IPipe pipe = outputPort.getPipe(); IPipe pipe = outputPort.getPipe();
if (null != pipe) { if (null != pipe && stageVisitor.visit(pipe) == VisitorBehavior.CONTINUE) {
Stage owningStage = pipe.getTargetPort().getOwningStage(); Stage owningStage = pipe.getTargetPort().getOwningStage();
traverse(owningStage, pipe); // recursive call traverse(owningStage); // recursive call
} }
} }
} }
......
...@@ -28,7 +28,7 @@ public class TraversorTest { ...@@ -28,7 +28,7 @@ public class TraversorTest {
@Test @Test
public void traverse() { public void traverse() {
TestConfiguration tc = new TestConfiguration(); TestConfiguration tc = new TestConfiguration();
traversor.traverse(tc.init, tc.init.getOutputPort().getPipe()); traversor.traverse(tc.init);
Set<Stage> comparingSet = new HashSet<Stage>(); Set<Stage> comparingSet = new HashSet<Stage>();
comparingSet.add(tc.init); comparingSet.add(tc.init);
comparingSet.add(tc.f2b); comparingSet.add(tc.f2b);
......
...@@ -18,6 +18,7 @@ package teetime.framework.exceptionHandling; ...@@ -18,6 +18,7 @@ package teetime.framework.exceptionHandling;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import org.junit.Test; import org.junit.Test;
...@@ -52,12 +53,14 @@ public class ExceptionHandlingTest { ...@@ -52,12 +53,14 @@ public class ExceptionHandlingTest {
@Test @Test
public void forAFewTimes() { public void forAFewTimes() {
for (int i = 0; i < 100; i++) { for (int i = 0; i < 100; i++) {
boolean exceptionArised = false;
try { try {
exceptionPassingAndTermination(); exceptionPassingAndTermination();
terminatesAllStages(); terminatesAllStages();
} catch (AnalysisException e) { } catch (AnalysisException e) {
// Correct behavior exceptionArised = true;
} }
assertTrue(exceptionArised);
} }
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment