Add CopyFileTestRule.
diff --git a/commons-testing-generic/src/main/java/org/apache/commons/testing/net/AvailableServerPortFinder.java b/commons-testing-generic/src/main/java/org/apache/commons/testing/net/AvailableServerPortFinder.java
index 9a276e9..656a97a 100644
--- a/commons-testing-generic/src/main/java/org/apache/commons/testing/net/AvailableServerPortFinder.java
+++ b/commons-testing-generic/src/main/java/org/apache/commons/testing/net/AvailableServerPortFinder.java
@@ -14,6 +14,7 @@
  * See the license for the specific language governing permissions and

  * limitations under the license.

  */

+

 package org.apache.commons.testing.net;

 

 import java.io.IOException;

diff --git a/commons-testing-generic/src/test/java/org/apache/commons/testing/CloserTest.java b/commons-testing-generic/src/test/java/org/apache/commons/testing/CloserTest.java
index b812292..ccb939d 100644
--- a/commons-testing-generic/src/test/java/org/apache/commons/testing/CloserTest.java
+++ b/commons-testing-generic/src/test/java/org/apache/commons/testing/CloserTest.java
@@ -14,6 +14,7 @@
  * See the license for the specific language governing permissions and

  * limitations under the license.

  */

+

 package org.apache.commons.testing;

 

 import org.junit.Assert;

diff --git a/commons-testing-junit4/pom.xml b/commons-testing-junit4/pom.xml
index 836c935..5c27ac3 100644
--- a/commons-testing-junit4/pom.xml
+++ b/commons-testing-junit4/pom.xml
@@ -76,6 +76,10 @@
       <groupId>org.apache.commons</groupId>

       <artifactId>commons-lang3</artifactId>

     </dependency>

+    <dependency>

+      <groupId>commons-io</groupId>

+      <artifactId>commons-io</artifactId>

+    </dependency>

   </dependencies>

 

   <reporting>

diff --git a/commons-testing-junit4/src/main/java/org/apache/commons/testing/junit4/io/CopyFileTestRule.java b/commons-testing-junit4/src/main/java/org/apache/commons/testing/junit4/io/CopyFileTestRule.java
new file mode 100644
index 0000000..38792c0
--- /dev/null
+++ b/commons-testing-junit4/src/main/java/org/apache/commons/testing/junit4/io/CopyFileTestRule.java
@@ -0,0 +1,88 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one or more

+ * contributor license agreements. See the NOTICE file distributed with

+ * this work for additional information regarding copyright ownership.

+ * The ASF licenses this file to You 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

+ *

+ *      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 org.apache.commons.testing.junit4.io;

+

+import java.io.File;

+import java.io.IOException;

+import java.util.Objects;

+

+import org.apache.commons.io.FileUtils;

+import org.junit.Assert;

+import org.junit.rules.ExternalResource;

+import org.junit.rules.TemporaryFolder;

+

+/**

+ * Copies a file as a JUnit TestRule.

+ * 

+ * @since 1.0.0

+ */

