summaryrefslogtreecommitdiff
path: root/test/test-xdg.cc
blob: 54ff597294a52b25a72fe7fb7b7cd9c76c55a080 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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;
}