Repository: camel Updated Branches: refs/heads/master 39b79b97b -> 3d46f62ea
CAMEL-8936: Create a test module for CDI Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/701651e9 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/701651e9 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/701651e9 Branch: refs/heads/master Commit: 701651e9f3b318ccb4b8a8872c1e8e989fcf3ffd Parents: 39b79b9 Author: Antonin Stefanutti <anto...@stefanutti.fr> Authored: Fri Mar 4 18:30:48 2016 +0100 Committer: Antonin Stefanutti <anto...@stefanutti.fr> Committed: Fri Mar 4 18:30:48 2016 +0100 ---------------------------------------------------------------------- apache-camel/pom.xml | 4 + .../src/main/descriptors/common-bin.xml | 1 + components/camel-test-cdi/pom.xml | 57 ++++++ .../org/apache/camel/test/cdi/AnyLiteral.java | 30 +++ .../apache/camel/test/cdi/CamelCdiContext.java | 45 ++++ .../camel/test/cdi/CamelCdiDeployment.java | 62 ++++++ .../apache/camel/test/cdi/CamelCdiRunner.java | 96 +++++++++ .../test/cdi/FrameworkAnnotatedParameter.java | 90 ++++++++ .../test/cdi/FrameworkMethodCdiInjection.java | 51 +++++ .../test/cdi/FrameworkMethodInjectionPoint.java | 88 ++++++++ .../camel/test/cdi/FrameworkMethodSorter.java | 37 ++++ .../java/org/apache/camel/test/cdi/Order.java | 31 +++ .../src/main/resources/META-INF/LICENSE.txt | 203 +++++++++++++++++++ .../src/main/resources/META-INF/NOTICE.txt | 11 + components/pom.xml | 1 + parent/pom.xml | 5 + 16 files changed, 812 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/apache-camel/pom.xml ---------------------------------------------------------------------- diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml index 0eb7c9d..df7f691 100644 --- a/apache-camel/pom.xml +++ b/apache-camel/pom.xml @@ -840,6 +840,10 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-test-cdi</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-test-spring</artifactId> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/apache-camel/src/main/descriptors/common-bin.xml ---------------------------------------------------------------------- diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml index b00bd97..81779eb 100644 --- a/apache-camel/src/main/descriptors/common-bin.xml +++ b/apache-camel/src/main/descriptors/common-bin.xml @@ -221,6 +221,7 @@ <include>org.apache.camel:camel-tagsoup</include> <include>org.apache.camel:camel-test</include> <include>org.apache.camel:camel-test-blueprint</include> + <include>org.apache.camel:camel-test-cdi</include> <include>org.apache.camel:camel-test-spring</include> <include>org.apache.camel:camel-test-spring3</include> <include>org.apache.camel:camel-test-spring40</include> http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/camel-test-cdi/pom.xml ---------------------------------------------------------------------- diff --git a/components/camel-test-cdi/pom.xml b/components/camel-test-cdi/pom.xml new file mode 100644 index 0000000..315b163 --- /dev/null +++ b/components/camel-test-cdi/pom.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.camel</groupId> + <artifactId>components</artifactId> + <version>2.17-SNAPSHOT</version> + </parent> + + <artifactId>camel-test-cdi</artifactId> + <packaging>bundle</packaging> + <name>Camel :: Test :: CDI</name> + <description>Camel Testing Library using JUnit and CDI</description> + + <properties> + <camel.osgi.export.pkg>org.apache.camel.test.cdi.*</camel.osgi.export.pkg> + </properties> + + <dependencies> + + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-cdi</artifactId> + </dependency> + <dependency> + <groupId>org.jboss.weld.se</groupId> + <artifactId>weld-se-core</artifactId> + <version>${weld2-version}</version> + </dependency> + + <!-- test dependencies --> + + </dependencies> + +</project> http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnyLiteral.java ---------------------------------------------------------------------- diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnyLiteral.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnyLiteral.java new file mode 100755 index 0000000..7413de4 --- /dev/null +++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnyLiteral.java @@ -0,0 +1,30 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.test.cdi; + +import javax.enterprise.inject.Any; +import javax.enterprise.util.AnnotationLiteral; + +final class AnyLiteral extends AnnotationLiteral<Any> implements Any { + + static final Any INSTANCE = new AnyLiteral(); + + private static final long serialVersionUID = 1L; + + private AnyLiteral() { + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiContext.java ---------------------------------------------------------------------- diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiContext.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiContext.java new file mode 100644 index 0000000..5f4eb9d --- /dev/null +++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiContext.java @@ -0,0 +1,45 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.test.cdi; + +import java.util.concurrent.atomic.AtomicReference; +import javax.enterprise.inject.spi.BeanManager; + +final class CamelCdiContext { + + private final AtomicReference<BeanManager> manager = new AtomicReference<>(); + + BeanManager getBeanManager() { + BeanManager manager = this.manager.get(); + if (manager == null) { + throw new IllegalStateException("Bean manager is not set!"); + } + return manager; + } + + void setBeanManager(BeanManager manager) { + if (!this.manager.compareAndSet(null, manager)) { + throw new IllegalStateException("Bean manager already set!"); + } + } + + void unsetBeanManager() { + if (manager.getAndSet(null) == null) { + throw new IllegalStateException("Bean manager is not set!"); + } + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiDeployment.java ---------------------------------------------------------------------- diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiDeployment.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiDeployment.java new file mode 100644 index 0000000..245c7c7 --- /dev/null +++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiDeployment.java @@ -0,0 +1,62 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.test.cdi; + +import org.apache.camel.cdi.CdiCamelExtension; +import org.jboss.weld.config.ConfigurationKey; +import org.jboss.weld.environment.se.Weld; +import org.jboss.weld.environment.se.WeldContainer; +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; +import org.junit.runners.model.TestClass; + +final class CamelCdiDeployment implements TestRule { + + private final CamelCdiContext context; + + private final Weld weld; + + CamelCdiDeployment(TestClass test, CamelCdiContext context) { + this.context = context; + weld = new Weld() + // TODO: check parallel execution + .containerId("camel-context-cdi") + .property(ConfigurationKey.RELAXED_CONSTRUCTION.get(), true) + .enableDiscovery() + .beanClasses(test.getJavaClass().getDeclaredClasses()) + .addBeanClass(test.getJavaClass()) + .addExtension(new CdiCamelExtension()); + } + + @Override + public Statement apply(final Statement base, Description description) { + return new Statement() { + @Override + public void evaluate() throws Throwable { + WeldContainer container = weld.initialize(); + context.setBeanManager(container.getBeanManager()); + try { + base.evaluate(); + } finally { + container.shutdown(); + context.unsetBeanManager(); + } + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiRunner.java ---------------------------------------------------------------------- diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiRunner.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiRunner.java new file mode 100644 index 0000000..43d6287 --- /dev/null +++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiRunner.java @@ -0,0 +1,96 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.test.cdi; + +import java.lang.annotation.Annotation; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import javax.enterprise.inject.spi.Bean; +import javax.enterprise.inject.spi.BeanManager; + +import org.junit.rules.TestRule; +import org.junit.runners.BlockJUnit4ClassRunner; +import org.junit.runners.model.FrameworkMethod; +import org.junit.runners.model.InitializationError; +import org.junit.runners.model.Statement; + +public class CamelCdiRunner extends BlockJUnit4ClassRunner { + + private final CamelCdiContext context = new CamelCdiContext(); + + public CamelCdiRunner(Class<?> clazz) throws InitializationError { + super(clazz); + } + + @Override + protected void validateConstructor(List<Throwable> errors) { + // The test class is instantiated as a CDI bean so we bypass the + // default JUnit test class constructor constraints validation. + } + + @Override + protected void validatePublicVoidNoArgMethods(Class<? extends Annotation> annotation, boolean isStatic, List<Throwable> errors) { + // Overrides the default validation to allow test methods with + // parameters so that we can inject CDI references. + List<FrameworkMethod> methods = getTestClass().getAnnotatedMethods(annotation); + for (FrameworkMethod eachTestMethod : methods) { + eachTestMethod.validatePublicVoid(isStatic, errors); + } + } + + @Override + protected List<FrameworkMethod> getChildren() { + List<FrameworkMethod> children = super.getChildren(); + boolean hasDefinedOrder = false; + for (FrameworkMethod method : children) { + if (method.getAnnotation(Order.class) != null) { + hasDefinedOrder = true; + } + } + if (hasDefinedOrder) { + List<FrameworkMethod> sorted = new ArrayList<>(children); + Collections.sort(sorted, new FrameworkMethodSorter()); + return sorted; + } + return children; + } + + @Override + protected List<TestRule> classRules() { + List<TestRule> rules = super.classRules(); + // Add the CDI container rule before all the other class rules + // so that it's the last one in FIFO + rules.add(0, new CamelCdiDeployment(getTestClass(), context)); + return rules; + } + + @Override + protected Object createTest() { + BeanManager manager = context.getBeanManager(); + Set<Bean<?>> beans = manager.getBeans(getTestClass().getJavaClass(), AnyLiteral.INSTANCE); + Bean<?> bean = beans.iterator().next(); + // TODO: manage lifecycle of @Dependent beans + return manager.getReference(bean, bean.getBeanClass(), manager.createCreationalContext(bean)); + } + + @Override + protected Statement methodInvoker(FrameworkMethod method, Object test) { + return new FrameworkMethodCdiInjection(method, test, context); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkAnnotatedParameter.java ---------------------------------------------------------------------- diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkAnnotatedParameter.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkAnnotatedParameter.java new file mode 100644 index 0000000..59edddc --- /dev/null +++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkAnnotatedParameter.java @@ -0,0 +1,90 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.test.cdi; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.lang.reflect.Type; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import javax.enterprise.inject.spi.AnnotatedCallable; +import javax.enterprise.inject.spi.AnnotatedParameter; +import javax.enterprise.inject.spi.BeanManager; + +final class FrameworkAnnotatedParameter<X> implements AnnotatedParameter<X> { + + private final int position; + + private final Type type; + + private final Set<Annotation> annotations; + + private final BeanManager manager; + + FrameworkAnnotatedParameter(Method method, int position, BeanManager manager) { + this.position = position; + this.type = method.getGenericParameterTypes()[position]; + this.annotations = new HashSet<>(Arrays.asList(method.getParameterAnnotations()[position])); + this.manager = manager; + } + + @Override + public AnnotatedCallable<X> getDeclaringCallable() { + return null; + } + + @Override + public int getPosition() { + return position; + } + + @Override + public <Y extends Annotation> Y getAnnotation(Class<Y> type) { + for (Annotation annotation : getAnnotations()) { + if (annotation.annotationType() == type) { + return type.cast(annotation); + } + } + return null; + } + + @Override + public Set<Annotation> getAnnotations() { + return Collections.unmodifiableSet(annotations); + } + + @Override + public Type getBaseType() { + return type; + } + + @Override + public Set<Type> getTypeClosure() { + if (type instanceof Class) { + return manager.createAnnotatedType((Class) type).getTypeClosure(); + } else { + return Collections.singleton(type); + } + } + + @Override + public boolean isAnnotationPresent(Class<? extends Annotation> type) { + return getAnnotation(type) != null; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodCdiInjection.java ---------------------------------------------------------------------- diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodCdiInjection.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodCdiInjection.java new file mode 100644 index 0000000..34f5361 --- /dev/null +++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodCdiInjection.java @@ -0,0 +1,51 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.test.cdi; + +import java.lang.reflect.Type; +import javax.enterprise.inject.spi.BeanManager; + +import org.junit.runners.model.FrameworkMethod; +import org.junit.runners.model.Statement; + +final class FrameworkMethodCdiInjection extends Statement { + + private final FrameworkMethod method; + + private final Object test; + + private final CamelCdiContext context; + + FrameworkMethodCdiInjection(FrameworkMethod method, Object test, CamelCdiContext context) { + this.method = method; + this.test = test; + this.context = context; + } + + @Override + public void evaluate() throws Throwable { + BeanManager manager = context.getBeanManager(); + Type[] types = method.getMethod().getGenericParameterTypes(); + Object[] parameters = new Object[types.length]; + for (int i = 0; i < types.length; i++) { + // TODO: use a proper CreationalContext... + parameters[i] = manager.getInjectableReference(new FrameworkMethodInjectionPoint(method.getMethod(), i, manager), manager.createCreationalContext(null)); + } + + method.invokeExplosively(test, parameters); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodInjectionPoint.java ---------------------------------------------------------------------- diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodInjectionPoint.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodInjectionPoint.java new file mode 100644 index 0000000..41e1343 --- /dev/null +++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodInjectionPoint.java @@ -0,0 +1,88 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.test.cdi; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Member; +import java.lang.reflect.Method; +import java.lang.reflect.Type; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import javax.enterprise.inject.spi.Annotated; +import javax.enterprise.inject.spi.Bean; +import javax.enterprise.inject.spi.BeanManager; +import javax.enterprise.inject.spi.InjectionPoint; + +final class FrameworkMethodInjectionPoint implements InjectionPoint { + + private final Method method; + + private final FrameworkAnnotatedParameter annotated; + + private final Type type; + + private final Set<Annotation> qualifiers; + + FrameworkMethodInjectionPoint(Method method, int position, BeanManager manager) { + this.method = method; + this.annotated = new FrameworkAnnotatedParameter(method, position, manager); + this.type = method.getGenericParameterTypes()[position]; + this.qualifiers = new HashSet<>(); + for (Annotation annotation : method.getParameterAnnotations()[position]) { + if (manager.isQualifier(annotation.annotationType())) { + qualifiers.add(annotation); + } + } + } + + @Override + public Bean<?> getBean() { + return null; + } + + @Override + public Member getMember() { + return method; + } + + @Override + public Set<Annotation> getQualifiers() { + return Collections.unmodifiableSet(qualifiers); + } + + @Override + public Type getType() { + return type; + } + + @Override + public boolean isDelegate() { + return false; + } + + @Override + public boolean isTransient() { + return false; + } + + @Override + public Annotated getAnnotated() { + return annotated; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodSorter.java ---------------------------------------------------------------------- diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodSorter.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodSorter.java new file mode 100644 index 0000000..0e00433 --- /dev/null +++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodSorter.java @@ -0,0 +1,37 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.test.cdi; + +import java.util.Comparator; + +import org.junit.runners.model.FrameworkMethod; + +final class FrameworkMethodSorter implements Comparator<FrameworkMethod> { + + @Override + public int compare(FrameworkMethod m1, FrameworkMethod m2) { + int i1 = 0; + int i2 = 0; + if (m1.getMethod().isAnnotationPresent(Order.class)) { + i1 = m1.getMethod().getAnnotation(Order.class).value(); + } + if (m2.getMethod().isAnnotationPresent(Order.class)) { + i2 = m2.getMethod().getAnnotation(Order.class).value(); + } + return i1 < i2 ? -1 : (i1 == i2 ? 0 : 1); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/Order.java ---------------------------------------------------------------------- diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/Order.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/Order.java new file mode 100644 index 0000000..58a794c --- /dev/null +++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/Order.java @@ -0,0 +1,31 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.test.cdi; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface Order { + + int value(); +} http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/camel-test-cdi/src/main/resources/META-INF/LICENSE.txt ---------------------------------------------------------------------- diff --git a/components/camel-test-cdi/src/main/resources/META-INF/LICENSE.txt b/components/camel-test-cdi/src/main/resources/META-INF/LICENSE.txt new file mode 100755 index 0000000..6b0b127 --- /dev/null +++ b/components/camel-test-cdi/src/main/resources/META-INF/LICENSE.txt @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/camel-test-cdi/src/main/resources/META-INF/NOTICE.txt ---------------------------------------------------------------------- diff --git a/components/camel-test-cdi/src/main/resources/META-INF/NOTICE.txt b/components/camel-test-cdi/src/main/resources/META-INF/NOTICE.txt new file mode 100644 index 0000000..2e215bf --- /dev/null +++ b/components/camel-test-cdi/src/main/resources/META-INF/NOTICE.txt @@ -0,0 +1,11 @@ + ========================================================================= + == NOTICE file corresponding to the section 4 d of == + == the Apache License, Version 2.0, == + == in this case for the Apache Camel distribution. == + ========================================================================= + + This product includes software developed by + The Apache Software Foundation (http://www.apache.org/). + + Please read the different LICENSE files present in the licenses directory of + this distribution. http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/components/pom.xml ---------------------------------------------------------------------- diff --git a/components/pom.xml b/components/pom.xml index a71de32..f7d6587 100644 --- a/components/pom.xml +++ b/components/pom.xml @@ -35,6 +35,7 @@ <module>camel-test</module> <module>camel-testng</module> <module>camel-test-blueprint</module> + <module>camel-test-cdi</module> <module>camel-test-spring</module> <module>camel-test-spring3</module> <module>camel-test-spring40</module> http://git-wip-us.apache.org/repos/asf/camel/blob/701651e9/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index 3c42c1a..ef66a33 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -1660,6 +1660,11 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-test-cdi</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-test-spring</artifactId> <version>${project.version}</version> </dependency>