aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/path.tests.cpp
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));
    }
  }
}