1d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// found in the LICENSE file. 4d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 5d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "base/strings/string_util.h" 6d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "base/strings/utf_string_conversions.h" 7d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "build/build_config.h" 8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 9d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/filesystem_utils.h" 10d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 11d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochTEST(FilesystemUtils, FileExtensionOffset) { 12d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ(std::string::npos, FindExtensionOffset("")); 13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ(std::string::npos, FindExtensionOffset("foo/bar/baz")); 14d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ(4u, FindExtensionOffset("foo.")); 15d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ(4u, FindExtensionOffset("f.o.bar")); 16d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ(std::string::npos, FindExtensionOffset("foo.bar/")); 17d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ(std::string::npos, FindExtensionOffset("foo.bar/baz")); 18d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 19d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 20d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochTEST(FilesystemUtils, FindExtension) { 21d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string input; 22d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("", FindExtension(&input).as_string()); 23d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "foo/bar/baz"; 24d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("", FindExtension(&input).as_string()); 25d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "foo."; 26d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("", FindExtension(&input).as_string()); 27d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "f.o.bar"; 28d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("bar", FindExtension(&input).as_string()); 29d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "foo.bar/"; 30d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("", FindExtension(&input).as_string()); 31d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "foo.bar/baz"; 32d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("", FindExtension(&input).as_string()); 33d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 34d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 35d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochTEST(FilesystemUtils, FindFilenameOffset) { 36d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ(0u, FindFilenameOffset("")); 37d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ(0u, FindFilenameOffset("foo")); 38d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ(4u, FindFilenameOffset("foo/")); 39d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ(4u, FindFilenameOffset("foo/bar")); 40d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 41d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 42d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochTEST(FilesystemUtils, RemoveFilename) { 43d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string s; 44d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 45d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch RemoveFilename(&s); 46d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_STREQ("", s.c_str()); 47d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 48d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch s = "foo"; 49d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch RemoveFilename(&s); 50d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_STREQ("", s.c_str()); 51d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 52d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch s = "/"; 53d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch RemoveFilename(&s); 54d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_STREQ("/", s.c_str()); 55d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 56d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch s = "foo/bar"; 57d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch RemoveFilename(&s); 58d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_STREQ("foo/", s.c_str()); 59d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 60d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch s = "foo/bar/baz.cc"; 61d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch RemoveFilename(&s); 62d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_STREQ("foo/bar/", s.c_str()); 63d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 64d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 65d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochTEST(FilesystemUtils, FindDir) { 66d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string input; 67d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("", FindDir(&input)); 68d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "/"; 69d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("/", FindDir(&input)); 70d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "foo/"; 71d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("foo/", FindDir(&input)); 72d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "foo/bar/baz"; 73d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("foo/bar/", FindDir(&input)); 74d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 75d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 76d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochTEST(FilesystemUtils, InvertDir) { 77d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_TRUE(InvertDir(SourceDir()) == ""); 78d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_TRUE(InvertDir(SourceDir("/")) == ""); 79d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_TRUE(InvertDir(SourceDir("//")) == ""); 80d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 81d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_TRUE(InvertDir(SourceDir("//foo/bar")) == "../../"); 82d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_TRUE(InvertDir(SourceDir("/foo/bar/")) == "../../"); 83d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 84d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 85d3868032626d59662ff73b372b5d584c1d144c53Ben MurdochTEST(FilesystemUtils, NormalizePath) { 86d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string input; 87d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 88d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 89d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("", input); 90d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 91d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "foo/bar.txt"; 92d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 93d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("foo/bar.txt", input); 94d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 95d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "."; 96d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 97d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("", input); 98d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 99d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = ".."; 100d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 101d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("..", input); 102d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 103d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "foo//bar"; 104d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 105d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("foo/bar", input); 106d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 107d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "//foo"; 108d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 109d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("//foo", input); 110d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 111d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "foo/..//bar"; 112d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 113d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("bar", input); 114d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 115d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "foo/../../bar"; 116d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 117d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("../bar", input); 118d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 119d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "/../foo"; // Don't go aboe the root dir. 120d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 121d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("/foo", input); 122d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 123d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "//../foo"; // Don't go aboe the root dir. 124d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 125d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("//foo", input); 126d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 127d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "../foo"; 128d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 129d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("../foo", input); 130d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 131d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = ".."; 132d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 133d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("..", input); 134d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 135d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "./././."; 136d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 137d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("", input); 138d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 139d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "../../.."; 140d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 141d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("../../..", input); 142d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 143d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch input = "../"; 144d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch NormalizePath(&input); 145d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch EXPECT_EQ("../", input); 146d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} 147