#include #include #include #include #include #include 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 expected = {"a", "b", "c", "d.txt"}; REQUIRE(std::ranges::equal(components, expected)); } } }