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