diff options
author | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-03-05 04:32:40 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-03-05 04:32:40 +0000 |
commit | e50b3b756101b544da2b0d62041d91547ce14a00 (patch) | |
tree | f8cbc802a806455c5fdfeab7f696c63641b9f9f5 /jimfs/src/test/java/com/google/common/jimfs/WindowsPathTypeTest.java | |
parent | 68591711a9034281d5fe11fc7a30e535bbce125c (diff) | |
parent | c5f71e95df2f3189f2b68140ebac0c76a238190f (diff) | |
download | jimfs-e50b3b756101b544da2b0d62041d91547ce14a00.tar.gz |
Initial merge with upstream am: cef92d673c am: c5f71e95df
Change-Id: I78d1f8b680646deee89918ad5ff43a8615945c35
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.java | 222 |
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"); + } +} |