143 lines
3.5 KiB
C++
143 lines
3.5 KiB
C++
// 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
|