// SPDX-License-Identifier: GPL-2.0-or-later // Copyright The Music Player Daemon Project #include "config/Path.hxx" #include "config/Data.hxx" #include "fs/Path.hxx" #include "fs/AllocatedPath.hxx" #include "fs/glue/StandardDirectory.hxx" #include "fs/XDG.hxx" // for USE_XDG #include <gtest/gtest.h> #include <stdexcept> #ifndef _WIN32 AllocatedPath GetHomeDir(const char *user_name) noexcept { return AllocatedPath::FromFS(PATH_LITERAL("/home")) / AllocatedPath::FromUTF8(user_name); } AllocatedPath GetHomeDir() noexcept { return GetHomeDir("foo"); } #endif AllocatedPath GetUserConfigDir() noexcept { #ifdef _WIN32 return AllocatedPath::FromFS(PATH_LITERAL("c:\\users\\foo\\config")); #else return GetHomeDir() / AllocatedPath::FromFS(PATH_LITERAL(".config")); #endif } AllocatedPath GetUserMusicDir() noexcept { #ifdef _WIN32 return AllocatedPath::FromFS(PATH_LITERAL("c:\\users\\foo\\Music")); #else return GetHomeDir() / AllocatedPath::FromFS(PATH_LITERAL("Music")); #endif } AllocatedPath GetUserCacheDir() noexcept { #ifdef _WIN32 return nullptr; #else return GetHomeDir() / AllocatedPath::FromFS(PATH_LITERAL(".cache")); #endif } AllocatedPath GetAppCacheDir() noexcept { #ifdef _WIN32 return nullptr; #else return GetUserCacheDir() / AllocatedPath::FromFS(PATH_LITERAL("mpd")); #endif } AllocatedPath GetUserRuntimeDir() noexcept { #ifdef _WIN32 return nullptr; #else return AllocatedPath::FromFS(PATH_LITERAL("/run/user/foo")); #endif } AllocatedPath GetAppRuntimeDir() noexcept { #ifdef _WIN32 return nullptr; #else return GetUserRuntimeDir() / AllocatedPath::FromFS(PATH_LITERAL("mpd")); #endif } const char * ConfigData::GetString([[maybe_unused]] ConfigOption option, const char *default_value) const noexcept { return default_value; } TEST(ParsePath, Basic) { EXPECT_THROW(ParsePath(""), std::runtime_error); EXPECT_EQ(ParsePath("/"), AllocatedPath::FromFS(PATH_LITERAL("/"))); EXPECT_EQ(ParsePath("/abc"), AllocatedPath::FromFS(PATH_LITERAL("/abc"))); #ifdef _WIN32 EXPECT_EQ(ParsePath("c:/abc"), AllocatedPath::FromFS(PATH_LITERAL("c:/abc"))); EXPECT_EQ(ParsePath("c:\\abc"), AllocatedPath::FromFS(PATH_LITERAL("c:\\abc"))); #endif } #ifndef _WIN32 TEST(ParsePath, Tilde) { EXPECT_EQ(ParsePath("~"), AllocatedPath::FromFS(PATH_LITERAL("/home/foo"))); EXPECT_EQ(ParsePath("~/"), AllocatedPath::FromFS(PATH_LITERAL("/home/foo"))); EXPECT_EQ(ParsePath("~/abc"), AllocatedPath::FromFS(PATH_LITERAL("/home/foo/abc"))); EXPECT_EQ(ParsePath("~bar"), AllocatedPath::FromFS(PATH_LITERAL("/home/bar"))); EXPECT_EQ(ParsePath("~bar/"), AllocatedPath::FromFS(PATH_LITERAL("/home/bar"))); EXPECT_EQ(ParsePath("~bar/abc"), AllocatedPath::FromFS(PATH_LITERAL("/home/bar/abc"))); } TEST(ParsePath, Home) { EXPECT_EQ(ParsePath("$HOME"), AllocatedPath::FromFS(PATH_LITERAL("/home/foo"))); EXPECT_EQ(ParsePath("$HOME/"), AllocatedPath::FromFS(PATH_LITERAL("/home/foo"))); EXPECT_EQ(ParsePath("$HOME/abc"), AllocatedPath::FromFS(PATH_LITERAL("/home/foo/abc"))); } #endif #ifdef USE_XDG TEST(ParsePath, XDG) { EXPECT_EQ(ParsePath("$XDG_CONFIG_HOME"), AllocatedPath::FromFS(PATH_LITERAL("/home/foo/.config"))); EXPECT_EQ(ParsePath("$XDG_CONFIG_HOME/abc"), AllocatedPath::FromFS(PATH_LITERAL("/home/foo/.config/abc"))); EXPECT_EQ(ParsePath("$XDG_MUSIC_DIR"), AllocatedPath::FromFS(PATH_LITERAL("/home/foo/Music"))); EXPECT_EQ(ParsePath("$XDG_CACHE_HOME"), AllocatedPath::FromFS(PATH_LITERAL("/home/foo/.cache"))); EXPECT_EQ(ParsePath("$XDG_RUNTIME_DIR/mpd"), AllocatedPath::FromFS(PATH_LITERAL("/run/user/foo/mpd"))); } #endif