mirror of
https://github.com/basiliscos/syncspirit.git
synced 2026-06-01 17:47:32 +00:00
87 lines
2.3 KiB
C++
87 lines
2.3 KiB
C++
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
// SPDX-FileCopyrightText: 2025 Ivan Baidakou
|
|
|
|
#include "test-utils.h"
|
|
#include "model/misc/path.h"
|
|
#include "model/misc/path_cache.h"
|
|
|
|
using namespace syncspirit;
|
|
using namespace syncspirit::model;
|
|
|
|
TEST_CASE("path", "[model]") {
|
|
using pieces_t = std::vector<std::string_view>;
|
|
SECTION("a/bb/c.txt") {
|
|
auto p = path_t("a/bb/c.txt");
|
|
CHECK(p.get_parent_name() == "a/bb");
|
|
CHECK(p.get_own_name() == "c.txt");
|
|
|
|
auto pieces = pieces_t();
|
|
for (auto p : p) {
|
|
pieces.emplace_back(p);
|
|
}
|
|
|
|
CHECK(pieces.size() == 3);
|
|
CHECK(pieces[0] == "a");
|
|
CHECK(pieces[1] == "bb");
|
|
CHECK(pieces[2] == "c.txt");
|
|
CHECK(p.contains(p));
|
|
CHECK(!p.contains(path_t("a/bb/c.tx")));
|
|
CHECK(!p.contains(path_t("a/bb/c.x")));
|
|
CHECK(!p.contains(path_t("a/bb/c")));
|
|
CHECK(!p.contains(path_t("a/bb")));
|
|
CHECK(!p.contains(path_t("a")));
|
|
CHECK(path_t("a").contains(p));
|
|
CHECK(path_t("a/").contains(p));
|
|
CHECK(path_t("a/b").contains(p));
|
|
CHECK(path_t("a/bb/c").contains(p));
|
|
}
|
|
SECTION("dir/file.bin") {
|
|
auto p = path_t("dir/file.bin");
|
|
CHECK(p.get_parent_name() == "dir");
|
|
CHECK(p.get_own_name() == "file.bin");
|
|
|
|
auto pieces = pieces_t();
|
|
for (auto p : p) {
|
|
pieces.emplace_back(p);
|
|
}
|
|
|
|
CHECK(pieces.size() == 2);
|
|
CHECK(pieces[0] == "dir");
|
|
CHECK(pieces[1] == "file.bin");
|
|
}
|
|
}
|
|
|
|
TEST_CASE("path_cache", "[model]") {
|
|
auto cache = path_cache_ptr_t(new path_cache_t());
|
|
auto path = cache->get_path("a/b/c");
|
|
REQUIRE(path);
|
|
CHECK(path->use_count() == 1);
|
|
CHECK(cache->map.size() == 1);
|
|
|
|
auto path_2 = cache->get_path("a/b/c");
|
|
REQUIRE(path_2);
|
|
CHECK(path_2 == path);
|
|
CHECK(path->use_count() == 2);
|
|
CHECK(cache->map.size() == 1);
|
|
|
|
auto path_3 = cache->get_path("x/y/z");
|
|
REQUIRE(path_3);
|
|
CHECK(path_3->use_count() == 1);
|
|
CHECK(cache->map.size() == 2);
|
|
|
|
path_3.reset();
|
|
CHECK(cache->map.size() == 1);
|
|
|
|
path_2.reset();
|
|
CHECK(cache->map.size() == 1);
|
|
CHECK(path->use_count() == 1);
|
|
|
|
path.reset();
|
|
CHECK(cache->map.size() == 0);
|
|
}
|
|
|
|
static bool _init = []() -> bool {
|
|
test::init_logging();
|
|
return true;
|
|
}();
|