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;
}
|