CAMEL-9981: camel-test-spring may register listener twice.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/552d78ac Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/552d78ac Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/552d78ac Branch: refs/heads/camel-2.17.x Commit: 552d78acca48dc24f4ce3e2ebb6c1e8de930227e Parents: c4ef257 Author: Claus Ibsen <[email protected]> Authored: Sun May 22 09:25:38 2016 +0200 Committer: Claus Ibsen <[email protected]> Committed: Sun May 22 09:25:38 2016 +0200 ---------------------------------------------------------------------- .../CamelSpringBootJUnit4ClassRunner.java | 30 +++++++++++++++++--- .../spring/CamelSpringJUnit4ClassRunner.java | 21 ++++++++++++-- 2 files changed, 44 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/552d78ac/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringBootJUnit4ClassRunner.java ---------------------------------------------------------------------- diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringBootJUnit4ClassRunner.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringBootJUnit4ClassRunner.java index fa0c0b5..0820d56 100644 --- a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringBootJUnit4ClassRunner.java +++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringBootJUnit4ClassRunner.java @@ -16,8 +16,12 @@ */ package org.apache.camel.test.spring; +import java.util.List; + import org.junit.runners.model.InitializationError; +import org.springframework.core.OrderComparator; import org.springframework.test.context.TestContextManager; +import org.springframework.test.context.TestExecutionListener; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** @@ -56,12 +60,30 @@ public class CamelSpringBootJUnit4ClassRunner extends SpringJUnit4ClassRunner { System.setProperty("skipStartingCamelContext", "true"); // inject Camel first, and then disable jmx and add the stop-watch - registerTestExecutionListeners(new CamelSpringTestContextLoaderTestExecutionListener()); - registerTestExecutionListeners(new DisableJmxTestExecutionListener()); - registerTestExecutionListeners(new CamelSpringBootExecutionListener()); - registerTestExecutionListeners(new StopWatchTestExecutionListener()); + // (ensure to get the current list as we need to re-order that list so Camel comes first) + List<TestExecutionListener> list = getTestExecutionListeners(); + addIfMissingType(list, new CamelSpringTestContextLoaderTestExecutionListener()); + addIfMissingType(list, new DisableJmxTestExecutionListener()); + addIfMissingType(list, new CamelSpringBootExecutionListener()); + addIfMissingType(list, new StopWatchTestExecutionListener()); + OrderComparator.sort(list); + registerTestExecutionListeners(list); } + private void addIfMissingType(List<TestExecutionListener> list, TestExecutionListener listener) { + String type = listener.getClass().getName(); + boolean found = false; + for (TestExecutionListener current : list) { + if (type.equals(current.getClass().getName())) { + found = true; + break; + } + } + + if (!found) { + list.add(listener); + } + } } } http://git-wip-us.apache.org/repos/asf/camel/blob/552d78ac/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunner.java ---------------------------------------------------------------------- diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunner.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunner.java index 64d1721..25bc36b 100644 --- a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunner.java +++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunner.java @@ -57,14 +57,29 @@ public class CamelSpringJUnit4ClassRunner extends SpringJUnit4ClassRunner { super(testClass); // inject Camel first, and then disable jmx and add the stop-watch + // (ensure to get the current list as we need to re-order that list so Camel comes first) List<TestExecutionListener> list = getTestExecutionListeners(); - list.add(new CamelSpringTestContextLoaderTestExecutionListener()); - list.add(new DisableJmxTestExecutionListener()); - list.add(new StopWatchTestExecutionListener()); + addIfMissingType(list, new CamelSpringTestContextLoaderTestExecutionListener()); + addIfMissingType(list, new DisableJmxTestExecutionListener()); + addIfMissingType(list, new StopWatchTestExecutionListener()); OrderComparator.sort(list); registerTestExecutionListeners(list); } + private void addIfMissingType(List<TestExecutionListener> list, TestExecutionListener listener) { + String type = listener.getClass().getName(); + boolean found = false; + for (TestExecutionListener current : list) { + if (type.equals(current.getClass().getName())) { + found = true; + break; + } + } + + if (!found) { + list.add(listener); + } + } } }
