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