diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/TestGenerator.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/TestGenerator.java index 0c526a2d11..29bb026154 100755 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/TestGenerator.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/TestGenerator.java @@ -139,7 +139,7 @@ public class TestGenerator { throw new IllegalStateException("In progress contracts found in paths [" + inProgressContractsPaths + "] and the switch [failOnInProgress] is set to [true]. Either unmark those contracts as in progress, or set the switch to [false]."); } - processAllNotInProgress(contracts, basePackageName); + processAll(contracts, basePackageName); } private Set>> inProgress(MultiValueMap contracts) { @@ -148,11 +148,9 @@ public class TestGenerator { .collect(Collectors.toSet()); } - void processAllNotInProgress(MultiValueMap contracts, final String basePackageName) { - contracts.entrySet().stream() - .filter(entry -> entry.getValue().stream().noneMatch(ContractMetadata::anyInProgress)) - .forEach(entry -> processIncludedDirectory(relativizeContractPath(entry), entry.getValue(), - basePackageName)); + void processAll(MultiValueMap contracts, final String basePackageName) { + contracts.entrySet().stream().forEach( + entry -> processIncludedDirectory(relativizeContractPath(entry), entry.getValue(), basePackageName)); } private String relativizeContractPath(Map.Entry> entry) { @@ -166,7 +164,7 @@ public class TestGenerator { includedDirectoryRelativePath); if (!contracts.isEmpty()) { String className = afterLast(includedDirectoryRelativePath, File.separator) + resolveNameSuffix(); - String convertedClassName = convertIllegalPackageChars(className); + String convertedClassName = ensureNameDoesNotStartWithNumber(convertIllegalPackageChars(className)); String packageName = buildPackage(basePackageNameForClass, includedDirectoryRelativePath); Path dir = saver.generateTestBaseDir(basePackageNameForClass, convertIllegalPackageChars(includedDirectoryRelativePath)); @@ -180,6 +178,10 @@ public class TestGenerator { } } + private String ensureNameDoesNotStartWithNumber(String convertedClassName) { + return convertedClassName.matches("[0-9]+.*") ? ("_" + convertedClassName) : convertedClassName; + } + private String resolveNameSuffix() { return StringUtils.defaultIfEmpty(configProperties.getNameSuffixForTests(), configProperties.getTestFramework().getClassNameSuffix()); diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/InProgressContractMethodPreProcessor.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/InProgressContractMethodPreProcessor.java deleted file mode 100644 index a6068d88f1..0000000000 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/InProgressContractMethodPreProcessor.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2013-2020 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.cloud.contract.verifier.builder; - -import org.springframework.cloud.contract.verifier.file.SingleContractMetadata; - -class InProgressContractMethodPreProcessor implements MethodPreProcessor { - - @Override - public boolean shouldContinue() { - return false; - } - - @Override - public boolean accept(SingleContractMetadata metadata) { - return metadata.isInProgress(); - } - -} diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreImports.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreImports.java index ae69019bc6..04b399bd72 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreImports.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreImports.java @@ -17,7 +17,6 @@ package org.springframework.cloud.contract.verifier.builder; import org.springframework.cloud.contract.verifier.config.TestFramework; -import org.springframework.cloud.contract.verifier.file.SingleContractMetadata; class JUnit4IgnoreImports implements Imports { @@ -41,7 +40,7 @@ class JUnit4IgnoreImports implements Imports { return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT && this.generatedClassMetaData.listOfFiles.stream() .anyMatch(metadata -> metadata.isIgnored() || metadata.getConvertedContractWithMetadata() - .stream().anyMatch(SingleContractMetadata::isIgnored)); + .stream().anyMatch(m -> m.isIgnored() || m.isInProgress())); } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreMethodAnnotation.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreMethodAnnotation.java index 31d6d5f2c4..f8aa54b292 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreMethodAnnotation.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit4IgnoreMethodAnnotation.java @@ -44,7 +44,8 @@ class JUnit4IgnoreMethodAnnotation implements MethodAnnotations { public boolean accept(SingleContractMetadata singleContractMetadata) { return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT && (singleContractMetadata.getContractMetadata().isIgnored() - || singleContractMetadata.getContract().isIgnored()); + || singleContractMetadata.getContract().isIgnored() + || singleContractMetadata.getContract().isInProgress()); } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreImports.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreImports.java index f28f0abfc4..901bfba735 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreImports.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreImports.java @@ -17,7 +17,6 @@ package org.springframework.cloud.contract.verifier.builder; import org.springframework.cloud.contract.verifier.config.TestFramework; -import org.springframework.cloud.contract.verifier.file.SingleContractMetadata; class JUnit5IgnoreImports implements Imports { @@ -41,7 +40,7 @@ class JUnit5IgnoreImports implements Imports { return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT5 && this.generatedClassMetaData.listOfFiles.stream() .anyMatch(metadata -> metadata.isIgnored() || metadata.getConvertedContractWithMetadata() - .stream().anyMatch(SingleContractMetadata::isIgnored)); + .stream().anyMatch(m -> m.isIgnored() || m.isInProgress())); } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreMethodAnnotation.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreMethodAnnotation.java index 1e7c321113..8d3d169dd5 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreMethodAnnotation.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/JUnit5IgnoreMethodAnnotation.java @@ -44,7 +44,8 @@ class JUnit5IgnoreMethodAnnotation implements MethodAnnotations { public boolean accept(SingleContractMetadata singleContractMetadata) { return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT5 && (singleContractMetadata.getContractMetadata().isIgnored() - || singleContractMetadata.getContract().isIgnored()); + || singleContractMetadata.getContract().isIgnored() + || singleContractMetadata.getContract().isInProgress()); } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SingleMethodBuilder.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SingleMethodBuilder.java index 511d950480..6623fb609d 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SingleMethodBuilder.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SingleMethodBuilder.java @@ -90,7 +90,6 @@ class SingleMethodBuilder { SingleMethodBuilder restAssured() { return given(new JavaRestAssuredGiven(this.blockBuilder, this.generatedClassMetaData)) - .methodPreProcessor(new InProgressContractMethodPreProcessor()) .given(new SpockRestAssuredGiven(this.blockBuilder, this.generatedClassMetaData)) .when(new JavaRestAssuredWhen(this.blockBuilder, this.generatedClassMetaData)) .when(new SpockRestAssuredWhen(this.blockBuilder, this.generatedClassMetaData)) @@ -101,7 +100,6 @@ class SingleMethodBuilder { SingleMethodBuilder customMode() { return given(new CustomModeGiven(this.blockBuilder, this.generatedClassMetaData, CustomModeBodyParser.INSTANCE)) - .methodPreProcessor(new InProgressContractMethodPreProcessor()) .when(new CustomModeWhen(this.blockBuilder, this.generatedClassMetaData)) .then(new CustomModeThen(this.blockBuilder, this.generatedClassMetaData, CustomModeBodyParser.INSTANCE, ComparisonBuilder.JAVA_HTTP_INSTANCE)) @@ -109,8 +107,7 @@ class SingleMethodBuilder { } SingleMethodBuilder jaxRs() { - return methodPreProcessor(new InProgressContractMethodPreProcessor()) - .given(new JaxRsGiven(this.generatedClassMetaData)) + return given(new JaxRsGiven(this.generatedClassMetaData)) .when(new JavaJaxRsWhen(this.blockBuilder, this.generatedClassMetaData)) .when(new SpockJaxRsWhen(this.blockBuilder, this.generatedClassMetaData)) .then(new JavaJaxRsThen(this.blockBuilder, this.generatedClassMetaData)) @@ -120,8 +117,7 @@ class SingleMethodBuilder { SingleMethodBuilder messaging() { // @formatter:off - return methodPreProcessor(new InProgressContractMethodPreProcessor()) - .given(new JavaMessagingGiven(this.blockBuilder, this.generatedClassMetaData)) + return given(new JavaMessagingGiven(this.blockBuilder, this.generatedClassMetaData)) .given(new SpockMessagingGiven(this.blockBuilder, this.generatedClassMetaData)) .when(new MessagingWhen(this.blockBuilder, this.generatedClassMetaData)) .then(new JavaMessagingWithBodyThen(this.blockBuilder, diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SpockIgnoreImports.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SpockIgnoreImports.java index dac90db5eb..e1afb5d80c 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SpockIgnoreImports.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SpockIgnoreImports.java @@ -17,7 +17,6 @@ package org.springframework.cloud.contract.verifier.builder; import org.springframework.cloud.contract.verifier.config.TestFramework; -import org.springframework.cloud.contract.verifier.file.SingleContractMetadata; class SpockIgnoreImports implements Imports { @@ -41,7 +40,7 @@ class SpockIgnoreImports implements Imports { return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.SPOCK && this.generatedClassMetaData.listOfFiles.stream() .anyMatch(metadata -> metadata.isIgnored() || metadata.getConvertedContractWithMetadata() - .stream().anyMatch(SingleContractMetadata::isIgnored)); + .stream().anyMatch(m -> m.isIgnored() || m.isInProgress())); } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SpockIgnoreMethodAnnotation.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SpockIgnoreMethodAnnotation.java index d9cacaa759..33a420833e 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SpockIgnoreMethodAnnotation.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/SpockIgnoreMethodAnnotation.java @@ -44,7 +44,8 @@ class SpockIgnoreMethodAnnotation implements MethodAnnotations { public boolean accept(SingleContractMetadata singleContractMetadata) { return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.SPOCK && (singleContractMetadata.getContractMetadata().isIgnored() - || singleContractMetadata.getContract().isIgnored()); + || singleContractMetadata.getContract().isIgnored() + || singleContractMetadata.getContract().isInProgress()); } } diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/TestNGMethodAnnotation.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/TestNGMethodAnnotation.java index d2be583969..8356519ab3 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/TestNGMethodAnnotation.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/builder/TestNGMethodAnnotation.java @@ -32,7 +32,8 @@ class TestNGMethodAnnotation implements MethodAnnotations { @Override public MethodVisitor apply(SingleContractMetadata singleContractMetadata) { - final String annotation = singleContractMetadata.isIgnored() ? "@Test(enabled = false)" : "@Test"; + final String annotation = (singleContractMetadata.isIgnored() || singleContractMetadata.isInProgress()) + ? "@Test(enabled = false)" : "@Test"; this.blockBuilder.addIndented(annotation); return this; } diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/TestGeneratorTests.java b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/TestGeneratorTests.java index 8a3fe27221..bed4de46aa 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/TestGeneratorTests.java +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/TestGeneratorTests.java @@ -101,7 +101,7 @@ public class TestGeneratorTests { // and: TestGenerator testGenerator = new TestGenerator(properties, singleTestGenerator, fileSaver, scanner) { @Override - void processAllNotInProgress(MultiValueMap contracts, String basePackageName) { + void processAll(MultiValueMap contracts, String basePackageName) { } }; diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SpringTestMethodBodyBuildersSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SpringTestMethodBodyBuildersSpec.groovy index d37db5134d..6dac394458 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SpringTestMethodBodyBuildersSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/SpringTestMethodBodyBuildersSpec.groovy @@ -3177,12 +3177,14 @@ DocumentContext parsedJson = JsonPath.parse(json); test.contains('''httpContractNotInProgress''') test.contains('''messagingContractNotInProgress''') and: - !test.contains('''httpContractInProgress''') - !test.contains('''messagingContractInProgress''') + test.contains('''httpContractInProgress''') + test.contains('''messagingContractInProgress''') + test.count("@Ignore") == 2 || test.count("@Disabled") == 2 || test.count("@Test(enabled = false)") == 2 where: methodBuilderName | methodBuilder "spock" | { configProperties.testFramework = TestFramework.SPOCK } "testng" | { configProperties.testFramework = TestFramework.TESTNG } + "junit5" | { configProperties.testFramework = TestFramework.JUNIT5 } "mockmvc" | { configProperties.testMode = TestMode.MOCKMVC } "jaxrs-spock" | { configProperties.testFramework = TestFramework.SPOCK; configProperties.testMode = TestMode.JAXRSCLIENT