You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2020/09/26 21:45:22 UTC
[commons-vfs] branch master updated: Add FileObject.getPath().
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-vfs.git
The following commit(s) were added to refs/heads/master by this push:
new 0fde91c Add FileObject.getPath().
0fde91c is described below
commit 0fde91c3026856f12a9f0ddbe5f8b6dd3b6f4406
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Sep 26 17:45:18 2020 -0400
Add FileObject.getPath().
---
.../java/org/apache/commons/vfs2/FileObject.java | 12 +++
.../org/apache/commons/vfs2/test/PathTests.java | 117 +++++++++++++++++++++
src/changes/changes.xml | 3 +
3 files changed, 132 insertions(+)
diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileObject.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileObject.java
index c5feba8..e09d327 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileObject.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/FileObject.java
@@ -19,6 +19,8 @@ package org.apache.commons.vfs2;
import java.io.Closeable;
import java.net.URI;
import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.List;
import org.apache.commons.vfs2.operations.FileOperations;
@@ -302,6 +304,16 @@ public interface FileObject extends Comparable<FileObject>, Iterable<FileObject>
}
/**
+ * Returns a Path representing this file.
+ *
+ * @return the Path for the file.
+ * @since 2.7.0
+ */
+ default Path getPath() {
+ return Paths.get(getURI());
+ }
+
+ /**
* Returns a URL representing this file.
*
* @return the URL for the file.
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/test/PathTests.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/test/PathTests.java
new file mode 100644
index 0000000..f2c6b03
--- /dev/null
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/test/PathTests.java
@@ -0,0 +1,117 @@
+/*
+ * 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.vfs2.test;
+
+import java.net.URI;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.apache.commons.vfs2.Capability;
+import org.apache.commons.vfs2.FileName;
+import org.apache.commons.vfs2.FileObject;
+import org.apache.commons.vfs2.FileSystemException;
+import org.apache.commons.vfs2.FileSystemOptions;
+import org.junit.Test;
+
+/**
+ * Path test cases for providers.
+ */
+public class PathTests extends AbstractProviderTestCase {
+
+ /**
+ * Returns the capabilities required by the tests of this test case. The tests are not run if the provider being
+ * tested does not support all the required capabilities. Return null or an empty array to always run the tests.
+ */
+ @Override
+ protected Capability[] getRequiredCaps() {
+ return new Capability[] {Capability.URI};
+ }
+
+ /**
+ * Tests resolution of absolute URI.
+ */
+ public void testAbsoluteURI() throws Exception {
+ final FileObject readFolder = getReadFolder();
+
+ // Try fetching base folder again by its Path
+ final String pathStr = readFolder.getPath().toString();
+ try (FileObject fileObject = getManager().resolveFile(pathStr,
+ readFolder.getFileSystem().getFileSystemOptions())) {
+ assertSame("file object", readFolder, fileObject);
+ }
+
+ // Try fetching the filesystem root by its Path
+ final Path rootPath = Paths.get(readFolder.getName().getRootURI());
+ try (FileObject fileObject = getManager().resolveFile(rootPath.toString(),
+ readFolder.getFileSystem().getFileSystemOptions())) {
+ assertSame(readFolder.getFileSystem().getRoot(), fileObject);
+ assertEquals(rootPath, Paths.get(fileObject.getName().getRootURI()));
+ assertEquals(rootPath, fileObject.getName().getPath());
+ assertEquals(FileName.ROOT_PATH, fileObject.getName().getPath());
+ }
+ }
+
+ @Test
+ public void testGetPath() throws Exception {
+ try (final FileObject fileObject = getReadFolder().resolveFile("some-dir/")) {
+ final Path path = fileObject.getPath();
+
+ // FileName#getURI() returns a String, not a URI.
+ assertEquals(Paths.get(fileObject.getName().getURI()).toString(), path.toString());
+ assertEquals(Paths.get(fileObject.getName().getURI()), path);
+
+ assertEquals(fileObject.getPath().toString(), fileObject.getURI().toString());
+ }
+ }
+
+ @Test
+ public void testReservedCharacterSpace() throws FileSystemException {
+ try (final FileObject fileObject = getReadFolder().resolveFile("file with spaces.txt")) {
+ final Path path = fileObject.getPath();
+ final String string = path.toString();
+ assertTrue(string, string.contains("file%20with%20spaces.txt"));
+ }
+ try (final FileObject fileObject = getReadFolder().resolveFile("file%20with%20spaces.txt")) {
+ final Path path = fileObject.getPath();
+ final String string = path.toString();
+ assertTrue(string, string.contains("file%20with%20spaces.txt"));
+ }
+ }
+
+ /**
+ * Tests content.
+ */
+ @Test
+ public void testURIContentProvider() throws Exception {
+ // Test non-empty file
+ try (final FileObject fileObject = getReadFolder().resolveFile("file1.txt")) {
+ assertTrue(fileObject.exists());
+
+ final Path path = fileObject.getPath();
+ final String pathStr = path.toString();
+ final FileSystemOptions options = getReadFolder().getFileSystem().getFileSystemOptions();
+
+ try (final FileObject f1 = getManager().resolveFile(pathStr, options);
+ final FileObject f2 = getManager().resolveFile(pathStr, options)) {
+
+ assertEquals("Two files resolved by URI must be equals on " + pathStr, f1, f2);
+ assertSame("Resolving two times should not produce new filesystem on " + pathStr, f1.getFileSystem(),
+ f2.getFileSystem());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 9c7895c..1ee0b48 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -113,6 +113,9 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="ggregory" due-to="Gary Gregory" type="add">
Add FileObject.getURI().
</action>
+ <action dev="ggregory" due-to="Gary Gregory" type="add">
+ Add FileObject.getPath().
+ </action>
<!-- UPDATES -->
<action issue="VFS-755" dev="ggregory" due-to="Gary Gregory" type="update">
Update org.apache.httpcomponents:httpclient from 4.5.10 to 4.5.11.