Skip to content

Commit

Permalink
Simplifies AddPackage repeatable annotation
Browse files Browse the repository at this point in the history
  • Loading branch information
bartoszmajsak committed Jan 24, 2017
1 parent 522b830 commit 600ba8b
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import test.integration.extension.AddDependencies;
import test.integration.extension.AddPackages;
import test.integration.extension.AddPackage;
import test.integration.support.ShellTestTemplate;

import javax.inject.Inject;
Expand All @@ -22,7 +22,7 @@

@RunWith(Arquillian.class)
@AddDependencies("org.assertj:assertj-core")
@AddPackages(ShellTestTemplate.PACKAGE_NAME)
@AddPackage(ShellTestTemplate.PACKAGE_NAME)
public class JUnitTestGenerationIntegrationTest extends ShellTestTemplate {

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import test.integration.extension.AddDependencies;
import test.integration.extension.AddPackages;
import test.integration.extension.AddPackage;
import test.integration.support.ShellTestTemplate;
import test.integration.support.assertions.ProjectAssert;

Expand All @@ -24,8 +24,8 @@

@RunWith(Arquillian.class)
@AddDependencies("org.assertj:assertj-core")
@AddPackages(value = ShellTestTemplate.PACKAGE_NAME, recursive = false)
@AddPackages(containing = ProjectAssert.class)
@AddPackage(value = ShellTestTemplate.PACKAGE_NAME, recursive = false)
@AddPackage(containing = ProjectAssert.class)
public class TestNGTestGenerationIntegrationTest extends ShellTestTemplate {

@Test
Expand Down
28 changes: 28 additions & 0 deletions src/test/java/test/integration/extension/AddPackage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package test.integration.extension;

import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(AddPackages.class)
public @interface AddPackage {

/**
* Fully qualified package name to be automatically added, Can be used interchangeable with {@link #containing()}. Does take precedence.
*/
String value() default "";

/**
* Class defining a root package. Can be used interchangeable with {@link #value()}. Does not take precedence
*/
Class<?> containing() default AddPackage.class;

/**
* Indicates if sub-packages should also be added
*/
boolean recursive() default true;
}
16 changes: 1 addition & 15 deletions src/test/java/test/integration/extension/AddPackages.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,14 @@
package test.integration.extension;

import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(AddPackagesGroup.class)
public @interface AddPackages {

/**
* List of packages to be automatically added, Can be used interchangeable with {@link #containing()}. Does take precedence.
*/
String[] value() default "";
AddPackage[] value();

/**
* Class defining a root package. Can be used interchangeable with {@link #value()}. Does not take precedence
*/
Class<?>[] containing() default AddPackages.class;

/**
* Indicates if sub-packages should also be added
*/
boolean recursive() default true;
}
13 changes: 0 additions & 13 deletions src/test/java/test/integration/extension/AddPackagesGroup.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,30 @@
import org.jboss.shrinkwrap.api.container.ClassContainer;

/**
* Adds packages defined using {@link AddPackages} annotation.
* Adds packages defined using {@link AddPackage} annotation.
*/
public class PackagesArchiveProcessor implements ApplicationArchiveProcessor {

@Override
public void process(Archive<?> applicationArchive, TestClass testClass) {
if (canEnhanceWithPackages(applicationArchive, testClass)) {
final AddPackages[] packages = testClass.getJavaClass().getAnnotationsByType(AddPackages.class);
for (AddPackages pkg : packages) {
final AddPackage[] packages = testClass.getJavaClass().getAnnotationsByType(AddPackage.class);
for (AddPackage pkg : packages) {
((ClassContainer) applicationArchive).addPackages(pkg.recursive(), getPackages(pkg));
}
}

}

private String[] getPackages(AddPackages pkg) {
if (pkg.value().length == 1 && pkg.value()[0].isEmpty()) {
return new String[]{pkg.containing().getPackage().getName()};
private String getPackages(AddPackage pkg) {
if (pkg.value().isEmpty()) {
return pkg.containing().getPackage().getName();
}

return pkg.value();
}

private boolean canEnhanceWithPackages(Archive<?> applicationArchive, TestClass testClass) {
return (applicationArchive instanceof ClassContainer)
&& testClass.getJavaClass().getAnnotationsByType(AddPackages.class).length > 0;
&& testClass.getJavaClass().getAnnotationsByType(AddPackage.class).length > 0;
}
}

0 comments on commit 600ba8b

Please sign in to comment.