blob: 261b2f3c6ba8767d69f47f8f0935e1e7cf95455f [file] [log] [blame] [edit]
#include "quiche/common/platform/api/quiche_file_utils.h"
#include <optional>
#include <string>
#include <vector>
#include "absl/algorithm/container.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/strip.h"
#include "quiche/common/platform/api/quiche_test.h"
namespace quiche {
namespace test {
namespace {
using testing::UnorderedElementsAre;
using testing::UnorderedElementsAreArray;
TEST(QuicheFileUtilsTest, ReadFileContents) {
std::string path = absl::StrCat(QuicheGetCommonSourcePath(),
"/platform/api/testdir/testfile");
std::optional<std::string> contents = ReadFileContents(path);
ASSERT_TRUE(contents.has_value());
EXPECT_EQ(*contents, "This is a test file.");
}
TEST(QuicheFileUtilsTest, ReadFileContentsFileNotFound) {
std::string path =
absl::StrCat(QuicheGetCommonSourcePath(),
"/platform/api/testdir/file-that-does-not-exist");
std::optional<std::string> contents = ReadFileContents(path);
EXPECT_FALSE(contents.has_value());
}
TEST(QuicheFileUtilsTest, EnumerateDirectory) {
std::string path =
absl::StrCat(QuicheGetCommonSourcePath(), "/platform/api/testdir");
std::vector<std::string> dirs;
std::vector<std::string> files;
bool success = EnumerateDirectory(path, dirs, files);
EXPECT_TRUE(success);
EXPECT_THAT(files, UnorderedElementsAre("testfile", "README.md"));
EXPECT_THAT(dirs, UnorderedElementsAre("a"));
}
TEST(QuicheFileUtilsTest, EnumerateDirectoryNoSuchDirectory) {
std::string path = absl::StrCat(QuicheGetCommonSourcePath(),
"/platform/api/testdir/no-such-directory");
std::vector<std::string> dirs;
std::vector<std::string> files;
bool success = EnumerateDirectory(path, dirs, files);
EXPECT_FALSE(success);
}
TEST(QuicheFileUtilsTest, EnumerateDirectoryNotADirectory) {
std::string path = absl::StrCat(QuicheGetCommonSourcePath(),
"/platform/api/testdir/testfile");
std::vector<std::string> dirs;
std::vector<std::string> files;
bool success = EnumerateDirectory(path, dirs, files);
EXPECT_FALSE(success);
}
TEST(QuicheFileUtilsTest, EnumerateDirectoryRecursively) {
std::vector<std::string> expected_paths = {"a/b/c/d/e", "a/subdir/testfile",
"a/z", "testfile", "README.md"};
std::string root_path =
absl::StrCat(QuicheGetCommonSourcePath(), "/platform/api/testdir");
for (std::string& path : expected_paths) {
// For Windows, use Windows path separators.
if (JoinPath("a", "b") == "a\\b") {
absl::c_replace(path, '/', '\\');
}
path = JoinPath(root_path, path);
}
std::vector<std::string> files;
bool success = EnumerateDirectoryRecursively(root_path, files);
EXPECT_TRUE(success);
EXPECT_THAT(files, UnorderedElementsAreArray(expected_paths));
}
} // namespace
} // namespace test
} // namespace quiche