aboutsummaryrefslogtreecommitdiff
path: root/source/lib/tests
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2024-05-17 17:58:38 +0200
committerFelix Morgner <felix.morgner@gmail.com>2024-05-17 17:58:38 +0200
commit577fc0845718ed8ad5bebf02a277c0579a817f77 (patch)
tree3d1cdc53c426a0ba60a7996619a7b787850bb3b3 /source/lib/tests
parentde5bf7ca3b7a2bf6be35b86486b00dc6a071b950 (diff)
downloadwanda-577fc0845718ed8ad5bebf02a277c0579a817f77.tar.xz
wanda-577fc0845718ed8ad5bebf02a277c0579a817f77.zip
wanda: restructure source layoutHEADdevelop
Diffstat (limited to 'source/lib/tests')
-rw-r--r--source/lib/tests/xdg.cpp171
1 files changed, 171 insertions, 0 deletions
diff --git a/source/lib/tests/xdg.cpp b/source/lib/tests/xdg.cpp
new file mode 100644
index 0000000..5872dc6
--- /dev/null
+++ b/source/lib/tests/xdg.cpp
@@ -0,0 +1,171 @@
+#include "wanda/system/xdg.hpp"
+
+#include "wanda/system/environment.hpp"
+
+#include <catch2/catch_all.hpp>
+#include <unistd.h>
+
+#include <filesystem>
+#include <string>
+#include <utility>
+
+using namespace std::string_literals;
+
+namespace wanda::system::test
+{
+
+ TEST_CASE("XDG variable names match the specification", "[system][xdg][spec]")
+ {
+ REQUIRE(xdg_variable(xdg_directory::data_home) == "XDG_DATA_HOME");
+ REQUIRE(xdg_variable(xdg_directory::config_home) == "XDG_CONFIG_HOME");
+ REQUIRE(xdg_variable(xdg_directory::cache_home) == "XDG_CACHE_HOME");
+ REQUIRE(xdg_variable(xdg_directory::runtime_dir) == "XDG_RUNTIME_DIR");
+ }
+
+ SCENARIO("The values of the XDG variables depend on the environment", "[system][xdg][spec]")
+ {
+ auto const home_directory = std::filesystem::path{"/home/test"};
+ auto const run_directory = std::filesystem::path{"/run/user"};
+ auto const uid = std::to_string(::getuid());
+
+ GIVEN("An environment that only contains HOME")
+ {
+ auto home = "HOME="s + home_directory.native();
+ char const * env_data[] = {home.c_str(), nullptr};
+ auto env = environment{env_data};
+
+ THEN("the data home is '<home_directory>/.local/share")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::data_home, env) == home_directory / ".local/share");
+ }
+
+ THEN("the config home is '<home_directory>/.config")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::config_home, env) == home_directory / ".config");
+ }
+
+ THEN("the cache home is '<home_directory>/.cache")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::cache_home, env) == home_directory / ".cache");
+ }
+
+ THEN("the runtime directory is '<run_directory>/<uid>'")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::runtime_dir, env) == run_directory / uid);
+ }
+ }
+
+ GIVEN("An environment that only contains HOME and XDG_DATA_HOME")
+ {
+ auto home = "HOME="s + home_directory.native();
+ auto data_home = "XDG_DATA_HOME=/home/test/xdg_data_home"s;
+ char const * env_data[] = {home.c_str(), data_home.c_str(), nullptr};
+ auto env = environment{env_data};
+
+ THEN("the data home is '$XDG_DATA_HOME")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::data_home, env) == env["XDG_DATA_HOME"]);
+ }
+
+ THEN("the config home is '<home_directory>/.config")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::config_home, env) == home_directory / ".config");
+ }
+
+ THEN("the cache home is '<home_directory>/.cache")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::cache_home, env) == home_directory / ".cache");
+ }
+
+ THEN("the runtime directory is '<run_directory>/<uid>'")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::runtime_dir, env) == run_directory / uid);
+ }
+ }
+
+ GIVEN("An environment that only contains HOME and XDG_CONFIG_HOME")
+ {
+ auto home = "HOME="s + home_directory.native();
+ auto config_home = "XDG_CONFIG_HOME=/home/test/xdg_config_home"s;
+ char const * env_data[] = {home.c_str(), config_home.c_str(), nullptr};
+ auto env = environment{env_data};
+
+ THEN("the data home is '<home_directory>/.local/share")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::data_home, env) == home_directory / ".local/share");
+ }
+
+ THEN("the config home is '$XDG_CONFIG_HOME")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::config_home, env) == env["XDG_CONFIG_HOME"]);
+ }
+
+ THEN("the cache home is '<home_directory>/.cache")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::cache_home, env) == home_directory / ".cache");
+ }
+
+ THEN("the runtime directory is '<run_directory>/<uid>'")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::runtime_dir, env) == run_directory / uid);
+ }
+ }
+
+ GIVEN("An environment that only contains HOME and XDG_CACHE_HOME")
+ {
+ auto home = "HOME="s + home_directory.native();
+ auto cache_home = "XDG_CACHE_HOME=/home/test/xdg_cache_home"s;
+ char const * env_data[] = {home.c_str(), cache_home.c_str(), nullptr};
+ auto env = environment{env_data};
+
+ THEN("the data home is '<home_directory>/.local/share")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::data_home, env) == home_directory / ".local/share");
+ }
+
+ THEN("the cache home is '<home_directory>/.config")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::config_home, env) == home_directory / ".config");
+ }
+
+ THEN("the config home is '$XDG_CACHE_HOME")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::cache_home, env) == env["XDG_CACHE_HOME"]);
+ }
+
+ THEN("the runtime directory is '<run_directory>/<uid>'")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::runtime_dir, env) == run_directory / uid);
+ }
+ }
+
+ GIVEN("An environment that only contains HOME and XDG_RUNTIME_DIR")
+ {
+ auto home = "HOME="s + home_directory.native();
+ auto runtime_dir = "XDG_RUNTIME_DIR=/home/test/xdg_runtime_dir"s;
+ char const * env_data[] = {home.c_str(), runtime_dir.c_str(), nullptr};
+ auto env = environment{env_data};
+
+ THEN("the data home is '<home_directory>/.local/share")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::data_home, env) == home_directory / ".local/share");
+ }
+
+ THEN("the config home is '<home_directory>/.config")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::config_home, env) == home_directory / ".config");
+ }
+
+ THEN("the cache home is '<home_directory>/.cache")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::cache_home, env) == home_directory / ".cache");
+ }
+
+ THEN("the runtime directory is '$XDG_RUNTIME_DIR'")
+ {
+ REQUIRE(xdg_path_for(xdg_directory::runtime_dir, env) == env["XDG_RUNTIME_DIR"]);
+ }
+ }
+ }
+
+} // namespace wanda::system::test \ No newline at end of file