1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/nix/xdg_util.h"
6
7 #include "base/environment.h"
8 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 using ::testing::_;
12 using ::testing::Eq;
13 using ::testing::Return;
14 using ::testing::SetArgPointee;
15
16 namespace base {
17 namespace nix {
18
19 namespace {
20
21 class MockEnvironment : public Environment {
22 public:
23 MOCK_METHOD2(GetVar, bool(StringPiece, std::string* result));
24 MOCK_METHOD2(SetVar, bool(StringPiece, const std::string& new_value));
25 MOCK_METHOD1(UnSetVar, bool(StringPiece));
26 };
27
28 // Needs to be const char* to make gmock happy.
29 const char* const kDesktopGnome = "gnome";
30 const char* const kDesktopGnomeFallback = "gnome-fallback";
31 const char* const kDesktopMATE = "mate";
32 const char* const kDesktopKDE4 = "kde4";
33 const char* const kDesktopKDE = "kde";
34 const char* const kDesktopXFCE = "xfce";
35 const char* const kXdgDesktopCinnamon = "X-Cinnamon";
36 const char* const kXdgDesktopGNOME = "GNOME";
37 const char* const kXdgDesktopKDE = "KDE";
38 const char* const kXdgDesktopPantheon = "Pantheon";
39 const char* const kXdgDesktopUnity = "Unity";
40 const char* const kXdgDesktopUnity7 = "Unity:Unity7";
41 const char* const kXdgDesktopUnity8 = "Unity:Unity8";
42 const char* const kKDESessionKDE5 = "5";
43
44 const char kDesktopSession[] = "DESKTOP_SESSION";
45 const char kKDESession[] = "KDE_SESSION_VERSION";
46 const char kXdgDesktop[] = "XDG_CURRENT_DESKTOP";
47
48 } // namespace
49
TEST(XDGUtilTest,GetDesktopEnvironmentGnome)50 TEST(XDGUtilTest, GetDesktopEnvironmentGnome) {
51 MockEnvironment getter;
52 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
53 EXPECT_CALL(getter, GetVar(Eq(kDesktopSession), _))
54 .WillOnce(DoAll(SetArgPointee<1>(kDesktopGnome), Return(true)));
55
56 EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
57 }
58
TEST(XDGUtilTest,GetDesktopEnvironmentMATE)59 TEST(XDGUtilTest, GetDesktopEnvironmentMATE) {
60 MockEnvironment getter;
61 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
62 EXPECT_CALL(getter, GetVar(Eq(kDesktopSession), _))
63 .WillOnce(DoAll(SetArgPointee<1>(kDesktopMATE), Return(true)));
64
65 EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
66 }
67
TEST(XDGUtilTest,GetDesktopEnvironmentKDE4)68 TEST(XDGUtilTest, GetDesktopEnvironmentKDE4) {
69 MockEnvironment getter;
70 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
71 EXPECT_CALL(getter, GetVar(Eq(kDesktopSession), _))
72 .WillOnce(DoAll(SetArgPointee<1>(kDesktopKDE4), Return(true)));
73
74 EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE4, GetDesktopEnvironment(&getter));
75 }
76
TEST(XDGUtilTest,GetDesktopEnvironmentKDE3)77 TEST(XDGUtilTest, GetDesktopEnvironmentKDE3) {
78 MockEnvironment getter;
79 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
80 EXPECT_CALL(getter, GetVar(Eq(kDesktopSession), _))
81 .WillOnce(DoAll(SetArgPointee<1>(kDesktopKDE), Return(true)));
82
83 EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE3, GetDesktopEnvironment(&getter));
84 }
85
TEST(XDGUtilTest,GetDesktopEnvironmentXFCE)86 TEST(XDGUtilTest, GetDesktopEnvironmentXFCE) {
87 MockEnvironment getter;
88 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
89 EXPECT_CALL(getter, GetVar(Eq(kDesktopSession), _))
90 .WillOnce(DoAll(SetArgPointee<1>(kDesktopXFCE), Return(true)));
91
92 EXPECT_EQ(DESKTOP_ENVIRONMENT_XFCE, GetDesktopEnvironment(&getter));
93 }
94
TEST(XDGUtilTest,GetXdgDesktopCinnamon)95 TEST(XDGUtilTest, GetXdgDesktopCinnamon) {
96 MockEnvironment getter;
97 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
98 EXPECT_CALL(getter, GetVar(Eq(kXdgDesktop), _))
99 .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopCinnamon), Return(true)));
100
101 EXPECT_EQ(DESKTOP_ENVIRONMENT_CINNAMON, GetDesktopEnvironment(&getter));
102 }
103
TEST(XDGUtilTest,GetXdgDesktopGnome)104 TEST(XDGUtilTest, GetXdgDesktopGnome) {
105 MockEnvironment getter;
106 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
107 EXPECT_CALL(getter, GetVar(Eq(kXdgDesktop), _))
108 .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopGNOME), Return(true)));
109
110 EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
111 }
112
TEST(XDGUtilTest,GetXdgDesktopGnomeFallback)113 TEST(XDGUtilTest, GetXdgDesktopGnomeFallback) {
114 MockEnvironment getter;
115 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
116 EXPECT_CALL(getter, GetVar(Eq(kXdgDesktop), _))
117 .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopUnity), Return(true)));
118 EXPECT_CALL(getter, GetVar(Eq(kDesktopSession), _))
119 .WillOnce(DoAll(SetArgPointee<1>(kDesktopGnomeFallback), Return(true)));
120
121 EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
122 }
123
TEST(XDGUtilTest,GetXdgDesktopKDE5)124 TEST(XDGUtilTest, GetXdgDesktopKDE5) {
125 MockEnvironment getter;
126 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
127 EXPECT_CALL(getter, GetVar(Eq(kXdgDesktop), _))
128 .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopKDE), Return(true)));
129 EXPECT_CALL(getter, GetVar(Eq(kKDESession), _))
130 .WillOnce(DoAll(SetArgPointee<1>(kKDESessionKDE5), Return(true)));
131
132 EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE5, GetDesktopEnvironment(&getter));
133 }
134
TEST(XDGUtilTest,GetXdgDesktopKDE4)135 TEST(XDGUtilTest, GetXdgDesktopKDE4) {
136 MockEnvironment getter;
137 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
138 EXPECT_CALL(getter, GetVar(Eq(kXdgDesktop), _))
139 .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopKDE), Return(true)));
140
141 EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE4, GetDesktopEnvironment(&getter));
142 }
143
TEST(XDGUtilTest,GetXdgDesktopPantheon)144 TEST(XDGUtilTest, GetXdgDesktopPantheon) {
145 MockEnvironment getter;
146 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
147 EXPECT_CALL(getter, GetVar(Eq(kXdgDesktop), _))
148 .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopPantheon), Return(true)));
149
150 EXPECT_EQ(DESKTOP_ENVIRONMENT_PANTHEON, GetDesktopEnvironment(&getter));
151 }
152
TEST(XDGUtilTest,GetXdgDesktopUnity)153 TEST(XDGUtilTest, GetXdgDesktopUnity) {
154 MockEnvironment getter;
155 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
156 EXPECT_CALL(getter, GetVar(Eq(kXdgDesktop), _))
157 .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopUnity), Return(true)));
158
159 EXPECT_EQ(DESKTOP_ENVIRONMENT_UNITY, GetDesktopEnvironment(&getter));
160 }
161
TEST(XDGUtilTest,GetXdgDesktopUnity7)162 TEST(XDGUtilTest, GetXdgDesktopUnity7) {
163 MockEnvironment getter;
164 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
165 EXPECT_CALL(getter, GetVar(Eq(kXdgDesktop), _))
166 .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopUnity7), Return(true)));
167
168 EXPECT_EQ(DESKTOP_ENVIRONMENT_UNITY, GetDesktopEnvironment(&getter));
169 }
170
TEST(XDGUtilTest,GetXdgDesktopUnity8)171 TEST(XDGUtilTest, GetXdgDesktopUnity8) {
172 MockEnvironment getter;
173 EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
174 EXPECT_CALL(getter, GetVar(Eq(kXdgDesktop), _))
175 .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopUnity8), Return(true)));
176
177 EXPECT_EQ(DESKTOP_ENVIRONMENT_UNITY, GetDesktopEnvironment(&getter));
178 }
179
180 } // namespace nix
181 } // namespace base
182