xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/common/platform/api/quiche_file_utils_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 #include "quiche/common/platform/api/quiche_file_utils.h"
2 
3 #include <optional>
4 #include <vector>
5 
6 #include "absl/algorithm/container.h"
7 #include "absl/strings/str_cat.h"
8 #include "absl/strings/strip.h"
9 #include "quiche/common/platform/api/quiche_test.h"
10 
11 namespace quiche {
12 namespace test {
13 namespace {
14 
15 using testing::UnorderedElementsAre;
16 using testing::UnorderedElementsAreArray;
17 
TEST(QuicheFileUtilsTest,ReadFileContents)18 TEST(QuicheFileUtilsTest, ReadFileContents) {
19   std::string path = absl::StrCat(QuicheGetCommonSourcePath(),
20                                   "/platform/api/testdir/testfile");
21   std::optional<std::string> contents = ReadFileContents(path);
22   ASSERT_TRUE(contents.has_value());
23   EXPECT_EQ(*contents, "This is a test file.");
24 }
25 
TEST(QuicheFileUtilsTest,ReadFileContentsFileNotFound)26 TEST(QuicheFileUtilsTest, ReadFileContentsFileNotFound) {
27   std::string path =
28       absl::StrCat(QuicheGetCommonSourcePath(),
29                    "/platform/api/testdir/file-that-does-not-exist");
30   std::optional<std::string> contents = ReadFileContents(path);
31   EXPECT_FALSE(contents.has_value());
32 }
33 
TEST(QuicheFileUtilsTest,EnumerateDirectory)34 TEST(QuicheFileUtilsTest, EnumerateDirectory) {
35   std::string path =
36       absl::StrCat(QuicheGetCommonSourcePath(), "/platform/api/testdir");
37   std::vector<std::string> dirs;
38   std::vector<std::string> files;
39   bool success = EnumerateDirectory(path, dirs, files);
40   EXPECT_TRUE(success);
41   EXPECT_THAT(files, UnorderedElementsAre("testfile", "README.md"));
42   EXPECT_THAT(dirs, UnorderedElementsAre("a"));
43 }
44 
TEST(QuicheFileUtilsTest,EnumerateDirectoryNoSuchDirectory)45 TEST(QuicheFileUtilsTest, EnumerateDirectoryNoSuchDirectory) {
46   std::string path = absl::StrCat(QuicheGetCommonSourcePath(),
47                                   "/platform/api/testdir/no-such-directory");
48   std::vector<std::string> dirs;
49   std::vector<std::string> files;
50   bool success = EnumerateDirectory(path, dirs, files);
51   EXPECT_FALSE(success);
52 }
53 
TEST(QuicheFileUtilsTest,EnumerateDirectoryNotADirectory)54 TEST(QuicheFileUtilsTest, EnumerateDirectoryNotADirectory) {
55   std::string path = absl::StrCat(QuicheGetCommonSourcePath(),
56                                   "/platform/api/testdir/testfile");
57   std::vector<std::string> dirs;
58   std::vector<std::string> files;
59   bool success = EnumerateDirectory(path, dirs, files);
60   EXPECT_FALSE(success);
61 }
62 
TEST(QuicheFileUtilsTest,EnumerateDirectoryRecursively)63 TEST(QuicheFileUtilsTest, EnumerateDirectoryRecursively) {
64   std::vector<std::string> expected_paths = {"a/b/c/d/e", "a/subdir/testfile",
65                                              "a/z", "testfile", "README.md"};
66 
67   std::string root_path =
68       absl::StrCat(QuicheGetCommonSourcePath(), "/platform/api/testdir");
69   for (std::string& path : expected_paths) {
70     // For Windows, use Windows path separators.
71     if (JoinPath("a", "b") == "a\\b") {
72       absl::c_replace(path, '/', '\\');
73     }
74 
75     path = JoinPath(root_path, path);
76   }
77 
78   std::vector<std::string> files;
79   bool success = EnumerateDirectoryRecursively(root_path, files);
80   EXPECT_TRUE(success);
81   EXPECT_THAT(files, UnorderedElementsAreArray(expected_paths));
82 }
83 
84 }  // namespace
85 }  // namespace test
86 }  // namespace quiche
87