mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 06:37:44 +00:00
AK: Make LexicalPath immutable
This replaces the current LexicalPath::append() API with a new method that returns a new LexicalPath object and doesn't touch the this-object. With this, LexicalPath is now immutable. It also adds a LexicalPath::parent() method and the relevant test cases.
This commit is contained in:
parent
1e80022282
commit
4c018909f7
3 changed files with 38 additions and 11 deletions
|
@ -137,15 +137,14 @@ String LexicalPath::relative_path(String absolute_path, String const& prefix)
|
||||||
return absolute_path.substring(prefix_length);
|
return absolute_path.substring(prefix_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LexicalPath::append(String const& component)
|
LexicalPath LexicalPath::append(StringView const& value) const
|
||||||
{
|
{
|
||||||
StringBuilder builder;
|
return LexicalPath::join(m_string, value);
|
||||||
builder.append(m_string);
|
}
|
||||||
builder.append('/');
|
|
||||||
builder.append(component);
|
|
||||||
|
|
||||||
m_string = builder.to_string();
|
LexicalPath LexicalPath::parent() const
|
||||||
canonicalize();
|
{
|
||||||
|
return append("..");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,8 @@ public:
|
||||||
|
|
||||||
bool has_extension(StringView const&) const;
|
bool has_extension(StringView const&) const;
|
||||||
|
|
||||||
void append(String const& component);
|
[[nodiscard]] LexicalPath append(StringView const&) const;
|
||||||
|
[[nodiscard]] LexicalPath parent() const;
|
||||||
|
|
||||||
static String canonicalized_path(String);
|
static String canonicalized_path(String);
|
||||||
static String relative_path(String absolute_path, String const& prefix);
|
static String relative_path(String absolute_path, String const& prefix);
|
||||||
|
|
|
@ -165,11 +165,38 @@ TEST_CASE(join)
|
||||||
EXPECT_EQ(LexicalPath::join("anon", "foo.txt").string(), "anon/foo.txt");
|
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("/home", "anon/foo.txt").string(), "/home/anon/foo.txt");
|
||||||
EXPECT_EQ(LexicalPath::join("/", "foo.txt").string(), "/foo.txt");
|
EXPECT_EQ(LexicalPath::join("/", "foo.txt").string(), "/foo.txt");
|
||||||
|
EXPECT_EQ(LexicalPath::join("/home", "anon", "foo.txt").string(), "/home/anon/foo.txt");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE(append)
|
TEST_CASE(append)
|
||||||
{
|
{
|
||||||
LexicalPath path("/home/anon");
|
LexicalPath path("/home/anon/");
|
||||||
path.append("foo.txt");
|
auto new_path = path.append("foo.txt");
|
||||||
EXPECT_EQ(path.string(), "/home/anon/foo.txt");
|
EXPECT_EQ(new_path.string(), "/home/anon/foo.txt");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE(parent)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
LexicalPath path("/home/anon/foo.txt");
|
||||||
|
auto parent = path.parent();
|
||||||
|
EXPECT_EQ(parent.string(), "/home/anon");
|
||||||
|
}
|
||||||
|
{
|
||||||
|
LexicalPath path("anon/foo.txt");
|
||||||
|
auto parent = path.parent();
|
||||||
|
EXPECT_EQ(parent.string(), "anon");
|
||||||
|
}
|
||||||
|
{
|
||||||
|
LexicalPath path("foo.txt");
|
||||||
|
auto parent = path.parent();
|
||||||
|
EXPECT_EQ(parent.string(), ".");
|
||||||
|
auto parent_of_parent = parent.parent();
|
||||||
|
EXPECT_EQ(parent_of_parent.string(), "..");
|
||||||
|
}
|
||||||
|
{
|
||||||
|
LexicalPath path("/");
|
||||||
|
auto parent = path.parent();
|
||||||
|
EXPECT_EQ(parent.string(), "/");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue