blob: 2da1280a4774f15eeb0869b3d95ebb0dde9a646d [file] [log] [blame]
/*
* 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");
}
}