This is an automated email from the ASF dual-hosted git repository. toulmean pushed a commit to branch 0.8 in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git
commit b1173925bd5dd0cfd9afbd3abde097914657a3b4 Author: Antoine Toulme <[email protected]> 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 2351b90..d6f00f5 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: [email protected] For additional commands, e-mail: [email protected]
