aboutsummaryrefslogtreecommitdiff
path: root/jimfs/src/test/java/com/google/common/jimfs/WindowsPathTypeTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'jimfs/src/test/java/com/google/common/jimfs/WindowsPathTypeTest.java')
-rw-r--r--jimfs/src/test/java/com/google/common/jimfs/WindowsPathTypeTest.java222
1 files changed, 222 insertions, 0 deletions
diff --git a/jimfs/src/test/java/com/google/common/jimfs/WindowsPathTypeTest.java b/jimfs/src/test/java/com/google/common/jimfs/WindowsPathTypeTest.java
new file mode 100644
index 0000000..2da1280
--- /dev/null
+++ b/jimfs/src/test/java/com/google/common/jimfs/WindowsPathTypeTest.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed 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 com.google.common.jimfs;
+
+import static com.google.common.jimfs.PathType.windows;
+import static com.google.common.jimfs.PathTypeTest.assertParseResult;
+import static com.google.common.jimfs.PathTypeTest.assertUriRoundTripsCorrectly;
+import static com.google.common.jimfs.PathTypeTest.fileSystemUri;
+import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.fail;
+
+import com.google.common.collect.ImmutableList;
+import java.net.URI;
+import java.nio.file.InvalidPathException;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * Tests for {@link WindowsPathType}.
+ *
+ * @author Colin Decker
+ */
+@RunWith(JUnit4.class)
+public class WindowsPathTypeTest {
+
+ @Test
+ public void testWindows() {
+ PathType windows = PathType.windows();
+ assertThat(windows.getSeparator()).isEqualTo("\\");
+ assertThat(windows.getOtherSeparators()).isEqualTo("/");
+
+ // "C:\\foo\bar" results from "C:\", "foo", "bar" passed to getPath
+ PathType.ParseResult path = windows.parsePath("C:\\\\foo\\bar");
+ assertParseResult(path, "C:\\", "foo", "bar");
+ assertThat(windows.toString(path.root(), path.names())).isEqualTo("C:\\foo\\bar");
+
+ PathType.ParseResult path2 = windows.parsePath("foo/bar/");
+ assertParseResult(path2, null, "foo", "bar");
+ assertThat(windows.toString(path2.root(), path2.names())).isEqualTo("foo\\bar");
+
+ PathType.ParseResult path3 = windows.parsePath("hello world/foo/bar");
+ assertParseResult(path3, null, "hello world", "foo", "bar");
+ assertThat(windows.toString(null, path3.names())).isEqualTo("hello world\\foo\\bar");
+ }
+
+ @Test
+ public void testWindows_relativePathsWithDriveRoot_unsupported() {
+ try {
+ windows().parsePath("C:");
+ fail();
+ } catch (InvalidPathException expected) {
+ }
+
+ try {
+ windows().parsePath("C:foo\\bar");
+ fail();
+ } catch (InvalidPathException expected) {
+ }
+ }
+
+ @Test
+ public void testWindows_absolutePathOnCurrentDrive_unsupported() {
+ try {
+ windows().parsePath("\\foo\\bar");
+ fail();
+ } catch (InvalidPathException expected) {
+ }
+
+ try {
+ windows().parsePath("\\");
+ fail();
+ } catch (InvalidPathException expected) {
+ }
+ }
+
+ @Test
+ public void testWindows_uncPaths() {
+ PathType windows = PathType.windows();
+ PathType.ParseResult path = windows.parsePath("\\\\host\\share");
+ assertParseResult(path, "\\\\host\\share\\");
+
+ path = windows.parsePath("\\\\HOST\\share\\foo\\bar");
+ assertParseResult(path, "\\\\HOST\\share\\", "foo", "bar");
+
+ try {
+ windows.parsePath("\\\\");
+ fail();
+ } catch (InvalidPathException expected) {
+ assertThat(expected.getInput()).isEqualTo("\\\\");
+ assertThat(expected.getReason()).isEqualTo("UNC path is missing hostname");
+ }
+
+ try {
+ windows.parsePath("\\\\host");
+ fail();
+ } catch (InvalidPathException expected) {
+ assertThat(expected.getInput()).isEqualTo("\\\\host");
+ assertThat(expected.getReason()).isEqualTo("UNC path is missing sharename");
+ }
+
+ try {
+ windows.parsePath("\\\\host\\");
+ fail();
+ } catch (InvalidPathException expected) {
+ assertThat(expected.getInput()).isEqualTo("\\\\host\\");
+ assertThat(expected.getReason()).isEqualTo("UNC path is missing sharename");
+ }
+
+ try {
+ windows.parsePath("//host");
+ fail();
+ } catch (InvalidPathException expected) {
+ assertThat(expected.getInput()).isEqualTo("//host");
+ assertThat(expected.getReason()).isEqualTo("UNC path is missing sharename");
+ }
+ }
+
+ @Test
+ public void testWindows_illegalNames() {
+ try {
+ windows().parsePath("foo<bar");
+ fail();
+ } catch (InvalidPathException expected) {
+ }
+
+ try {
+ windows().parsePath("foo?");
+ fail();
+ } catch (InvalidPathException expected) {
+ }
+
+ try {
+ windows().parsePath("foo ");
+ fail();
+ } catch (InvalidPathException expected) {
+ }
+
+ try {
+ windows().parsePath("foo \\bar");
+ fail();
+ } catch (InvalidPathException expected) {
+ }
+ }
+
+ @Test
+ public void testWindows_toUri_normal() {
+ URI fileUri =
+ PathType.windows().toUri(fileSystemUri, "C:\\", ImmutableList.of("foo", "bar"), false);
+ assertThat(fileUri.toString()).isEqualTo("jimfs://foo/C:/foo/bar");
+ assertThat(fileUri.getPath()).isEqualTo("/C:/foo/bar");
+
+ URI directoryUri =
+ PathType.windows().toUri(fileSystemUri, "C:\\", ImmutableList.of("foo", "bar"), true);
+ assertThat(directoryUri.toString()).isEqualTo("jimfs://foo/C:/foo/bar/");
+ assertThat(directoryUri.getPath()).isEqualTo("/C:/foo/bar/");
+
+ URI rootUri = PathType.windows().toUri(fileSystemUri, "C:\\", ImmutableList.<String>of(), true);
+ assertThat(rootUri.toString()).isEqualTo("jimfs://foo/C:/");
+ assertThat(rootUri.getPath()).isEqualTo("/C:/");
+ }
+
+ @Test
+ public void testWindows_toUri_unc() {
+ URI fileUri =
+ PathType.windows()
+ .toUri(fileSystemUri, "\\\\host\\share\\", ImmutableList.of("foo", "bar"), false);
+ assertThat(fileUri.toString()).isEqualTo("jimfs://foo//host/share/foo/bar");
+ assertThat(fileUri.getPath()).isEqualTo("//host/share/foo/bar");
+
+ URI rootUri =
+ PathType.windows()
+ .toUri(fileSystemUri, "\\\\host\\share\\", ImmutableList.<String>of(), true);
+ assertThat(rootUri.toString()).isEqualTo("jimfs://foo//host/share/");
+ assertThat(rootUri.getPath()).isEqualTo("//host/share/");
+ }
+
+ @Test
+ public void testWindows_toUri_escaping() {
+ URI uri =
+ PathType.windows()
+ .toUri(fileSystemUri, "C:\\", ImmutableList.of("Users", "foo", "My Documents"), true);
+ assertThat(uri.toString()).isEqualTo("jimfs://foo/C:/Users/foo/My%20Documents/");
+ assertThat(uri.getRawPath()).isEqualTo("/C:/Users/foo/My%20Documents/");
+ assertThat(uri.getPath()).isEqualTo("/C:/Users/foo/My Documents/");
+ }
+
+ @Test
+ public void testWindows_uriRoundTrips_normal() {
+ assertUriRoundTripsCorrectly(PathType.windows(), "C:\\");
+ assertUriRoundTripsCorrectly(PathType.windows(), "C:\\foo");
+ assertUriRoundTripsCorrectly(PathType.windows(), "C:\\foo\\bar\\baz");
+ assertUriRoundTripsCorrectly(PathType.windows(), "C:\\Users\\foo\\My Documents\\");
+ assertUriRoundTripsCorrectly(PathType.windows(), "C:\\foo bar");
+ assertUriRoundTripsCorrectly(PathType.windows(), "C:\\foo bar\\baz");
+ }
+
+ @Test
+ public void testWindows_uriRoundTrips_unc() {
+ assertUriRoundTripsCorrectly(PathType.windows(), "\\\\host\\share");
+ assertUriRoundTripsCorrectly(PathType.windows(), "\\\\host\\share\\");
+ assertUriRoundTripsCorrectly(PathType.windows(), "\\\\host\\share\\foo");
+ assertUriRoundTripsCorrectly(PathType.windows(), "\\\\host\\share\\foo\\bar\\baz");
+ assertUriRoundTripsCorrectly(PathType.windows(), "\\\\host\\share\\Users\\foo\\My Documents\\");
+ assertUriRoundTripsCorrectly(PathType.windows(), "\\\\host\\share\\foo bar");
+ assertUriRoundTripsCorrectly(PathType.windows(), "\\\\host\\share\\foo bar\\baz");
+ }
+}