2020-01-18 08:38:21 +00:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
2021-06-29 15:31:42 +00:00
|
|
|
* Copyright (c) 2021, Max Wipfli <max.wipfli@serenityos.org>
|
2020-01-18 08:38:21 +00:00
|
|
|
*
|
2021-04-22 08:24:48 +00:00
|
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
2020-01-18 08:38:21 +00:00
|
|
|
*/
|
|
|
|
|
2021-04-25 05:53:23 +00:00
|
|
|
#include <LibTest/TestCase.h>
|
2019-08-07 19:07:02 +00:00
|
|
|
|
2020-05-26 11:52:44 +00:00
|
|
|
#include <AK/LexicalPath.h>
|
2019-09-06 13:34:26 +00:00
|
|
|
#include <AK/String.h>
|
2019-08-07 19:07:02 +00:00
|
|
|
|
2021-06-29 15:31:42 +00:00
|
|
|
TEST_CASE(relative_path)
|
|
|
|
{
|
|
|
|
EXPECT_EQ(LexicalPath::relative_path("/tmp/abc.txt", "/tmp"), "abc.txt");
|
|
|
|
EXPECT_EQ(LexicalPath::relative_path("/tmp/abc.txt", "/tmp/"), "abc.txt");
|
|
|
|
EXPECT_EQ(LexicalPath::relative_path("/tmp/abc.txt", "/"), "tmp/abc.txt");
|
|
|
|
EXPECT_EQ(LexicalPath::relative_path("/tmp/abc.txt", "/usr"), "/tmp/abc.txt");
|
|
|
|
|
|
|
|
EXPECT_EQ(LexicalPath::relative_path("/tmp/foo.txt", "tmp"), String {});
|
|
|
|
EXPECT_EQ(LexicalPath::relative_path("tmp/foo.txt", "/tmp"), String {});
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE(regular_absolute_path)
|
2019-08-07 19:07:02 +00:00
|
|
|
{
|
2021-06-29 15:31:42 +00:00
|
|
|
LexicalPath path("/home/anon/foo.txt");
|
|
|
|
EXPECT_EQ(path.string(), "/home/anon/foo.txt");
|
|
|
|
EXPECT_EQ(path.dirname(), "/home/anon");
|
|
|
|
EXPECT_EQ(path.basename(), "foo.txt");
|
|
|
|
EXPECT_EQ(path.title(), "foo");
|
2019-08-07 19:07:02 +00:00
|
|
|
EXPECT_EQ(path.extension(), "txt");
|
2021-06-29 15:31:42 +00:00
|
|
|
EXPECT(path.has_extension(".txt"));
|
|
|
|
EXPECT(path.has_extension("txt"));
|
|
|
|
EXPECT(!path.has_extension("txxt"));
|
|
|
|
EXPECT_EQ(path.parts_view().size(), 3u);
|
|
|
|
EXPECT_EQ(path.parts_view()[0], "home");
|
|
|
|
EXPECT_EQ(path.parts_view()[1], "anon");
|
|
|
|
EXPECT_EQ(path.parts_view()[2], "foo.txt");
|
2019-08-07 19:07:02 +00:00
|
|
|
}
|
|
|
|
|
2021-06-29 15:31:42 +00:00
|
|
|
TEST_CASE(regular_relative_path)
|
2019-08-07 19:07:02 +00:00
|
|
|
{
|
2021-06-29 15:31:42 +00:00
|
|
|
LexicalPath path("anon/foo.txt");
|
|
|
|
EXPECT_EQ(path.dirname(), "anon");
|
|
|
|
EXPECT_EQ(path.basename(), "foo.txt");
|
|
|
|
EXPECT_EQ(path.parts_view().size(), 2u);
|
|
|
|
EXPECT_EQ(path.parts_view()[0], "anon");
|
|
|
|
EXPECT_EQ(path.parts_view()[1], "foo.txt");
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE(single_dot)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
LexicalPath path("/home/./anon/foo.txt");
|
|
|
|
EXPECT_EQ(path.string(), "/home/anon/foo.txt");
|
|
|
|
}
|
|
|
|
{
|
|
|
|
LexicalPath path("./test.txt");
|
|
|
|
EXPECT_EQ(path.string(), "test.txt");
|
|
|
|
}
|
|
|
|
{
|
|
|
|
LexicalPath path("./../test.txt");
|
|
|
|
EXPECT_EQ(path.string(), "../test.txt");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE(relative_path_with_dotdot)
|
|
|
|
{
|
|
|
|
LexicalPath path("anon/../../foo.txt");
|
|
|
|
EXPECT_EQ(path.string(), "../foo.txt");
|
|
|
|
EXPECT_EQ(path.dirname(), "..");
|
|
|
|
EXPECT_EQ(path.basename(), "foo.txt");
|
|
|
|
EXPECT_EQ(path.parts_view().size(), 2u);
|
|
|
|
EXPECT_EQ(path.parts_view()[0], "..");
|
|
|
|
EXPECT_EQ(path.parts_view()[1], "foo.txt");
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE(absolute_path_with_dotdot)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
LexicalPath path("/test/../foo.txt");
|
|
|
|
EXPECT_EQ(path.string(), "/foo.txt");
|
|
|
|
}
|
|
|
|
{
|
|
|
|
LexicalPath path("/../../foo.txt");
|
|
|
|
EXPECT_EQ(path.string(), "/foo.txt");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE(more_dotdot_paths)
|
|
|
|
{
|
|
|
|
EXPECT_EQ(LexicalPath::canonicalized_path("/home/user/../../not/home"), "/not/home");
|
|
|
|
EXPECT_EQ(LexicalPath::canonicalized_path("/../../../../"), "/");
|
|
|
|
EXPECT_EQ(LexicalPath::canonicalized_path("./../../../../"), "../../../..");
|
|
|
|
EXPECT_EQ(LexicalPath::canonicalized_path("../../../../../"), "../../../../..");
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE(the_root_path)
|
|
|
|
{
|
|
|
|
LexicalPath path("/");
|
|
|
|
EXPECT_EQ(path.dirname(), "/");
|
|
|
|
EXPECT_EQ(path.basename(), "/");
|
|
|
|
EXPECT_EQ(path.title(), "/");
|
|
|
|
EXPECT_EQ(path.parts_view().size(), 0u);
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE(the_dot_path)
|
|
|
|
{
|
|
|
|
LexicalPath path(".");
|
|
|
|
EXPECT_EQ(path.string(), ".");
|
|
|
|
EXPECT_EQ(path.dirname(), ".");
|
|
|
|
EXPECT_EQ(path.basename(), ".");
|
|
|
|
EXPECT_EQ(path.title(), ".");
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE(double_slash)
|
|
|
|
{
|
|
|
|
LexicalPath path("//home/anon/foo.txt");
|
|
|
|
EXPECT_EQ(path.string(), "/home/anon/foo.txt");
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE(trailing_slash)
|
|
|
|
{
|
|
|
|
LexicalPath path("/home/anon/");
|
|
|
|
EXPECT_EQ(path.string(), "/home/anon");
|
|
|
|
EXPECT_EQ(path.dirname(), "/home");
|
|
|
|
EXPECT_EQ(path.basename(), "anon");
|
|
|
|
EXPECT_EQ(path.parts_view().size(), 2u);
|
2019-08-07 19:07:02 +00:00
|
|
|
}
|
|
|
|
|
2020-05-26 09:12:18 +00:00
|
|
|
TEST_CASE(has_extension)
|
|
|
|
{
|
|
|
|
{
|
2020-08-02 17:48:48 +00:00
|
|
|
LexicalPath path("/tmp/simple.png");
|
2020-05-26 09:12:18 +00:00
|
|
|
EXPECT(path.has_extension(".png"));
|
|
|
|
EXPECT(path.has_extension(".pnG"));
|
|
|
|
EXPECT(path.has_extension(".PNG"));
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
2020-08-02 17:48:48 +00:00
|
|
|
LexicalPath path("/TMP/SIMPLE.PNG");
|
2020-05-26 09:12:18 +00:00
|
|
|
EXPECT(path.has_extension(".png"));
|
|
|
|
EXPECT(path.has_extension(".pnG"));
|
|
|
|
EXPECT(path.has_extension(".PNG"));
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
2020-08-02 17:48:48 +00:00
|
|
|
LexicalPath path(".png");
|
2020-05-26 09:12:18 +00:00
|
|
|
EXPECT(path.has_extension(".png"));
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
2020-08-02 17:48:48 +00:00
|
|
|
LexicalPath path;
|
2020-05-26 09:12:18 +00:00
|
|
|
EXPECT_EQ(path.has_extension(".png"), false);
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
2020-08-02 17:48:48 +00:00
|
|
|
LexicalPath path("png");
|
2020-05-26 09:12:18 +00:00
|
|
|
EXPECT_EQ(path.has_extension(".png"), false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-06-29 15:31:42 +00:00
|
|
|
TEST_CASE(join)
|
2021-04-03 22:48:26 +00:00
|
|
|
{
|
2021-06-29 15:31:42 +00:00
|
|
|
EXPECT_EQ(LexicalPath::join("anon", "foo.txt").string(), "anon/foo.txt");
|
|
|
|
EXPECT_EQ(LexicalPath::join("/home", "anon/foo.txt").string(), "/home/anon/foo.txt");
|
|
|
|
EXPECT_EQ(LexicalPath::join("/", "foo.txt").string(), "/foo.txt");
|
2021-04-03 22:48:26 +00:00
|
|
|
}
|
2021-05-27 12:03:55 +00:00
|
|
|
|
2021-06-29 15:31:42 +00:00
|
|
|
TEST_CASE(append)
|
2021-05-27 12:03:55 +00:00
|
|
|
{
|
2021-06-29 15:31:42 +00:00
|
|
|
LexicalPath path("/home/anon");
|
|
|
|
path.append("foo.txt");
|
|
|
|
EXPECT_EQ(path.string(), "/home/anon/foo.txt");
|
2021-05-27 12:03:55 +00:00
|
|
|
}
|