diff --git a/spring-modulith-test/src/main/java/org/springframework/modulith/test/ModuleContextCustomizerFactory.java b/spring-modulith-test/src/main/java/org/springframework/modulith/test/ModuleContextCustomizerFactory.java index accf28ca..8ae3c3f0 100644 --- a/spring-modulith-test/src/main/java/org/springframework/modulith/test/ModuleContextCustomizerFactory.java +++ b/spring-modulith-test/src/main/java/org/springframework/modulith/test/ModuleContextCustomizerFactory.java @@ -63,12 +63,9 @@ class ModuleContextCustomizerFactory implements ContextCustomizerFactory { private static final Logger LOGGER = LoggerFactory.getLogger(ModuleContextCustomizer.class); private final Supplier execution; - private final Class source; ModuleContextCustomizer(Class testClass) { - this.execution = ModuleTestExecution.of(testClass); - this.source = testClass; } /* @@ -166,6 +163,7 @@ class ModuleContextCustomizerFactory implements ContextCustomizerFactory { */ @Override public boolean equals(Object obj) { + if (this == obj) { return true; } @@ -174,7 +172,7 @@ class ModuleContextCustomizerFactory implements ContextCustomizerFactory { return false; } - return Objects.equals(this.source, that.source); + return Objects.equals(this.execution.get(), that.execution.get()); } /* @@ -183,7 +181,7 @@ class ModuleContextCustomizerFactory implements ContextCustomizerFactory { */ @Override public int hashCode() { - return Objects.hashCode(source); + return Objects.hashCode(execution.get()); } private static void logHeadline(String headline) { diff --git a/spring-modulith-test/src/test/java/example/module/SampleTestA.java b/spring-modulith-test/src/test/java/example/module/SampleTestA.java new file mode 100644 index 00000000..23df4a8e --- /dev/null +++ b/spring-modulith-test/src/test/java/example/module/SampleTestA.java @@ -0,0 +1,26 @@ +/* + * Copyright 2025 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 example.module; + +import org.springframework.modulith.test.ApplicationModuleTest; + +/** + * @author Oliver Drotbohm + */ +@ApplicationModuleTest +public class SampleTestA { + +} diff --git a/spring-modulith-test/src/test/java/example/module/SampleTestB.java b/spring-modulith-test/src/test/java/example/module/SampleTestB.java new file mode 100644 index 00000000..28056f03 --- /dev/null +++ b/spring-modulith-test/src/test/java/example/module/SampleTestB.java @@ -0,0 +1,24 @@ +/* + * Copyright 2025 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 example.module; + +import org.springframework.modulith.test.ApplicationModuleTest; + +/** + * @author Oliver Drotbohm + */ +@ApplicationModuleTest +public class SampleTestB {} diff --git a/spring-modulith-test/src/test/java/org/springframework/modulith/test/ModuleContextCustomizerUnitTests.java b/spring-modulith-test/src/test/java/org/springframework/modulith/test/ModuleContextCustomizerUnitTests.java index e7fc068f..58fbd8fc 100644 --- a/spring-modulith-test/src/test/java/org/springframework/modulith/test/ModuleContextCustomizerUnitTests.java +++ b/spring-modulith-test/src/test/java/org/springframework/modulith/test/ModuleContextCustomizerUnitTests.java @@ -18,6 +18,7 @@ package org.springframework.modulith.test; import static org.assertj.core.api.Assertions.*; import example.module.SampleTestA; +import example.module.SampleTestB; import org.junit.jupiter.api.Test; import org.springframework.modulith.core.ApplicationModule; @@ -34,8 +35,8 @@ class ModuleContextCustomizerUnitTests { @Test void instancesForSameTargetTypeAreEqual() { - var left = new ModuleContextCustomizer(Object.class); - var right = new ModuleContextCustomizer(Object.class); + var left = new ModuleContextCustomizer(SampleTestA.class); + var right = new ModuleContextCustomizer(SampleTestA.class); assertThat(left).isEqualTo(right); assertThat(right).isEqualTo(left); @@ -53,4 +54,15 @@ class ModuleContextCustomizerUnitTests { .extracting(ApplicationModuleIdentifier::toString) .isEqualTo("module"); } + + @Test // GH-1050 + void instancesWithSameModuleSetupAreConsideredEqual() { + + var left = new ModuleContextCustomizer(SampleTestA.class); + var right = new ModuleContextCustomizer(SampleTestB.class); + + assertThat(left).isEqualTo(right); + assertThat(right).isEqualTo(left); + assertThat(left).hasSameHashCodeAs(right); + } } diff --git a/spring-modulith-test/src/test/resources/META-INF/spring.factories b/spring-modulith-test/src/test/resources/META-INF/spring.factories new file mode 100644 index 00000000..adf613bf --- /dev/null +++ b/spring-modulith-test/src/test/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.modulith.core.ApplicationModulesFactory=org.springframework.modulith.test.TestApplicationModules.Factory