blob: 1a1f3afbd3ac0e0c2028a538ef054e6c32557a1b [file]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/debug/zxdb/common/file_util.h"
#include <gtest/gtest.h>
namespace zxdb {
TEST(FileUtil, ExtractLastFileComponent) {
EXPECT_EQ("", ExtractLastFileComponent(""));
EXPECT_EQ("", ExtractLastFileComponent("foo/"));
EXPECT_EQ("foo.cpp", ExtractLastFileComponent("foo.cpp"));
EXPECT_EQ("foo.cpp", ExtractLastFileComponent("bar/foo.cpp"));
EXPECT_EQ("foo.cpp", ExtractLastFileComponent("baz/bar/foo.cpp"));
}
TEST(FileUtil, IsPathAbsolute) {
EXPECT_FALSE(IsPathAbsolute(""));
EXPECT_TRUE(IsPathAbsolute("/"));
EXPECT_TRUE(IsPathAbsolute("/foo/bar"));
EXPECT_FALSE(IsPathAbsolute("foo/bar"));
EXPECT_FALSE(IsPathAbsolute("./foo/bar"));
}
TEST(FileUtil, PathContainsFromRight) {
EXPECT_TRUE(PathContainsFromRight("", ""));
EXPECT_TRUE(PathContainsFromRight("foo.cc", "foo.cc"));
EXPECT_TRUE(PathContainsFromRight("/foo.cc", "foo.cc"));
EXPECT_TRUE(PathContainsFromRight("bar/foo.cc", "foo.cc"));
EXPECT_TRUE(PathContainsFromRight("bar/foo.cc", "bar/foo.cc"));
EXPECT_FALSE(PathContainsFromRight("bar/foo.cc", "FOO.CC"));
EXPECT_FALSE(PathContainsFromRight("bar/foo.cc", "o.cc"));
}
TEST(FileUtil, CatPathComponents) {
EXPECT_EQ("", CatPathComponents("", ""));
EXPECT_EQ("a", CatPathComponents("", "a"));
EXPECT_EQ("a", CatPathComponents("a", ""));
EXPECT_EQ("a/b", CatPathComponents("a", "b"));
EXPECT_EQ("a/b", CatPathComponents("a/", "b"));
EXPECT_EQ("a/b/", CatPathComponents("a/", "b/"));
}
TEST(FileUtil, CanonicalizePath) {
EXPECT_EQ("", NormalizePath(""));
EXPECT_EQ("foo/bar.txt", NormalizePath("foo/bar.txt"));
EXPECT_EQ(".", NormalizePath("."));
EXPECT_EQ("foo/bar", NormalizePath("foo//bar"));
EXPECT_EQ("/foo", NormalizePath("//foo"));
EXPECT_EQ("bar", NormalizePath("foo/..//bar"));
EXPECT_EQ("../bar", NormalizePath("foo/../../bar"));
EXPECT_EQ("/foo", NormalizePath("/../foo")); // Don't go above the root dir.
EXPECT_EQ("/foo", NormalizePath("/../foo")); // Don't go above the root dir.
EXPECT_EQ("../foo", NormalizePath("../foo"));
EXPECT_EQ("..", NormalizePath(".."));
EXPECT_EQ(".", NormalizePath("./././."));
EXPECT_EQ("../../..", NormalizePath("../../.."));
// The implementation of this is std::filesystem which isn't consistent here about whether
// trailing slashes are preserved. It would be nice if the "../" case preserved the trailing
// slash for consistency, but this behavior should be fine for our needs.
EXPECT_EQ("..", NormalizePath("../"));
EXPECT_EQ("/foo/bar/", NormalizePath("/foo/bar/"));
}
} // namespace zxdb