You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			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
 |