This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch MDEP-943
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git

commit b3eb68695974c78928d8128c96bc1620cc24ab35
Author: Slawomir Jaranowski <[email protected]>
AuthorDate: Sat Jun 15 12:06:20 2024 +0200

    [MDEP-943] Fix appendOutput option
---
 .../plugins/dependency/utils/DependencyUtil.java   | 21 ++++-
 .../dependency/utils/TestDependencyUtil.java       | 94 ++++++++++++++--------
 2 files changed, 78 insertions(+), 37 deletions(-)

diff --git 
a/src/main/java/org/apache/maven/plugins/dependency/utils/DependencyUtil.java 
b/src/main/java/org/apache/maven/plugins/dependency/utils/DependencyUtil.java
index eaff55ca..2ca4d65a 100644
--- 
a/src/main/java/org/apache/maven/plugins/dependency/utils/DependencyUtil.java
+++ 
b/src/main/java/org/apache/maven/plugins/dependency/utils/DependencyUtil.java
@@ -25,6 +25,8 @@ import java.io.StringReader;
 import java.io.Writer;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
+import java.nio.file.OpenOption;
+import java.nio.file.StandardOpenOption;
 import java.util.Objects;
 
 import org.apache.maven.artifact.Artifact;
@@ -132,8 +134,9 @@ public final class DependencyUtil {
      * @param useSubdirsPerScope if a new sub directory should be used for 
each scope.
      * @param useSubdirsPerType if a new sub directory should be used for each 
type.
      * @param useSubdirPerArtifact if a new sub directory should be used for 
each artifact.
-     * @param useRepositoryLayout if dependencies must be moved into a Maven 
repository layout, if set, other settings
-     *            will be ignored.
+     * @param useRepositoryLayout if dependencies must be moved into a Maven 
repository layout, if set, other
+     *         settings
+     *         will be ignored.
      * @param removeVersion if the version must not be mentioned in the 
filename
      * @param removeType if the type must not be mentioned in the filename
      * @param outputDirectory base outputDirectory.
@@ -226,7 +229,19 @@ public final class DependencyUtil {
             throws IOException {
         Files.createDirectories(file.getParentFile().toPath());
 
-        try (Writer writer = Files.newBufferedWriter(file.toPath(), 
Charset.forName(encoding))) {
+        OpenOption appendOption;
+        if (append) {
+            appendOption = StandardOpenOption.APPEND;
+        } else {
+            appendOption = StandardOpenOption.TRUNCATE_EXISTING;
+        }
+
+        try (Writer writer = Files.newBufferedWriter(
+                file.toPath(),
+                Charset.forName(encoding),
+                appendOption,
+                StandardOpenOption.CREATE,
+                StandardOpenOption.WRITE)) {
             writer.write(string);
         }
     }
diff --git 
a/src/test/java/org/apache/maven/plugins/dependency/utils/TestDependencyUtil.java
 
b/src/test/java/org/apache/maven/plugins/dependency/utils/TestDependencyUtil.java
index b22ee84e..86ee55e7 100644
--- 
a/src/test/java/org/apache/maven/plugins/dependency/utils/TestDependencyUtil.java
+++ 
b/src/test/java/org/apache/maven/plugins/dependency/utils/TestDependencyUtil.java
@@ -19,28 +19,31 @@
 package org.apache.maven.plugins.dependency.utils;
 
 import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
+import java.io.IOException;
 
-import junit.framework.TestCase;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.plugin.testing.SilentLog;
 import org.apache.maven.plugin.testing.stubs.DefaultArtifactHandlerStub;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author brianf
  */
-public class TestDependencyUtil extends TestCase {
-    List<Artifact> artifacts = new ArrayList<>();
+class TestDependencyUtil {
 
-    Log log = new SilentLog();
+    private static final String TEST_CONTENT =
+            "Test line 1" + System.lineSeparator() + "Test line 2" + 
System.lineSeparator();
 
-    File outputFolder;
+    @TempDir
+    File temDir;
 
     Artifact snap;
 
@@ -50,40 +53,31 @@ public class TestDependencyUtil extends TestCase {
 
     Artifact sources;
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    protected void setUp() {
 
         ArtifactHandler ah = new DefaultArtifactHandlerStub("jar", null);
         VersionRange vr = VersionRange.createFromVersion("1.1");
         release = new DefaultArtifact("test", "one", vr, 
Artifact.SCOPE_COMPILE, "jar", "sources", ah, false);
-        artifacts.add(release);
 
         ah = new DefaultArtifactHandlerStub("war", null);
         vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
         snap = new DefaultArtifact("test", "two", vr, Artifact.SCOPE_PROVIDED, 
"war", null, ah, false);
-        artifacts.add(snap);
 
         ah = new DefaultArtifactHandlerStub("war", null);
         vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
         snapResolvedVersion = new DefaultArtifact("test", "three", vr, 
Artifact.SCOPE_PROVIDED, "war", null, ah, false);
         snapResolvedVersion.setResolvedVersion("1.1-20121003.035531-117");
-        artifacts.add(snapResolvedVersion);
 
         ah = new DefaultArtifactHandlerStub("war", null);
         vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
         sources = new DefaultArtifact("test", "two", vr, 
Artifact.SCOPE_PROVIDED, "sources", "sources", ah, false);
-
-        // pick random output location
-        Random a = new Random();
-        outputFolder = new File("target/copy" + a.nextLong() + "/");
-        outputFolder.delete();
-        assertFalse(outputFolder.exists());
     }
 
-    public void testDirectoryName() {
+    @Test
+    void testDirectoryName() {
         File folder = new File("target/a");
-        final Artifact artifact = artifacts.get(0);
+        final Artifact artifact = release;
         File name =
                 DependencyUtil.getFormattedOutputDirectory(false, false, 
false, false, false, false, folder, artifact);
         // object is the same.
@@ -153,9 +147,10 @@ public class TestDependencyUtil extends TestCase {
         assertEquals(expectedResult, name.getAbsolutePath());
     }
 
-    public void testDirectoryName2() {
+    @Test
+    void testDirectoryName2() {
         File folder = new File("target/a");
-        final Artifact artifact = artifacts.get(1);
+        final Artifact artifact = snap;
         File name =
                 DependencyUtil.getFormattedOutputDirectory(false, false, 
false, false, false, false, folder, artifact);
         // object is the same.
@@ -205,7 +200,8 @@ public class TestDependencyUtil extends TestCase {
         assertEquals(expectedResult, name.getAbsolutePath());
     }
 
-    public void testDirectoryNameSources() {
+    @Test
+    void testDirectoryNameSources() {
         File folder = new File("target/a");
         File name = DependencyUtil.getFormattedOutputDirectory(false, false, 
true, false, true, false, folder, sources);
         String expectedResult = folder.getAbsolutePath() + File.separatorChar 
+ "two-sources";
@@ -224,8 +220,9 @@ public class TestDependencyUtil extends TestCase {
         assertEquals(expectedResult, name.getAbsolutePath());
     }
 
-    public void testFileName() {
-        Artifact artifact = artifacts.get(0);
+    @Test
+    void testFileName() {
+        Artifact artifact = release;
 
         String name = DependencyUtil.getFormattedFileName(artifact, false);
         String expectedResult = "one-1.1-sources.jar";
@@ -235,7 +232,8 @@ public class TestDependencyUtil extends TestCase {
         assertEquals(expectedResult, name);
     }
 
-    public void testFileNameUseBaseVersion() {
+    @Test
+    void testFileNameUseBaseVersion() {
         Artifact artifact = snapResolvedVersion;
 
         String name = DependencyUtil.getFormattedFileName(artifact, false, 
false, true);
@@ -246,7 +244,8 @@ public class TestDependencyUtil extends TestCase {
         assertEquals(expectedResult, name);
     }
 
-    public void testTestJar() {
+    @Test
+    void testTestJar() {
         ArtifactHandler ah = new DefaultArtifactHandlerStub("test-jar", null);
         VersionRange vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
         Artifact artifact =
@@ -257,7 +256,8 @@ public class TestDependencyUtil extends TestCase {
         assertEquals(expectedResult, name);
     }
 
-    public void testFileNameClassifier() {
+    @Test
+    void testFileNameClassifier() {
         ArtifactHandler ah = new DefaultArtifactHandlerStub("jar", "sources");
         VersionRange vr = VersionRange.createFromVersion("1.1-SNAPSHOT");
         Artifact artifact =
@@ -282,7 +282,8 @@ public class TestDependencyUtil extends TestCase {
         assertEquals(expectedResult, name);
     }
 
-    public void testFileNameClassifierWithFile() {
+    @Test
+    void testFileNameClassifierWithFile() {
         // specifically testing the default operation that getFormattedFileName
         // returns
         // the actual name of the file if available unless remove version is
@@ -319,7 +320,8 @@ public class TestDependencyUtil extends TestCase {
         assertEquals(expectedResult, name);
     }
 
-    public void testTokenizer() {
+    @Test
+    void testTokenizer() {
         String[] tokens = DependencyUtil.tokenizer(" alpha,bravo, charlie , 
delta kappa, theta");
         String[] expected = new String[] {"alpha", "bravo", "charlie", "delta 
kappa", "theta"};
         // easier to see in the JUnit reports
@@ -337,4 +339,28 @@ public class TestDependencyUtil extends TestCase {
         tokens = DependencyUtil.tokenizer("  ");
         assertEquals(0, tokens.length);
     }
+
+    @Test
+    void outputFileShouldBeOverride() throws IOException {
+        File file = new File(temDir, "file1.out");
+        assertThat(file).doesNotExist();
+
+        DependencyUtil.write(TEST_CONTENT, file, false, "UTF-8");
+        assertThat(file).hasContent(TEST_CONTENT);
+
+        DependencyUtil.write(TEST_CONTENT, file, false, "UTF-8");
+        assertThat(file).hasContent(TEST_CONTENT);
+    }
+
+    @Test
+    void outputFileShouldBeAppended() throws IOException {
+        File file = new File(temDir, "file2.out");
+        assertThat(file).doesNotExist();
+
+        DependencyUtil.write(TEST_CONTENT, file, true, "UTF-8");
+        assertThat(file).hasContent(TEST_CONTENT);
+
+        DependencyUtil.write(TEST_CONTENT, file, true, "UTF-8");
+        assertThat(file).hasContent(TEST_CONTENT + TEST_CONTENT);
+    }
 }

Reply via email to