1c8b59c046895fa5b6d79f73e0b5817330fcfbfc1A. Unique TensorFlower/* Copyright 2015 The TensorFlow Authors. All Rights Reserved.
29c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur
39c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath KudlurLicensed under the Apache License, Version 2.0 (the "License");
49c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudluryou may not use this file except in compliance with the License.
59c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath KudlurYou may obtain a copy of the License at
69c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur
79c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur    http://www.apache.org/licenses/LICENSE-2.0
89c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur
99c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath KudlurUnless required by applicable law or agreed to in writing, software
109c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlurdistributed under the License is distributed on an "AS IS" BASIS,
119c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath KudlurWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
129c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath KudlurSee the License for the specific language governing permissions and
139c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlurlimitations under the License.
149c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur==============================================================================*/
159c3043ff3bf31a6a81810b4ce9e87ef936f1f529Manjunath Kudlur
16f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur#include "tensorflow/core/lib/io/path.h"
17c8eaac926c929e07ac8db69f67803a2223ff2d93Josh Levenberg#include "tensorflow/core/platform/test.h"
18f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
19f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlurnamespace tensorflow {
20f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlurnamespace io {
21f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
22f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath KudlurTEST(PathTest, JoinPath) {
23f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("/foo/bar", JoinPath("/foo", "bar"));
24f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("foo/bar", JoinPath("foo", "bar"));
25f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("foo/bar", JoinPath("foo", "/bar"));
26f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("/foo/bar", JoinPath("/foo", "/bar"));
27f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
28f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("/bar", JoinPath("", "/bar"));
29f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("bar", JoinPath("", "bar"));
30f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("/foo", JoinPath("/foo", ""));
31f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
32f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("/foo/bar/baz/blah/blink/biz",
33f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur            JoinPath("/foo/bar/baz/", "/blah/blink/biz"));
34d5d16aa43bbf635f5cf224b47cacec297d15aa95Jonathan Hseu  EXPECT_EQ("/foo/bar/baz/blah", JoinPath("/foo", "bar", "baz", "blah"));
35f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}
36f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
37f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath KudlurTEST(PathTest, IsAbsolutePath) {
38f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_FALSE(IsAbsolutePath(""));
39f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_FALSE(IsAbsolutePath("../foo"));
40f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_FALSE(IsAbsolutePath("foo"));
41f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_FALSE(IsAbsolutePath("./foo"));
42f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_FALSE(IsAbsolutePath("foo/bar/baz/"));
43f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_TRUE(IsAbsolutePath("/foo"));
44f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_TRUE(IsAbsolutePath("/foo/bar/../baz"));
45f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}
46f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
47f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath KudlurTEST(PathTest, Dirname) {
489113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_EQ("hdfs://127.0.0.1:9000/",
499113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu            Dirname("hdfs://127.0.0.1:9000/train.csv.tfrecords"));
50f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("/hello", Dirname("/hello/"));
51f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("/", Dirname("/hello"));
52f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("hello", Dirname("hello/world"));
53f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("hello", Dirname("hello/"));
54f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("", Dirname("world"));
55f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("/", Dirname("/"));
56f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("", Dirname(""));
57f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}
58f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
59f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath KudlurTEST(PathTest, Basename) {
60f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("", Basename("/hello/"));
61f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("hello", Basename("/hello"));
62f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("world", Basename("hello/world"));
63f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("", Basename("hello/"));
64f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("world", Basename("world"));
65f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("", Basename("/"));
66f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("", Basename(""));
67f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}
68f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
69f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath KudlurTEST(PathTest, Extension) {
70f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("gif", Extension("foo.gif"));
71f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("", Extension("foo."));
72f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("", Extension(""));
73f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("", Extension("/"));
74f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("", Extension("foo"));
75f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("", Extension("foo/"));
76f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("gif", Extension("/a/path/to/foo.gif"));
77f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("html", Extension("/a/path.bar/to/foo.html"));
78f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("", Extension("/a/path.bar/to/foo"));
79f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur  EXPECT_EQ("baz", Extension("/a/path.bar/to/foo.bar.baz"));
80f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}
81f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur
82857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan JainTEST(PathTest, CleanPath) {
83857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ(".", CleanPath(""));
84857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("x", CleanPath("x"));
85857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("/a/b/c/d", CleanPath("/a/b/c/d"));
86857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("/a/b/c/d/*", CleanPath("/a/b/c/d/*"));
87857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("/a/b/c/d", CleanPath("/a/b/c/d/"));
88857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("/a/b", CleanPath("/a//b"));
89857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("/a/b", CleanPath("//a//b/"));
90857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("/", CleanPath("/.."));
91857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("/", CleanPath("/././././"));
92857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("/a", CleanPath("/a/b/.."));
93857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("/", CleanPath("/a/b/../../.."));
94857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("/", CleanPath("//a//b/..////../..//"));
95857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("/x", CleanPath("//a//../x//"));
96857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("x", CleanPath("x"));
97857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("../../a/c", CleanPath("../../a/b/../c"));
98857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("../..", CleanPath("../../a/b/../c/../.."));
99857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain  EXPECT_EQ("../../bar", CleanPath("foo/../../../bar"));
100857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain}
101857fc259445fbff9a23ba1723d7f617ff40fbf05Rohan Jain
1029113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu#define EXPECT_PARSE_URI(uri, scheme, host, path)  \
1039113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  do {                                             \
1049113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    StringPiece u(uri);                            \
1059113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    StringPiece s, h, p;                           \
1069113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    ParseURI(u, &s, &h, &p);                       \
1079113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_EQ(scheme, s.ToString());               \
1089113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_EQ(host, h.ToString());                 \
1099113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_EQ(path, p.ToString());                 \
1109113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_EQ(uri, CreateURI(scheme, host, path)); \
1119113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_LE(u.begin(), s.begin());               \
1129113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_GE(u.end(), s.begin());                 \
1139113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_LE(u.begin(), s.end());                 \
1149113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_GE(u.end(), s.end());                   \
1159113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_LE(u.begin(), h.begin());               \
1169113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_GE(u.end(), h.begin());                 \
1179113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_LE(u.begin(), h.end());                 \
1189113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_GE(u.end(), h.end());                   \
1199113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_LE(u.begin(), p.begin());               \
1209113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_GE(u.end(), p.begin());                 \
1219113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_LE(u.begin(), p.end());                 \
1229113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu    EXPECT_GE(u.end(), p.end());                   \
1239113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  } while (0)
1249113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu
1259113b25790bfc4e2da1876a78d74382f776bf02aJonathan HseuTEST(PathTest, CreateParseURI) {
1269113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI("http://foo", "http", "foo", "");
1279113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI("/encrypted/://foo", "", "", "/encrypted/://foo");
1289113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI("/usr/local/foo", "", "", "/usr/local/foo");
1299113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI("file:///usr/local/foo", "file", "", "/usr/local/foo");
1309113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI("local.file:///usr/local/foo", "local.file", "",
1319113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu                   "/usr/local/foo");
1329113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI("a-b:///foo", "", "", "a-b:///foo");
1339113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI(":///foo", "", "", ":///foo");
1349113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI("9dfd:///foo", "", "", "9dfd:///foo");
1359113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI("file:", "", "", "file:");
1369113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI("file:/", "", "", "file:/");
1379113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI("hdfs://localhost:8020/path/to/file", "hdfs",
1389113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu                   "localhost:8020", "/path/to/file");
1399113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI("hdfs://localhost:8020", "hdfs", "localhost:8020", "");
1409113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu  EXPECT_PARSE_URI("hdfs://localhost:8020/", "hdfs", "localhost:8020", "/");
1419113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu}
1429113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu#undef EXPECT_PARSE_URI
1439113b25790bfc4e2da1876a78d74382f776bf02aJonathan Hseu
144f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}  // namespace io
145f41959ccb2d9d4c722fe8fc3351401d53bcf490Manjunath Kudlur}  // namespace tensorflow
146