diff --git a/pom.xml b/pom.xml index 290b060218..0fe48e8fdd 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-relational-parent - 3.0.0-SNAPSHOT + 3.0.0-1058-archunit-SNAPSHOT pom Spring Data Relational Parent diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml index db3b7ddd1a..c7518bc76b 100644 --- a/spring-data-jdbc-distribution/pom.xml +++ b/spring-data-jdbc-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-relational-parent - 3.0.0-SNAPSHOT + 3.0.0-1058-archunit-SNAPSHOT ../pom.xml diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml index 55d2b7952b..a494f56dc2 100644 --- a/spring-data-jdbc/pom.xml +++ b/spring-data-jdbc/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-jdbc - 3.0.0-SNAPSHOT + 3.0.0-1058-archunit-SNAPSHOT Spring Data JDBC Spring Data module for JDBC repositories. @@ -15,7 +15,7 @@ org.springframework.data spring-data-relational-parent - 3.0.0-SNAPSHOT + 3.0.0-1058-archunit-SNAPSHOT @@ -207,14 +207,6 @@ test - - - de.schauderhaft.degraph - degraph-check - ${degraph-check.version} - test - - org.testcontainers mysql @@ -264,6 +256,13 @@ test + + com.tngtech.archunit + archunit + 0.22.0 + test + + diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DefaultJdbcTypeFactory.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DefaultJdbcTypeFactory.java index c70287d1ba..f29d9947a5 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DefaultJdbcTypeFactory.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DefaultJdbcTypeFactory.java @@ -18,7 +18,6 @@ import java.sql.Array; import java.sql.JDBCType; -import org.springframework.data.jdbc.core.dialect.JdbcArrayColumns; import org.springframework.data.jdbc.support.JdbcUtil; import org.springframework.jdbc.core.ConnectionCallback; import org.springframework.jdbc.core.JdbcOperations; diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcArrayColumns.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcArrayColumns.java similarity index 98% rename from spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcArrayColumns.java rename to spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcArrayColumns.java index 63919dcd2d..fe03c15914 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcArrayColumns.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcArrayColumns.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.jdbc.core.dialect; +package org.springframework.data.jdbc.core.convert; import java.sql.SQLType; diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcDialect.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcDialect.java index 0dc94d9aaf..2d40db0289 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcDialect.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcDialect.java @@ -15,6 +15,7 @@ */ package org.springframework.data.jdbc.core.dialect; +import org.springframework.data.jdbc.core.convert.JdbcArrayColumns; import org.springframework.data.relational.core.dialect.Dialect; /** diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialect.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialect.java index 6c7bc82945..c5e97cf9ef 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialect.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/dialect/JdbcPostgresDialect.java @@ -18,6 +18,7 @@ import java.sql.JDBCType; import java.sql.SQLType; +import org.springframework.data.jdbc.core.convert.JdbcArrayColumns; import org.springframework.data.relational.core.dialect.PostgresDialect; /** diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java index 13ca2e865f..3c2fda3588 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java @@ -42,7 +42,7 @@ import org.springframework.data.jdbc.core.convert.JdbcCustomConversions; import org.springframework.data.jdbc.core.convert.RelationResolver; import org.springframework.data.jdbc.core.convert.SqlGeneratorSource; -import org.springframework.data.jdbc.core.dialect.JdbcArrayColumns; +import org.springframework.data.jdbc.core.convert.JdbcArrayColumns; import org.springframework.data.jdbc.core.dialect.JdbcDialect; import org.springframework.data.jdbc.core.mapping.JdbcMappingContext; import org.springframework.data.jdbc.core.mapping.JdbcSimpleTypes; diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java index 0ceb8662c2..4e75b6d7f7 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java @@ -24,7 +24,7 @@ import org.springframework.data.auditing.IsNewAwareAuditingHandler; import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport; import org.springframework.data.auditing.config.AuditingConfiguration; -import org.springframework.data.relational.core.mapping.event.RelationalAuditingCallback; +import org.springframework.data.relational.auditing.RelationalAuditingCallback; import org.springframework.data.repository.config.PersistentEntitiesFactoryBean; import org.springframework.util.Assert; diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/DependencyTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/DependencyTests.java new file mode 100644 index 0000000000..48f60f7f45 --- /dev/null +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/DependencyTests.java @@ -0,0 +1,169 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * 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 + * + * https://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.springframework.data.jdbc; + +import org.assertj.core.api.SoftAssertions; +import org.junit.jupiter.api.Test; +import org.springframework.data.auditing.config.AuditingHandlerBeanDefinitionParser; + +import com.tngtech.archunit.base.DescribedPredicate; +import com.tngtech.archunit.core.domain.JavaClass; +import com.tngtech.archunit.core.domain.JavaClasses; +import com.tngtech.archunit.core.importer.ClassFileImporter; +import com.tngtech.archunit.core.importer.ImportOption; +import com.tngtech.archunit.lang.ArchRule; +import com.tngtech.archunit.library.dependencies.SliceAssignment; +import com.tngtech.archunit.library.dependencies.SliceIdentifier; +import com.tngtech.archunit.library.dependencies.SlicesRuleDefinition; + +/** + * Test package dependencies for violations. + * + * @author Jens Schauder + */ +public class DependencyTests { + + @Test + void cycleFree() { + + JavaClasses importedClasses = new ClassFileImporter() // + .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS) // + .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS) // we just analyze the code of this module. + .importPackages("org.springframework.data.jdbc"); + + final JavaClasses relevantClasses = importedClasses.that( // + onlySpringData() // + ); + + ArchRule rule = SlicesRuleDefinition.slices() // + .matching("org.springframework.data.jdbc.(**)") // + .should() // + .beFreeOfCycles(); + + rule.check(relevantClasses); + } + + @Test + void acrossModules() { + + JavaClasses importedClasses = new ClassFileImporter().withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS) + .importPackages( // + "org.springframework.data.jdbc", // Spring Data Relational + "org.springframework.data.relational", // Spring Data Relational + "org.springframework.data" // Spring Data Commons + ).that(onlySpringData() // + .and(ignore(AuditingHandlerBeanDefinitionParser.class))); + + ArchRule rule = SlicesRuleDefinition.slices() // + .assignedFrom(subModuleSlicing()) // + .should().beFreeOfCycles(); + + rule.check(importedClasses); + } + + @Test // GH-1058 + void testGetFirstPackagePart() { + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(getFirstPackagePart("a.b.c")).isEqualTo("a"); + softly.assertThat(getFirstPackagePart("a")).isEqualTo("a"); + }); + } + + @Test // GH-1058 + void testSubModule() { + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(subModule("a.b", "a.b.c.d")).isEqualTo("c"); + softly.assertThat(subModule("a.b", "a.b.c")).isEqualTo("c"); + softly.assertThat(subModule("a.b", "a.b")).isEqualTo(""); + }); + } + + private DescribedPredicate onlySpringData() { + + return new DescribedPredicate<>("Spring Data Classes") { + @Override + public boolean apply(JavaClass input) { + + return input.getPackageName().startsWith("org.springframework.data"); + } + }; + } + + private DescribedPredicate ignore(Class type) { + + return new DescribedPredicate<>("ignored class " + type.getName()) { + @Override + public boolean apply(JavaClass input) { + return !input.getFullName().startsWith(type.getName()); + } + }; + } + + private String getFirstPackagePart(String subpackage) { + + int index = subpackage.indexOf("."); + if (index < 0) { + return subpackage; + } + return subpackage.substring(0, index); + } + + private String subModule(String basePackage, String packageName) { + + if (packageName.startsWith(basePackage) && packageName.length() > basePackage.length()) { + final int index = basePackage.length() + 1; + String subpackage = packageName.substring(index); + return getFirstPackagePart(subpackage); + } + return ""; + } + + private SliceAssignment subModuleSlicing() { + return new SliceAssignment() { + + @Override + public SliceIdentifier getIdentifierOf(JavaClass javaClass) { + + String packageName = javaClass.getPackageName(); + + String subModule = subModule("org.springframework.data.jdbc", packageName); + if (!subModule.isEmpty()) { + return SliceIdentifier.of(subModule); + } + + subModule = subModule("org.springframework.data.relational", packageName); + if (!subModule.isEmpty()) { + return SliceIdentifier.of(subModule); + } + + subModule = subModule("org.springframework.data", packageName); + if (!subModule.isEmpty()) { + return SliceIdentifier.of(subModule); + } + + return SliceIdentifier.ignore(); + } + + @Override + public String getDescription() { + return "Submodule"; + } + }; + } + +} diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/degraph/DependencyTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/degraph/DependencyTests.java deleted file mode 100644 index 22cd930577..0000000000 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/degraph/DependencyTests.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * 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 - * - * https://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.springframework.data.jdbc.degraph; - -import static de.schauderhaft.degraph.check.JCheck.*; -import static org.hamcrest.MatcherAssert.*; - -import de.schauderhaft.degraph.check.JCheck; -import scala.runtime.AbstractFunction1; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -/** - * Test package dependencies for violations. - * - * @author Jens Schauder - */ -@Disabled("org.springframework.data.jdbc.core.dialect.** needs rework") -public class DependencyTests { - - @Test // DATAJDBC-114 - @Disabled // Replace by ArchUnit test - public void cycleFree() { - - assertThat( // - classpath() // - .noJars() // - .including("org.springframework.data.jdbc.**") // - .filterClasspath("*target/classes") // exclude test code - .printOnFailure("degraph-jdbc.graphml"), - JCheck.violationFree()); - } - - @Test // DATAJDBC-220 - @Disabled // Replace by ArchUnit test - public void acrossModules() { - - assertThat( // - classpath() // - // include only Spring Data related classes (for example no JDK code) - .including("org.springframework.data.**") // - .filterClasspath(new AbstractFunction1() { - @Override - public Object apply(String s) { // - // only the current module + commons - return s.endsWith("target/classes") || s.contains("spring-data-commons"); - } - }) // exclude test code - .withSlicing("sub-modules", // sub-modules are defined by any of the following pattern. - "org.springframework.data.jdbc.(*).**", // - "org.springframework.data.relational.(*).**", // - "org.springframework.data.(*).**") // - .printTo("degraph-across-modules.graphml"), // writes a graphml to this location - JCheck.violationFree()); - } -} diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java index c1804f217c..645db5b3da 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java @@ -41,7 +41,7 @@ import org.springframework.data.jdbc.core.convert.JdbcCustomConversions; import org.springframework.data.jdbc.core.convert.RelationResolver; import org.springframework.data.jdbc.core.convert.SqlGeneratorSource; -import org.springframework.data.jdbc.core.dialect.JdbcArrayColumns; +import org.springframework.data.jdbc.core.convert.JdbcArrayColumns; import org.springframework.data.jdbc.core.dialect.JdbcDialect; import org.springframework.data.jdbc.core.mapping.JdbcMappingContext; import org.springframework.data.jdbc.core.mapping.JdbcSimpleTypes; diff --git a/spring-data-relational/pom.xml b/spring-data-relational/pom.xml index 7f1b64beaf..bc8cec1b56 100644 --- a/spring-data-relational/pom.xml +++ b/spring-data-relational/pom.xml @@ -6,7 +6,7 @@ 4.0.0 spring-data-relational - 3.0.0-SNAPSHOT + 3.0.0-1058-archunit-SNAPSHOT Spring Data Relational Spring Data Relational support @@ -14,7 +14,7 @@ org.springframework.data spring-data-relational-parent - 3.0.0-SNAPSHOT + 3.0.0-1058-archunit-SNAPSHOT @@ -65,9 +65,9 @@ - de.schauderhaft.degraph - degraph-check - ${degraph-check.version} + com.tngtech.archunit + archunit + 0.22.0 test diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/event/RelationalAuditingCallback.java b/spring-data-relational/src/main/java/org/springframework/data/relational/auditing/RelationalAuditingCallback.java similarity index 93% rename from spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/event/RelationalAuditingCallback.java rename to spring-data-relational/src/main/java/org/springframework/data/relational/auditing/RelationalAuditingCallback.java index 6dd04acbb8..27cb376a8e 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/event/RelationalAuditingCallback.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/auditing/RelationalAuditingCallback.java @@ -13,11 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.relational.core.mapping.event; +package org.springframework.data.relational.auditing; import org.springframework.context.ApplicationListener; import org.springframework.core.Ordered; import org.springframework.data.auditing.IsNewAwareAuditingHandler; +import org.springframework.data.relational.core.mapping.event.BeforeConvertCallback; import org.springframework.util.Assert; /** diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/DependencyTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/DependencyTests.java new file mode 100644 index 0000000000..0d269200f3 --- /dev/null +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/DependencyTests.java @@ -0,0 +1,163 @@ +/* + * Copyright 2017-2021 the original author or authors. + * + * 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 + * + * https://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.springframework.data.relational; + +import org.assertj.core.api.SoftAssertions; +import org.junit.jupiter.api.Test; +import org.springframework.data.relational.core.dialect.RenderContextFactory; +import org.springframework.data.relational.core.sql.render.SelectRenderContext; + +import com.tngtech.archunit.base.DescribedPredicate; +import com.tngtech.archunit.core.domain.JavaClass; +import com.tngtech.archunit.core.domain.JavaClasses; +import com.tngtech.archunit.core.importer.ClassFileImporter; +import com.tngtech.archunit.core.importer.ImportOption; +import com.tngtech.archunit.lang.ArchRule; +import com.tngtech.archunit.library.dependencies.SliceAssignment; +import com.tngtech.archunit.library.dependencies.SliceIdentifier; +import com.tngtech.archunit.library.dependencies.SlicesRuleDefinition; + +/** + * Test package dependencies for violations. + * + * @author Jens Schauder + * @author Mark Paluch + */ +public class DependencyTests { + + @Test + void cycleFree() { + + JavaClasses importedClasses = new ClassFileImporter() // + .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS) // + .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_JARS) // we just analyze the code of this module. + .importPackages("org.springframework.data.relational") + .that( // + onlySpringData() // + .and(ignore(SelectRenderContext.class)) // + .and(ignore(RenderContextFactory.class)) // + ); + + ArchRule rule = SlicesRuleDefinition.slices() // + .matching("org.springframework.data.relational.(**)") // + .should() // + .beFreeOfCycles(); + + rule.check(importedClasses); + } + + @Test + void acrossModules() { + + JavaClasses importedClasses = new ClassFileImporter().withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS) + .importPackages( // + "org.springframework.data.relational", // Spring Data Relational + "org.springframework.data" // Spring Data Commons + ); + + final JavaClasses relevantClasses = importedClasses.that(onlySpringData()); + + ArchRule rule = SlicesRuleDefinition.slices() // + .assignedFrom(subModuleSlicing()) // + .should().beFreeOfCycles(); + + rule.check(relevantClasses); + } + + @Test // GH-1058 + void testGetFirstPackagePart() { + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(getFirstPackagePart("a.b.c")).isEqualTo("a"); + softly.assertThat(getFirstPackagePart("a")).isEqualTo("a"); + }); + } + + @Test // GH-1058 + void testSubModule() { + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(subModule("a.b", "a.b.c.d")).isEqualTo("c"); + softly.assertThat(subModule("a.b", "a.b.c")).isEqualTo("c"); + softly.assertThat(subModule("a.b", "a.b")).isEqualTo(""); + }); + } + + private DescribedPredicate onlySpringData() { + + return new DescribedPredicate<>("Spring Data Classes") { + @Override + public boolean apply(JavaClass input) { + + return input.getPackageName().startsWith("org.springframework.data"); + } + }; + } + + private DescribedPredicate ignore(Class type) { + + return new DescribedPredicate<>("ignored class " + type.getName()) { + @Override + public boolean apply(JavaClass input) { + return !input.getFullName().startsWith(type.getName()); + } + }; + } + + private String getFirstPackagePart(String subpackage) { + + int index = subpackage.indexOf("."); + if (index < 0) { + return subpackage; + } + return subpackage.substring(0, index); + } + + private String subModule(String basePackage, String packageName) { + + if (packageName.startsWith(basePackage) && packageName.length() > basePackage.length()) { + final int index = basePackage.length() + 1; + String subpackage = packageName.substring(index); + return getFirstPackagePart(subpackage); + } + return ""; + } + + private SliceAssignment subModuleSlicing() { + return new SliceAssignment() { + + @Override + public SliceIdentifier getIdentifierOf(JavaClass javaClass) { + + String packageName = javaClass.getPackageName(); + String subModule = subModule("org.springframework.data.relational", packageName); + if (!subModule.isEmpty()) { + return SliceIdentifier.of(subModule); + } + subModule = subModule("org.springframework.data", packageName); + if (!subModule.isEmpty()) { + return SliceIdentifier.of(subModule); + } + return SliceIdentifier.ignore(); + } + + @Override + public String getDescription() { + return "Submodule"; + } + }; + } +} diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/degraph/DependencyTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/degraph/DependencyTests.java deleted file mode 100644 index 5c1ca46b1a..0000000000 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/degraph/DependencyTests.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2017-2021 the original author or authors. - * - * 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 - * - * https://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.springframework.data.relational.degraph; - -import static de.schauderhaft.degraph.check.JCheck.*; -import static org.hamcrest.MatcherAssert.*; - -import de.schauderhaft.degraph.check.JCheck; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import scala.runtime.AbstractFunction1; - -import org.junit.jupiter.api.Test; -import org.springframework.data.relational.core.dialect.RenderContextFactory; -import org.springframework.data.relational.core.sql.render.SelectRenderContext; - -/** - * Test package dependencies for violations. - * - * @author Jens Schauder - * @author Mark Paluch - */ -public class DependencyTests { - - @Test // DATAJDBC-114 - @Disabled // Replace by ArchUnit test - public void cycleFree() { - - assertThat( // - classpath() // - .noJars() // - .including("org.springframework.data.relational.**") // - .excluding(SelectRenderContext.class.getName()) // - .excluding(RenderContextFactory.class.getName() + "*") // - .filterClasspath("*target/classes") // exclude test code - .printOnFailure("degraph-relational.graphml"), - JCheck.violationFree()); - } - - @Test // DATAJDBC-220 - @Disabled // Replace by ArchUnit test - public void acrossModules() { - - assertThat( // - classpath() // - // include only Spring Data related classes (for example no JDK code) - .including("org.springframework.data.**") // - .excluding("org.springframework.data.relational.core.sql.**") // - .excluding("org.springframework.data.repository.query.parser.**") // - .filterClasspath(new AbstractFunction1() { - @Override - public Object apply(String s) { // - // only the current module + commons - return s.endsWith("target/classes") || s.contains("spring-data-commons"); - } - }) // exclude test code - .withSlicing("sub-modules", // sub-modules are defined by any of the following pattern. - "org.springframework.data.relational.(**).*", // - "org.springframework.data.(**).*") // - .printTo("degraph-across-modules.graphml"), // writes a graphml to this location - JCheck.violationFree()); - } -}