+public class CopyFileTestRule extends ExternalResource {

+

+    /**

+     * Creates a test rule that will copy a file to a given temporary folder.

+     * 

+     * @param sourceFilePath

+     *            the file to copy.

+     * @param targetTemporaryFolder

+     *            the destination folder.

+     * @param targetFilePath

+     * @return a new test rule.

+     */

+    public static CopyFileTestRule create(final String sourceFilePath, final TemporaryFolder targetTemporaryFolder,

+            final String targetFilePath) {

+        return new CopyFileTestRule(sourceFilePath, targetTemporaryFolder, targetFilePath);

+    }

+

+    private final TemporaryFolder targetTemporaryFolder;

+    private final String targetFileName;

+    private final String sourceFilePath;

+

+    CopyFileTestRule(final String sourceFilePath, final TemporaryFolder targetTemporaryFolder,

+            final String targetFilePath) {

+        super();

+        this.sourceFilePath = Objects.requireNonNull(sourceFilePath, "sourceFilePath");

+        this.targetTemporaryFolder = Objects.requireNonNull(targetTemporaryFolder, "targetTemporaryFolder");

+        this.targetFileName = Objects.requireNonNull(targetFilePath, "targetFileName");

+    }

+

+    /*

+     * (non-Javadoc)

+     *

+     * @see org.junit.rules.ExternalResource#before()

+     */

+    @Override

+    protected void before() throws Throwable {

+        copyFile();

+    }

+

+    private void copyFile() throws IOException {

+        final File fromFile = getSourceFile();

+        final File toFile = getTargetFile();

+        FileUtils.copyFile(fromFile, toFile);

+        Assert.assertTrue(toFile.exists());

+    }

+

+    public File getSourceFile() {

+        return new File(sourceFilePath);

+    }

+

+    public File getTargetFile() {

+        return new File(targetTemporaryFolder.getRoot(), targetFileName);

+    }

+

+}

diff --git a/commons-testing-junit4/src/test/java/org/apache/commons/testing/junit4/io/CopyFileTestRuleTest.java b/commons-testing-junit4/src/test/java/org/apache/commons/testing/junit4/io/CopyFileTestRuleTest.java
new file mode 100644
index 0000000..022995f
--- /dev/null
+++ b/commons-testing-junit4/src/test/java/org/apache/commons/testing/junit4/io/CopyFileTestRuleTest.java
@@ -0,0 +1,47 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one or more

+ * contributor license agreements. See the NOTICE file distributed with

+ * this work for additional information regarding copyright ownership.

+ * The ASF licenses this file to You 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

+ *

+ *      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 org.apache.commons.testing.junit4.io;

+

+import java.io.IOException;

+import java.nio.charset.StandardCharsets;

+

+import org.apache.commons.io.FileUtils;

+import org.apache.commons.testing.junit4.RuleChainFactory;

+import org.junit.Assert;

+import org.junit.Rule;

+import org.junit.Test;

+import org.junit.rules.RuleChain;

+import org.junit.rules.TemporaryFolder;

+

+public class CopyFileTestRuleTest {

+

+    public TemporaryFolder temporaryFolder = new TemporaryFolder();

+

+    public CopyFileTestRule copyFileTestRule = CopyFileTestRule.create("src/test/resources/test.txt", temporaryFolder,

+            "test-dest.txt");

+

+    @Rule

+    public RuleChain ruleChain = RuleChainFactory.create(temporaryFolder, copyFileTestRule);

+

+    @Test

+    public void test() throws IOException {

+        Assert.assertEquals("test",

+                FileUtils.readFileToString(copyFileTestRule.getTargetFile(), StandardCharsets.UTF_8).trim());

+

+    }

+}

diff --git a/commons-testing-junit4/src/test/resources/test.txt b/commons-testing-junit4/src/test/resources/test.txt
new file mode 100644
index 0000000..77356c3
--- /dev/null
+++ b/commons-testing-junit4/src/test/resources/test.txt
@@ -0,0 +1 @@
+test

diff --git a/pom.xml b/pom.xml
index 909ad78..d784071 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,6 +71,11 @@
         <version>${junit4.version}</version>

       </dependency>

       <dependency>

+        <groupId>commons-io</groupId>

+        <artifactId>commons-io</artifactId>

+        <version>${commons-io.version}</version>

+      </dependency>

+      <dependency>

         <groupId>org.apache.commons</groupId>

         <artifactId>commons-lang3</artifactId>

         <version>${commons-lang.version}</version>

@@ -139,6 +144,7 @@
     <mongodb2.version>2.14.3</mongodb2.version>

     <mongodb3.version>3.6.1</mongodb3.version>

     <junit4.version>4.12</junit4.version>

+    <commons-io.version>2.6</commons-io.version>

     <commons-lang.version>3.7</commons-lang.version>

   </properties>