view modules/xdg/test/main.cpp @ 548:f48bb09bccc7

Misc: huge cleanup, switch to spaces
author David Demelier <markand@malikania.fr>
date Wed, 15 Jun 2016 13:13:26 +0200
parents b26d8be94adb
children ff11ca6b0d55
line wrap: on
line source

/*
 * main.cpp -- main test file for XDG
 *
 * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr>
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#include <gtest/gtest.h>

#include <xdg.hpp>

using namespace testing;

namespace {

std::string myhome;

}

#if defined(_WIN32)

inline bool unsetenv(std::string name)
{
    name += "=";

    _putenv(name.c_str());

    return true;
}

inline bool setenv(const std::string &name, const std::string &value, bool)
{
    std::string t = name + "=" + value;

    _putenv(t.c_str());

    return true;
}

#endif

TEST(HomeEmpty, config)
{
    ASSERT_TRUE(unsetenv("XDG_CONFIG_HOME") == 0);

    Xdg xdg;

    ASSERT_EQ(myhome + "/.config", xdg.configHome());
}

TEST(HomeEmpty, data)
{
    ASSERT_TRUE(unsetenv("XDG_DATA_HOME") == 0);

    Xdg xdg;

    ASSERT_EQ(myhome + "/.local/share", xdg.dataHome());
}

TEST(HomeEmpty, cache)
{
    ASSERT_TRUE(unsetenv("XDG_CACHE_HOME") == 0);

    Xdg xdg;

    ASSERT_EQ(myhome + "/.cache", xdg.cacheHome());
}

TEST(HomeEmpty, runtime)
{
    ASSERT_TRUE(unsetenv("XDG_RUNTIME_DIR") == 0);

    Xdg xdg;

    ASSERT_TRUE(xdg.runtimeDir().empty());
}

TEST(HomeValid, config)
{
    ASSERT_TRUE(setenv("XDG_CONFIG_HOME", "/test/config", true) == 0);

    Xdg xdg;

    ASSERT_EQ("/test/config", xdg.configHome());
}

TEST(HomeValid, data)
{
    ASSERT_TRUE(setenv("XDG_DATA_HOME", "/test/data", true) == 0);

    Xdg xdg;

    ASSERT_EQ("/test/data", xdg.dataHome());
}

TEST(HomeValid, cache)
{
    ASSERT_TRUE(setenv("XDG_CACHE_HOME", "/test/cache", true) == 0);

    Xdg xdg;

    ASSERT_EQ("/test/cache", xdg.cacheHome());
}

TEST(HomeValid, runtime)
{
    ASSERT_TRUE(setenv("XDG_RUNTIME_DIR", "/test/runtime", true) == 0);

    Xdg xdg;

    ASSERT_EQ("/test/runtime", xdg.runtimeDir());
}

TEST(HomeInvalid, config)
{
    ASSERT_TRUE(setenv("XDG_CONFIG_HOME", "invalid", true) == 0);

    Xdg xdg;

    ASSERT_EQ(myhome + "/.config", xdg.configHome());
}

TEST(HomeInvalid, data)
{
    ASSERT_TRUE(setenv("XDG_DATA_HOME", "invalid", true) == 0);

    Xdg xdg;

    ASSERT_EQ(myhome + "/.local/share", xdg.dataHome());
}

TEST(HomeInvalid, cache)
{
    ASSERT_TRUE(setenv("XDG_CACHE_HOME", "invalid", true) == 0);

    Xdg xdg;

    ASSERT_EQ(myhome + "/.cache", xdg.cacheHome());
}

TEST(HomeInvalid, runtime)
{
    ASSERT_TRUE(setenv("XDG_RUNTIME_DIR", "invalid", true) == 0);

    Xdg xdg;

    ASSERT_TRUE(xdg.runtimeDir().empty());
}

TEST(DirectoriesEmpty, config)
{
    ASSERT_TRUE(unsetenv("XDG_CONFIG_DIRS") == 0);

    Xdg xdg;

    const auto &list = xdg.configDirs();

    ASSERT_EQ((size_t)1, list.size());
    ASSERT_EQ("/etc/xdg", list[0]);
}

TEST(DirectoriesEmpty, data)
{
    ASSERT_TRUE(unsetenv("XDG_DATA_DIRS") == 0);

    Xdg xdg;

    const auto &list = xdg.dataDirs();

    ASSERT_EQ((size_t)2, list.size());
    ASSERT_EQ("/usr/local/share", list[0]);
    ASSERT_EQ("/usr/share", list[1]);
}

TEST(DirectoriesValid, config)
{
    ASSERT_TRUE(setenv("XDG_CONFIG_DIRS", "/config1:/config2", true) == 0);

    Xdg xdg;

    const auto &list = xdg.configDirs();

    ASSERT_EQ((size_t)2, list.size());
    ASSERT_EQ("/config1", list[0]);
    ASSERT_EQ("/config2", list[1]);
}

TEST(DirectoriesValid, data)
{
    ASSERT_TRUE(setenv("XDG_DATA_DIRS", "/data1:/data2", true) == 0);

    Xdg xdg;

    const auto &list = xdg.dataDirs();

    ASSERT_EQ((size_t)2, list.size());
    ASSERT_EQ("/data1", list[0]);
    ASSERT_EQ("/data2", list[1]);
}

TEST(DirectoriesInvalid, config)
{
    ASSERT_TRUE(setenv("XDG_CONFIG_DIRS", "bad1:bad2", true) == 0);

    Xdg xdg;

    const auto &list = xdg.configDirs();

    ASSERT_EQ((size_t)1, list.size());
    ASSERT_EQ("/etc/xdg", list[0]);
}

TEST(DirectoriesInvalid, data)
{
    ASSERT_TRUE(setenv("XDG_DATA_DIRS", "bad1:bad2", true) == 0);

    Xdg xdg;

    const auto &list = xdg.dataDirs();

    ASSERT_EQ((size_t)2, list.size());
    ASSERT_EQ("/usr/local/share", list[0]);
    ASSERT_EQ("/usr/share", list[1]);
}

TEST(DirectoriesMixed, config)
{
    ASSERT_TRUE(setenv("XDG_CONFIG_DIRS", "/config1:bad:/config2", true) == 0);

    Xdg xdg;

    const auto &list = xdg.configDirs();

    ASSERT_EQ((size_t)2, list.size());
    ASSERT_EQ("/config1", list[0]);
    ASSERT_EQ("/config2", list[1]);
}

TEST(DirectoriesMixed, data)
{
    ASSERT_TRUE(setenv("XDG_DATA_DIRS", "/data1:bad:/data2", true) == 0);

    Xdg xdg;

    const auto &list = xdg.dataDirs();

    ASSERT_EQ((size_t)2, list.size());
    ASSERT_EQ("/data1", list[0]);
    ASSERT_EQ("/data2", list[1]);
}

int main(int argc, char **argv)
{
    auto home = getenv("HOME");

    if (home == nullptr)
        return 0;

    myhome = home;
    InitGoogleTest(&argc, argv);

    return RUN_ALL_TESTS();
}