You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuweni.apache.org by to...@apache.org on 2019/07/09 13:39:57 UTC
[incubator-tuweni] 03/04: Remove the jar file from testing,
creating it on the fly along with test resources
This is an automated email from the ASF dual-hosted git repository.
toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git
commit 710c7e7aaf8ba72f22976ab30e5f0b789dbad268
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Fri Jun 28 10:47:49 2019 +0200
Remove the jar file from testing, creating it on the fly along with test resources
---
build.gradle | 6 --
.../main/java/org/apache/tuweni/io/file/Files.java | 35 ++++++++-
.../java/org/apache/tuweni/io/ResourcesTest.java | 82 ++++++++++++++++-----
.../java/org/apache/tuweni/io/file/FilesTest.java | 11 ++-
.../io/file/resourceresolver/subdir/test3.yaml | 0
.../tuweni/io/file/resourceresolver/test1.txt | 0
.../tuweni/io/file/resourceresolver/test2.txt | 0
.../resources/org/apache/tuweni/io/file/test.txt | 3 -
io/src/test/resources/resourceresolver-test.jar | Bin 2362 -> 0 bytes
9 files changed, 107 insertions(+), 30 deletions(-)
diff --git a/build.gradle b/build.gradle
index 12bd45b..abc8fa4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -110,18 +110,12 @@ if (file('.git').exists()) {
'.idea/**',
'gradlew.bat',
'gradlew',
- 'io/src/test/resources/org/apache/tuweni/io/file/**',
'toml/src/test/resources/**',
'.gitattributes',
- 'test1.txt',
- 'test2.txt',
- 'test3.yaml',
'.*\\.kotlin_module',
'example-v0.4.0.toml',
'hard_example.toml',
'toml-v0.5.0-spec-example.toml',
- 'test.txt',
- 'resourceresolver-test.jar'
])
return list
}
diff --git a/io/src/main/java/org/apache/tuweni/io/file/Files.java b/io/src/main/java/org/apache/tuweni/io/file/Files.java
index f65a81e..277b987 100644
--- a/io/src/main/java/org/apache/tuweni/io/file/Files.java
+++ b/io/src/main/java/org/apache/tuweni/io/file/Files.java
@@ -94,11 +94,26 @@ public final class Files {
* @throws IOException If an I/O error occurs.
*/
public static Path copyResource(String resourceName, Path destination, OpenOption... options) throws IOException {
+ return copyResource(Files.class.getClassLoader(), resourceName, destination, options);
+ }
+
+ /**
+ * Copies the content of a resource to a file.
+ *
+ * @param classloader The class loader of the resource.
+ * @param resourceName The resource name.
+ * @param destination The destination file.
+ * @param options Options specifying how the destination file should be opened.
+ * @return The destination file.
+ * @throws IOException If an I/O error occurs.
+ */
+ public static Path copyResource(ClassLoader classloader, String resourceName, Path destination, OpenOption... options)
+ throws IOException {
requireNonNull(resourceName);
requireNonNull(destination);
try (OutputStream out = java.nio.file.Files.newOutputStream(destination, options)) {
- copyResource(resourceName, out);
+ copyResource(classloader, resourceName, out);
}
return destination;
}
@@ -112,7 +127,23 @@ public final class Files {
* @throws IOException If an I/O error occurs.
*/
public static long copyResource(String resourceName, OutputStream out) throws IOException {
- try (InputStream in = Files.class.getClassLoader().getResourceAsStream(resourceName)) {
+ return copyResource(Files.class.getClassLoader(), resourceName, out);
+ }
+
+ /**
+ * Copies the content of a resource to an output stream.
+ *
+ * @param classloader The class loader.
+ * @param resourceName The resource name.
+ * @param out The output stream.
+ * @return The total bytes written.
+ * @throws IOException If an I/O error occurs.
+ */
+ public static long copyResource(ClassLoader classloader, String resourceName, OutputStream out) throws IOException {
+ try (InputStream in = classloader.getResourceAsStream(resourceName)) {
+ if (in == null) {
+ throw new IllegalArgumentException(resourceName + " could not be accessed");
+ }
long total = 0L;
byte[] buf = new byte[4096];
int n;
diff --git a/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java b/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
index 76cbfeb..991b91e 100644
--- a/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
+++ b/io/src/test/java/org/apache/tuweni/io/ResourcesTest.java
@@ -14,15 +14,31 @@ package org.apache.tuweni.io;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.apache.tuweni.junit.TempDirectory;
+import org.apache.tuweni.junit.TempDirectoryExtension;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.net.URI;
import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+@ExtendWith(TempDirectoryExtension.class)
class ResourcesTest {
@Test
@@ -37,31 +53,63 @@ class ResourcesTest {
assertEquals(Arrays.asList("", "**/*.bar"), Arrays.asList(Resources.globRoot("**/*.bar")));
}
+ private void copy(Path source, Path dest) {
+ try {
+ if (!dest.toString().equals("")) {
+ Files.copy(source, dest, StandardCopyOption.REPLACE_EXISTING);
+ }
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+
@Test
- @SuppressWarnings("MustBeClosedChecker")
- void shouldIterateResourcesOnFileSystemAndInJars() throws Exception {
- List<URL> all = Resources.find("org/apache/tuweni/io/file/resourceresolver/**").collect(Collectors.toList());
- String version = System.getProperty("java.version");
- // Java 8 captures the root entry of the folder in the jar.
- if (version.startsWith("1.")) {
- assertEquals(13, all.size(), () -> describeExpectation(13, all));
- } else {
- assertEquals(12, all.size(), () -> describeExpectation(12, all));
+ @SuppressWarnings({"MustBeClosedChecker", "StreamResourceLeak"})
+ void shouldIterateResourcesOnFileSystemAndInJars(@TempDirectory Path folder) throws Exception {
+ Files.createDirectories(folder.resolve("org/apache/tuweni/io/file/resourceresolver"));
+ Files.createDirectory(folder.resolve("org/apache/tuweni/io/file/resourceresolver/subdir"));
+ Files.createFile(folder.resolve("org/apache/tuweni/io/file/resourceresolver/test.txt"));
+ Files.createFile(folder.resolve("org/apache/tuweni/io/file/resourceresolver/test1.txt"));
+ Files.createFile(folder.resolve("org/apache/tuweni/io/file/resourceresolver/test2.txt"));
+ Files.createFile(folder.resolve("org/apache/tuweni/io/file/resourceresolver/subdir/test3.yaml"));
+
+ Files.createDirectory(folder.resolve("org/apache/tuweni/io/file/resourceresolver/anotherdir"));
+ Files.createFile(folder.resolve("org/apache/tuweni/io/file/resourceresolver/anotherdir/test6.yaml"));
+ Files.createFile(folder.resolve("org/apache/tuweni/io/file/resourceresolver/anotherdir/test5.txt"));
+
+ URI jarFile = URI.create("jar:" + folder.resolve("resourceresolvertest.jar").toUri());
+
+ try (FileSystem zipfs = FileSystems.newFileSystem(jarFile, Collections.singletonMap("create", "true"));) {
+ Files.walk(folder).forEach(source -> copy(source, zipfs.getPath(folder.relativize(source).toString())));
}
+ Files
+ .walk(folder.resolve("org/apache/tuweni/io/file/resourceresolver/anotherdir"))
+ .sorted(Comparator.reverseOrder())
+ .map(Path::toFile)
+ .forEach(File::delete);
+
+ URLClassLoader classLoader = new URLClassLoader(
+ new URL[] {
+ new URL("file:" + folder.toString() + "/"),
+ new URL("file:" + folder.resolve("resourceresolvertest.jar").toString())});
+ List<URL> all =
+ Resources.find(classLoader, "/org/apache/tuweni/io/file/resourceresolver/**").collect(Collectors.toList());
+
+ assertEquals(14, all.size(), () -> describeExpectation(14, all));
- List<URL> txtFiles = Resources.find("org/**/test*.txt").collect(Collectors.toList());
- assertEquals(6, txtFiles.size(), () -> describeExpectation(6, txtFiles));
+ List<URL> txtFiles = Resources.find(classLoader, "org/**/test*.txt").collect(Collectors.toList());
+ assertEquals(7, txtFiles.size(), () -> describeExpectation(7, txtFiles));
- List<URL> txtFilesFromRoot = Resources.find("/**/test?.txt").collect(Collectors.toList());
+ List<URL> txtFilesFromRoot = Resources.find(classLoader, "/**/test?.txt").collect(Collectors.toList());
assertEquals(5, txtFilesFromRoot.size(), () -> describeExpectation(5, txtFilesFromRoot));
- List<URL> txtFilesFromRoot2 = Resources.find("//**/test*.txt").collect(Collectors.toList());
- assertEquals(6, txtFilesFromRoot2.size(), () -> describeExpectation(6, txtFilesFromRoot2));
+ List<URL> txtFilesFromRoot2 = Resources.find(classLoader, "//**/test*.txt").collect(Collectors.toList());
+ assertEquals(7, txtFilesFromRoot2.size(), () -> describeExpectation(7, txtFilesFromRoot2));
- List<URL> txtFilesFromRoot3 = Resources.find("///**/test*.txt").collect(Collectors.toList());
- assertEquals(6, txtFilesFromRoot3.size(), () -> describeExpectation(6, txtFilesFromRoot3));
+ List<URL> txtFilesFromRoot3 = Resources.find(classLoader, "///**/test*.txt").collect(Collectors.toList());
+ assertEquals(7, txtFilesFromRoot3.size(), () -> describeExpectation(7, txtFilesFromRoot3));
- List<URL> txtFilesInDir = Resources.find("**/anotherdir/*.txt").collect(Collectors.toList());
+ List<URL> txtFilesInDir = Resources.find(classLoader, "**/anotherdir/*.txt").collect(Collectors.toList());
assertEquals(1, txtFilesInDir.size(), () -> describeExpectation(1, txtFilesInDir));
}
diff --git a/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java b/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java
index 5695b86..7da0ccd 100644
--- a/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java
+++ b/io/src/test/java/org/apache/tuweni/io/file/FilesTest.java
@@ -21,6 +21,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import org.apache.tuweni.junit.TempDirectory;
import org.apache.tuweni.junit.TempDirectoryExtension;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -56,8 +59,12 @@ class FilesTest {
@Test
void canCopyResources(@TempDirectory Path tempDir) throws Exception {
- Path file = copyResource("org/apache/tuweni/io/file/test.txt", tempDir.resolve("test.txt"));
+ Files.createDirectories(tempDir.resolve("org/something"));
+ Files.write(tempDir.resolve("org/something/test.txt"), "foo".getBytes(StandardCharsets.UTF_8));
+ URLClassLoader classLoader = new URLClassLoader(new URL[] {new URL("file:" + tempDir.toString() + "/")});
+
+ Path file = copyResource(classLoader, "org/something/test.txt", tempDir.resolve("test.txt"));
assertTrue(Files.exists(file));
- assertEquals(81, Files.size(file));
+ assertEquals(3, Files.size(file));
}
}
diff --git a/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/subdir/test3.yaml b/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/subdir/test3.yaml
deleted file mode 100644
index e69de29..0000000
diff --git a/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/test1.txt b/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/test1.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/test2.txt b/io/src/test/resources/org/apache/tuweni/io/file/resourceresolver/test2.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/io/src/test/resources/org/apache/tuweni/io/file/test.txt b/io/src/test/resources/org/apache/tuweni/io/file/test.txt
deleted file mode 100644
index cd3d974..0000000
--- a/io/src/test/resources/org/apache/tuweni/io/file/test.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-ABCDEFGHIJKLMNOPQRSTUVWXYZ
-abcdefghijklmnopqrstuvwxyz
-01234567890123345678901234
diff --git a/io/src/test/resources/resourceresolver-test.jar b/io/src/test/resources/resourceresolver-test.jar
deleted file mode 100644
index b2226da..0000000
Binary files a/io/src/test/resources/resourceresolver-test.jar and /dev/null differ
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org