xref: /aosp_15_r20/external/cronet/base/files/safe_base_name_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2021 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/files/safe_base_name.h"
6 
7 #include "testing/gtest/include/gtest/gtest.h"
8 
9 namespace base {
10 
TEST(SafeBaseNameTest,Basic)11 TEST(SafeBaseNameTest, Basic) {
12   std::optional<SafeBaseName> basename(SafeBaseName::Create(FilePath()));
13   EXPECT_TRUE(basename.has_value());
14   EXPECT_TRUE(basename->path().empty());
15 
16   std::optional<SafeBaseName> basename2(
17       SafeBaseName::Create(FILE_PATH_LITERAL("bar")));
18   EXPECT_TRUE(basename2);
19   EXPECT_EQ(basename2->path(), FilePath(FILE_PATH_LITERAL("bar")));
20 }
21 
22 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
TEST(SafeBaseNameTest,WinRoot)23 TEST(SafeBaseNameTest, WinRoot) {
24   std::optional<SafeBaseName> basename(
25       SafeBaseName::Create(FILE_PATH_LITERAL("C:\\foo\\bar")));
26   EXPECT_TRUE(basename.has_value());
27   EXPECT_EQ(basename->path(), FilePath(FILE_PATH_LITERAL("bar")));
28 
29   basename = SafeBaseName::Create(FILE_PATH_LITERAL("C:\\"));
30   EXPECT_FALSE(basename.has_value());
31 }
32 #else
TEST(SafeBaseNameTest,Root)33 TEST(SafeBaseNameTest, Root) {
34   std::optional<SafeBaseName> basename(
35       SafeBaseName::Create(FilePath(FILE_PATH_LITERAL("/"))));
36   EXPECT_FALSE(basename.has_value());
37 }
38 #endif  // FILE_PATH_USES_WIN_SEPARATORS
39 
TEST(SafeBaseNameTest,Separators)40 TEST(SafeBaseNameTest, Separators) {
41   std::optional<SafeBaseName> basename(
42       SafeBaseName::Create(FILE_PATH_LITERAL("/foo/bar")));
43   EXPECT_TRUE(basename.has_value());
44   EXPECT_EQ(basename->path(), FilePath(FILE_PATH_LITERAL("bar")));
45 
46   basename = SafeBaseName::Create(FILE_PATH_LITERAL("/a/b/c/"));
47   EXPECT_TRUE(basename.has_value());
48   EXPECT_EQ(basename->path(), FilePath(FILE_PATH_LITERAL("c")));
49 
50   basename = SafeBaseName::Create(FILE_PATH_LITERAL("/a/b/c/."));
51   EXPECT_TRUE(basename.has_value());
52   EXPECT_EQ(basename->path(), FilePath(FILE_PATH_LITERAL(".")));
53 
54   basename = SafeBaseName::Create(FILE_PATH_LITERAL("/a/b/c/.."));
55   EXPECT_FALSE(basename.has_value());
56 
57   basename = SafeBaseName::Create(FILE_PATH_LITERAL("a/b/c"));
58   EXPECT_TRUE(basename.has_value());
59   EXPECT_EQ(basename->path(), FilePath(FILE_PATH_LITERAL("c")));
60 
61   basename = SafeBaseName::Create(FILE_PATH_LITERAL("a/b/."));
62   EXPECT_TRUE(basename.has_value());
63   EXPECT_EQ(basename->path(), FilePath(FILE_PATH_LITERAL(".")));
64 
65   basename = SafeBaseName::Create(FILE_PATH_LITERAL("a/b/.."));
66   EXPECT_FALSE(basename.has_value());
67 
68   basename = SafeBaseName::Create(FILE_PATH_LITERAL("a/../"));
69   EXPECT_FALSE(basename.has_value());
70 
71   basename = SafeBaseName::Create(FILE_PATH_LITERAL("a/.."));
72   EXPECT_FALSE(basename.has_value());
73 
74   basename = SafeBaseName::Create(FILE_PATH_LITERAL("../bar"));
75   EXPECT_TRUE(basename.has_value());
76   EXPECT_EQ(basename->path(), FilePath(FILE_PATH_LITERAL("bar")));
77 }
78 
79 }  // namespace base