blob: 3c18b5c28455eaff48dc89ea93fecbdfade1482c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#include <kernel/filesystem/path.hpp>
#include <catch2/catch_test_macros.hpp>
#include <algorithm>
#include <string>
#include <string_view>
#include <vector>
SCENARIO("path utilities", "[filesystem][path]")
{
GIVEN("valid and invalid paths")
{
THEN("valid absolute paths are recognized as valid")
{
REQUIRE(kernel::filesystem::path::is_valid_path("/valid/absolute/path"));
REQUIRE(kernel::filesystem::path::is_valid_path("/"));
}
THEN("valid relative paths are recognized as valid")
{
REQUIRE(kernel::filesystem::path::is_valid_path("valid/../relative/.././path"));
REQUIRE(kernel::filesystem::path::is_valid_path("valid/relative/path"));
REQUIRE(kernel::filesystem::path::is_valid_path("file.txt"));
}
THEN("invalid paths are recognized as invalid")
{
REQUIRE_FALSE(kernel::filesystem::path::is_valid_path(""));
REQUIRE_FALSE(kernel::filesystem::path::is_valid_path(std::string(4096, 'a')));
}
THEN("valid absolute paths are recognized as absolute")
{
REQUIRE(kernel::filesystem::path::is_valid_absolute_path("/valid/absolute/path"));
REQUIRE_FALSE(kernel::filesystem::path::is_valid_absolute_path("valid/relative/path"));
}
THEN("invalid paths are not recognized as absolute")
{
REQUIRE_FALSE(kernel::filesystem::path::is_valid_absolute_path(""));
REQUIRE_FALSE(kernel::filesystem::path::is_valid_absolute_path(std::string(4096, 'a')));
REQUIRE_FALSE(kernel::filesystem::path::is_valid_absolute_path("invalid/absolute/path"));
}
THEN("valid relative paths are recognized as relative")
{
REQUIRE(kernel::filesystem::path::is_valid_relative_path("valid/relative/path"));
REQUIRE_FALSE(kernel::filesystem::path::is_valid_relative_path("/valid/absolute/path"));
}
THEN("invalid paths are not recognized as relative")
{
REQUIRE_FALSE(kernel::filesystem::path::is_valid_relative_path(""));
REQUIRE_FALSE(kernel::filesystem::path::is_valid_relative_path(std::string(4096, 'a')));
REQUIRE_FALSE(kernel::filesystem::path::is_valid_relative_path("/invalid/absolute/path"));
}
}
GIVEN("a valid path")
{
THEN("it can be split into components")
{
auto components = kernel::filesystem::path::split("/a/b///c/d.txt");
std::vector<std::string_view> expected = {"a", "b", "c", "d.txt"};
REQUIRE(std::ranges::equal(components, expected));
}
}
}
|