summaryrefslogtreecommitdiff
path: root/test/test-xdg.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test/test-xdg.cc')
-rw-r--r--test/test-xdg.cc60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/test-xdg.cc b/test/test-xdg.cc
new file mode 100644
index 0000000..54ff597
--- /dev/null
+++ b/test/test-xdg.cc
@@ -0,0 +1,60 @@
+// -*- 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;
+}
+