// -*- mode: c++; c-basic-offset: 2; -*- #include "common.hh" #include "test.hh" #include "paths.hh" #include "xdg.hh" namespace { bool test_fallback() { unsetenv("XDG_DATA_HOME"); unsetenv("XDG_DATA_DIRS"); std::string def = Paths::join(XDG::home(), ".local/share"); ASSERT_EQ(def, XDG::data_home()); auto dirs = XDG::data_dirs(); ASSERT_EQ(3UL, dirs.size()); ASSERT_EQ(def, dirs[0]); ASSERT_EQ("/usr/local/share", dirs[1]); ASSERT_EQ("/usr/share", dirs[2]); return true; } bool test_basic() { setenv("XDG_DATA_HOME", "/home/user/share", 1); setenv("XDG_DATA_DIRS", "/sw/share:/usr/share/enlightenment:/usr/share", 1); ASSERT_EQ("/home/user/share", XDG::data_home()); auto dirs = XDG::data_dirs(); ASSERT_EQ(4UL, dirs.size()); ASSERT_EQ("/home/user/share", dirs[0]); ASSERT_EQ("/sw/share", dirs[1]); ASSERT_EQ("/usr/share/enlightenment", dirs[2]); ASSERT_EQ("/usr/share", dirs[3]); return true; } bool test_evil() { unsetenv("XDG_DATA_HOME"); setenv("XDG_DATA_DIRS", "::/tmp/share:/usr/share:/usr/share:/other:/usr/share:/tmp/share", 1); std::string def = Paths::join(XDG::home(), ".local/share"); ASSERT_EQ(def, XDG::data_home()); auto dirs = XDG::data_dirs(); ASSERT_EQ(4UL, dirs.size()); ASSERT_EQ(def, dirs[0]); ASSERT_EQ("/tmp/share", dirs[1]); ASSERT_EQ("/usr/share", dirs[2]); ASSERT_EQ("/other", dirs[3]); return true; } } // namespace int main(void) { BEFORE; RUN(test_fallback()); RUN(test_basic()); RUN(test_evil()); AFTER; }