diff --git a/archunit-example/example-junit4/src/test/java/com/tngtech/archunit/exampletest/junit4/platform/ServiceRules.java b/archunit-example/example-junit4/src/test/java/com/tngtech/archunit/exampletest/junit4/platform/ServiceRules.java new file mode 100644 index 0000000000..f9592e81ac --- /dev/null +++ b/archunit-example/example-junit4/src/test/java/com/tngtech/archunit/exampletest/junit4/platform/ServiceRules.java @@ -0,0 +1,19 @@ +package com.tngtech.archunit.exampletest.junit4.platform; + +import com.tngtech.archunit.example.layers.MyService; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.lang.ArchRule; + +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; + +/** + * Shared rule, to be referenced in tests of "projectA" and "projectB". + */ +public class ServiceRules { + @ArchTest + public static ArchRule services_should_be_prefixed = + classes() + .that().resideInAPackage("..service..") + .and().areAnnotatedWith(MyService.class) + .should().haveSimpleNameStartingWith("Service"); +} diff --git a/archunit-example/example-junit4/src/test/java/com/tngtech/archunit/exampletest/junit4/projectA/ServiceRulesTest.java b/archunit-example/example-junit4/src/test/java/com/tngtech/archunit/exampletest/junit4/projectA/ServiceRulesTest.java new file mode 100644 index 0000000000..36070d8a98 --- /dev/null +++ b/archunit-example/example-junit4/src/test/java/com/tngtech/archunit/exampletest/junit4/projectA/ServiceRulesTest.java @@ -0,0 +1,21 @@ +package com.tngtech.archunit.exampletest.junit4.projectA; + +import com.tngtech.archunit.exampletest.junit4.Example; +import com.tngtech.archunit.exampletest.junit4.platform.ServiceRules; +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchRules; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.junit.ArchUnitRunner; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; + +/** + * Runs the shared rules for "projectA" only. + */ +@Category(Example.class) +@RunWith(ArchUnitRunner.class) +@AnalyzeClasses(packages = "com.tngtech.archunit.example.projectA") +public class ServiceRulesTest { + @ArchTest + private final ArchRules service_rules = ArchRules.in(ServiceRules.class); +} diff --git a/archunit-example/example-junit4/src/test/java/com/tngtech/archunit/exampletest/junit4/projectB/ServiceRulesTest.java b/archunit-example/example-junit4/src/test/java/com/tngtech/archunit/exampletest/junit4/projectB/ServiceRulesTest.java new file mode 100644 index 0000000000..8208dec401 --- /dev/null +++ b/archunit-example/example-junit4/src/test/java/com/tngtech/archunit/exampletest/junit4/projectB/ServiceRulesTest.java @@ -0,0 +1,21 @@ +package com.tngtech.archunit.exampletest.junit4.projectB; + +import com.tngtech.archunit.exampletest.junit4.Example; +import com.tngtech.archunit.exampletest.junit4.platform.ServiceRules; +import com.tngtech.archunit.junit.AnalyzeClasses; +import com.tngtech.archunit.junit.ArchRules; +import com.tngtech.archunit.junit.ArchTest; +import com.tngtech.archunit.junit.ArchUnitRunner; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; + +/** + * Runs the shared rules for "projectB" only. + */ +@Category(Example.class) +@RunWith(ArchUnitRunner.class) +@AnalyzeClasses(packages = "com.tngtech.archunit.example.projectB") +public class ServiceRulesTest { + @ArchTest + private final ArchRules service_rules = ArchRules.in(ServiceRules.class); +} diff --git a/archunit-example/example-plain/src/main/java/com/tngtech/archunit/example/projectA/service/MyServiceA.java b/archunit-example/example-plain/src/main/java/com/tngtech/archunit/example/projectA/service/MyServiceA.java new file mode 100644 index 0000000000..e38990eac3 --- /dev/null +++ b/archunit-example/example-plain/src/main/java/com/tngtech/archunit/example/projectA/service/MyServiceA.java @@ -0,0 +1,10 @@ +package com.tngtech.archunit.example.projectA.service; + +import com.tngtech.archunit.example.layers.MyService; + +/** + * For Demo purposes only. + */ +@MyService +public class MyServiceA { +} diff --git a/archunit-example/example-plain/src/main/java/com/tngtech/archunit/example/projectB/service/MyServiceB.java b/archunit-example/example-plain/src/main/java/com/tngtech/archunit/example/projectB/service/MyServiceB.java new file mode 100644 index 0000000000..c00e8354cf --- /dev/null +++ b/archunit-example/example-plain/src/main/java/com/tngtech/archunit/example/projectB/service/MyServiceB.java @@ -0,0 +1,10 @@ +package com.tngtech.archunit.example.projectB.service; + +import com.tngtech.archunit.example.layers.MyService; + +/** + * For Demo purposes only. + */ +@MyService +public class MyServiceB { +}