1*6777b538SAndroid Build Coastguard Worker // Copyright 2010 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include "base/nix/xdg_util.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include <string_view>
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard Worker #include "base/base_paths.h"
10*6777b538SAndroid Build Coastguard Worker #include "base/command_line.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/environment.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback_helpers.h"
14*6777b538SAndroid Build Coastguard Worker #include "base/nix/scoped_xdg_activation_token_injector.h"
15*6777b538SAndroid Build Coastguard Worker #include "base/process/launch.h"
16*6777b538SAndroid Build Coastguard Worker #include "base/test/bind.h"
17*6777b538SAndroid Build Coastguard Worker #include "base/test/scoped_path_override.h"
18*6777b538SAndroid Build Coastguard Worker #include "testing/gmock/include/gmock/gmock.h"
19*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
20*6777b538SAndroid Build Coastguard Worker
21*6777b538SAndroid Build Coastguard Worker using ::testing::_;
22*6777b538SAndroid Build Coastguard Worker using ::testing::DoAll;
23*6777b538SAndroid Build Coastguard Worker using ::testing::Eq;
24*6777b538SAndroid Build Coastguard Worker using ::testing::Return;
25*6777b538SAndroid Build Coastguard Worker using ::testing::SetArgPointee;
26*6777b538SAndroid Build Coastguard Worker
27*6777b538SAndroid Build Coastguard Worker namespace base {
28*6777b538SAndroid Build Coastguard Worker namespace nix {
29*6777b538SAndroid Build Coastguard Worker
30*6777b538SAndroid Build Coastguard Worker namespace {
31*6777b538SAndroid Build Coastguard Worker
32*6777b538SAndroid Build Coastguard Worker class MockEnvironment : public Environment {
33*6777b538SAndroid Build Coastguard Worker public:
34*6777b538SAndroid Build Coastguard Worker MOCK_METHOD2(GetVar, bool(std::string_view, std::string* result));
35*6777b538SAndroid Build Coastguard Worker MOCK_METHOD2(SetVar, bool(std::string_view, const std::string& new_value));
36*6777b538SAndroid Build Coastguard Worker MOCK_METHOD1(UnSetVar, bool(std::string_view));
37*6777b538SAndroid Build Coastguard Worker };
38*6777b538SAndroid Build Coastguard Worker
39*6777b538SAndroid Build Coastguard Worker // Needs to be const char* to make gmock happy.
40*6777b538SAndroid Build Coastguard Worker const char* const kDesktopGnome = "gnome";
41*6777b538SAndroid Build Coastguard Worker const char* const kDesktopGnomeFallback = "gnome-fallback";
42*6777b538SAndroid Build Coastguard Worker const char* const kDesktopMATE = "mate";
43*6777b538SAndroid Build Coastguard Worker const char* const kDesktopKDE4 = "kde4";
44*6777b538SAndroid Build Coastguard Worker const char* const kDesktopKDE = "kde";
45*6777b538SAndroid Build Coastguard Worker const char* const kDesktopXFCE = "xfce";
46*6777b538SAndroid Build Coastguard Worker const char* const kXdgDesktopCinnamon = "X-Cinnamon";
47*6777b538SAndroid Build Coastguard Worker const char* const kXdgDesktopDeepin = "Deepin";
48*6777b538SAndroid Build Coastguard Worker const char* const kXdgDesktopGNOME = "GNOME";
49*6777b538SAndroid Build Coastguard Worker const char* const kXdgDesktopGNOMEClassic = "GNOME:GNOME-Classic";
50*6777b538SAndroid Build Coastguard Worker const char* const kXdgDesktopKDE = "KDE";
51*6777b538SAndroid Build Coastguard Worker const char* const kXdgDesktopPantheon = "Pantheon";
52*6777b538SAndroid Build Coastguard Worker const char* const kXdgDesktopUKUI = "UKUI";
53*6777b538SAndroid Build Coastguard Worker const char* const kXdgDesktopUnity = "Unity";
54*6777b538SAndroid Build Coastguard Worker const char* const kXdgDesktopUnity7 = "Unity:Unity7";
55*6777b538SAndroid Build Coastguard Worker const char* const kXdgDesktopUnity8 = "Unity:Unity8";
56*6777b538SAndroid Build Coastguard Worker const char* const kKDESessionKDE5 = "5";
57*6777b538SAndroid Build Coastguard Worker const char* const kKDESessionKDE6 = "6";
58*6777b538SAndroid Build Coastguard Worker
59*6777b538SAndroid Build Coastguard Worker const char kDesktopSession[] = "DESKTOP_SESSION";
60*6777b538SAndroid Build Coastguard Worker const char kKDESession[] = "KDE_SESSION_VERSION";
61*6777b538SAndroid Build Coastguard Worker
62*6777b538SAndroid Build Coastguard Worker const char* const kSessionUnknown = "invalid session";
63*6777b538SAndroid Build Coastguard Worker const char* const kSessionUnspecified = "unspecified";
64*6777b538SAndroid Build Coastguard Worker const char* const kSessionTty = "tty";
65*6777b538SAndroid Build Coastguard Worker const char* const kSessionMir = "mir";
66*6777b538SAndroid Build Coastguard Worker const char* const kSessionX11 = "x11";
67*6777b538SAndroid Build Coastguard Worker const char* const kSessionWayland = "wayland";
68*6777b538SAndroid Build Coastguard Worker const char* const kSessionWaylandCapital = "Wayland";
69*6777b538SAndroid Build Coastguard Worker const char* const kSessionWaylandWhitespace = "wayland ";
70*6777b538SAndroid Build Coastguard Worker const char* const kXdgActivationTokenFromEnv = "test token from env";
71*6777b538SAndroid Build Coastguard Worker const char* const kXdgActivationTokenFromCmdLine = "test token from cmd line";
72*6777b538SAndroid Build Coastguard Worker
73*6777b538SAndroid Build Coastguard Worker // This helps EXPECT_THAT(..., ElementsAre(...)) print out more meaningful
74*6777b538SAndroid Build Coastguard Worker // failure messages.
FilePathsToStrings(const std::vector<base::FilePath> & paths)75*6777b538SAndroid Build Coastguard Worker std::vector<std::string> FilePathsToStrings(
76*6777b538SAndroid Build Coastguard Worker const std::vector<base::FilePath>& paths) {
77*6777b538SAndroid Build Coastguard Worker std::vector<std::string> values;
78*6777b538SAndroid Build Coastguard Worker for (const auto& path : paths) {
79*6777b538SAndroid Build Coastguard Worker values.push_back(path.value());
80*6777b538SAndroid Build Coastguard Worker }
81*6777b538SAndroid Build Coastguard Worker return values;
82*6777b538SAndroid Build Coastguard Worker }
83*6777b538SAndroid Build Coastguard Worker
84*6777b538SAndroid Build Coastguard Worker } // namespace
85*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXDGDataWriteLocation)86*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXDGDataWriteLocation) {
87*6777b538SAndroid Build Coastguard Worker // Test that it returns $XDG_DATA_HOME.
88*6777b538SAndroid Build Coastguard Worker {
89*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
90*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq("XDG_DATA_HOME"), _))
91*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>("/user/path"), Return(true)));
92*6777b538SAndroid Build Coastguard Worker
93*6777b538SAndroid Build Coastguard Worker ScopedPathOverride home_override(DIR_HOME, FilePath("/home/user"),
94*6777b538SAndroid Build Coastguard Worker /*is_absolute=*/true, /*create=*/false);
95*6777b538SAndroid Build Coastguard Worker FilePath path = GetXDGDataWriteLocation(&getter);
96*6777b538SAndroid Build Coastguard Worker EXPECT_EQ("/user/path", path.value());
97*6777b538SAndroid Build Coastguard Worker }
98*6777b538SAndroid Build Coastguard Worker
99*6777b538SAndroid Build Coastguard Worker // Test that $XDG_DATA_HOME falls back to $HOME/.local/share.
100*6777b538SAndroid Build Coastguard Worker {
101*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
102*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
103*6777b538SAndroid Build Coastguard Worker ScopedPathOverride home_override(DIR_HOME, FilePath("/home/user"),
104*6777b538SAndroid Build Coastguard Worker /*is_absolute=*/true, /*create=*/false);
105*6777b538SAndroid Build Coastguard Worker FilePath path = GetXDGDataWriteLocation(&getter);
106*6777b538SAndroid Build Coastguard Worker EXPECT_EQ("/home/user/.local/share", path.value());
107*6777b538SAndroid Build Coastguard Worker }
108*6777b538SAndroid Build Coastguard Worker }
109*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXDGDataSearchLocations)110*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXDGDataSearchLocations) {
111*6777b538SAndroid Build Coastguard Worker // Test that it returns $XDG_DATA_HOME + $XDG_DATA_DIRS.
112*6777b538SAndroid Build Coastguard Worker {
113*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
114*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq("XDG_DATA_HOME"), _))
115*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>("/user/path"), Return(true)));
116*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq("XDG_DATA_DIRS"), _))
117*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>("/system/path/1:/system/path/2"),
118*6777b538SAndroid Build Coastguard Worker Return(true)));
119*6777b538SAndroid Build Coastguard Worker ScopedPathOverride home_override(DIR_HOME, FilePath("/home/user"),
120*6777b538SAndroid Build Coastguard Worker /*is_absolute=*/true, /*create=*/false);
121*6777b538SAndroid Build Coastguard Worker EXPECT_THAT(
122*6777b538SAndroid Build Coastguard Worker FilePathsToStrings(GetXDGDataSearchLocations(&getter)),
123*6777b538SAndroid Build Coastguard Worker testing::ElementsAre("/user/path", "/system/path/1", "/system/path/2"));
124*6777b538SAndroid Build Coastguard Worker }
125*6777b538SAndroid Build Coastguard Worker
126*6777b538SAndroid Build Coastguard Worker // Test that $XDG_DATA_HOME falls back to $HOME/.local/share.
127*6777b538SAndroid Build Coastguard Worker {
128*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
129*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
130*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq("XDG_DATA_DIRS"), _))
131*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>("/system/path/1:/system/path/2"),
132*6777b538SAndroid Build Coastguard Worker Return(true)));
133*6777b538SAndroid Build Coastguard Worker
134*6777b538SAndroid Build Coastguard Worker ScopedPathOverride home_override(DIR_HOME, FilePath("/home/user"),
135*6777b538SAndroid Build Coastguard Worker /*is_absolute=*/true, /*create=*/false);
136*6777b538SAndroid Build Coastguard Worker EXPECT_THAT(FilePathsToStrings(GetXDGDataSearchLocations(&getter)),
137*6777b538SAndroid Build Coastguard Worker testing::ElementsAre("/home/user/.local/share",
138*6777b538SAndroid Build Coastguard Worker "/system/path/1", "/system/path/2"));
139*6777b538SAndroid Build Coastguard Worker }
140*6777b538SAndroid Build Coastguard Worker
141*6777b538SAndroid Build Coastguard Worker // Test that if neither $XDG_DATA_HOME nor $HOME are specified, it still
142*6777b538SAndroid Build Coastguard Worker // succeeds.
143*6777b538SAndroid Build Coastguard Worker {
144*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
145*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
146*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq("XDG_DATA_DIRS"), _))
147*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>("/system/path/1:/system/path/2"),
148*6777b538SAndroid Build Coastguard Worker Return(true)));
149*6777b538SAndroid Build Coastguard Worker std::vector<std::string> results =
150*6777b538SAndroid Build Coastguard Worker FilePathsToStrings(GetXDGDataSearchLocations(&getter));
151*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(3U, results.size());
152*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(results[0].empty());
153*6777b538SAndroid Build Coastguard Worker EXPECT_EQ("/system/path/1", results[1]);
154*6777b538SAndroid Build Coastguard Worker EXPECT_EQ("/system/path/2", results[2]);
155*6777b538SAndroid Build Coastguard Worker }
156*6777b538SAndroid Build Coastguard Worker
157*6777b538SAndroid Build Coastguard Worker // Test that $XDG_DATA_DIRS falls back to the two default paths.
158*6777b538SAndroid Build Coastguard Worker {
159*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
160*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
161*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq("XDG_DATA_HOME"), _))
162*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>("/user/path"), Return(true)));
163*6777b538SAndroid Build Coastguard Worker ScopedPathOverride home_override(DIR_HOME, FilePath("/home/user"),
164*6777b538SAndroid Build Coastguard Worker /*is_absolute=*/true, /*create=*/false);
165*6777b538SAndroid Build Coastguard Worker EXPECT_THAT(
166*6777b538SAndroid Build Coastguard Worker FilePathsToStrings(GetXDGDataSearchLocations(&getter)),
167*6777b538SAndroid Build Coastguard Worker testing::ElementsAre("/user/path", "/usr/local/share", "/usr/share"));
168*6777b538SAndroid Build Coastguard Worker }
169*6777b538SAndroid Build Coastguard Worker }
170*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetDesktopEnvironmentGnome)171*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetDesktopEnvironmentGnome) {
172*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
173*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
174*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kDesktopSession), _))
175*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kDesktopGnome), Return(true)));
176*6777b538SAndroid Build Coastguard Worker
177*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
178*6777b538SAndroid Build Coastguard Worker }
179*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetDesktopEnvironmentMATE)180*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetDesktopEnvironmentMATE) {
181*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
182*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
183*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kDesktopSession), _))
184*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kDesktopMATE), Return(true)));
185*6777b538SAndroid Build Coastguard Worker
186*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
187*6777b538SAndroid Build Coastguard Worker }
188*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetDesktopEnvironmentKDE4)189*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetDesktopEnvironmentKDE4) {
190*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
191*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
192*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kDesktopSession), _))
193*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kDesktopKDE4), Return(true)));
194*6777b538SAndroid Build Coastguard Worker
195*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE4, GetDesktopEnvironment(&getter));
196*6777b538SAndroid Build Coastguard Worker }
197*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetDesktopEnvironmentKDE3)198*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetDesktopEnvironmentKDE3) {
199*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
200*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
201*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kDesktopSession), _))
202*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kDesktopKDE), Return(true)));
203*6777b538SAndroid Build Coastguard Worker
204*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE3, GetDesktopEnvironment(&getter));
205*6777b538SAndroid Build Coastguard Worker }
206*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetDesktopEnvironmentXFCE)207*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetDesktopEnvironmentXFCE) {
208*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
209*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
210*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kDesktopSession), _))
211*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kDesktopXFCE), Return(true)));
212*6777b538SAndroid Build Coastguard Worker
213*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_XFCE, GetDesktopEnvironment(&getter));
214*6777b538SAndroid Build Coastguard Worker }
215*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopCinnamon)216*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopCinnamon) {
217*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
218*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
219*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
220*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopCinnamon), Return(true)));
221*6777b538SAndroid Build Coastguard Worker
222*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_CINNAMON, GetDesktopEnvironment(&getter));
223*6777b538SAndroid Build Coastguard Worker }
224*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopDeepin)225*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopDeepin) {
226*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
227*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
228*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
229*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopDeepin), Return(true)));
230*6777b538SAndroid Build Coastguard Worker
231*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_DEEPIN, GetDesktopEnvironment(&getter));
232*6777b538SAndroid Build Coastguard Worker }
233*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopGnome)234*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopGnome) {
235*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
236*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
237*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
238*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopGNOME), Return(true)));
239*6777b538SAndroid Build Coastguard Worker
240*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
241*6777b538SAndroid Build Coastguard Worker }
242*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopGnomeClassic)243*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopGnomeClassic) {
244*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
245*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
246*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
247*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopGNOMEClassic), Return(true)));
248*6777b538SAndroid Build Coastguard Worker
249*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
250*6777b538SAndroid Build Coastguard Worker }
251*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopGnomeFallback)252*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopGnomeFallback) {
253*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
254*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
255*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
256*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopUnity), Return(true)));
257*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kDesktopSession), _))
258*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kDesktopGnomeFallback), Return(true)));
259*6777b538SAndroid Build Coastguard Worker
260*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_GNOME, GetDesktopEnvironment(&getter));
261*6777b538SAndroid Build Coastguard Worker }
262*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopKDE5)263*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopKDE5) {
264*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
265*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
266*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
267*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopKDE), Return(true)));
268*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kKDESession), _))
269*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kKDESessionKDE5), Return(true)));
270*6777b538SAndroid Build Coastguard Worker
271*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE5, GetDesktopEnvironment(&getter));
272*6777b538SAndroid Build Coastguard Worker }
273*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopKDE6)274*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopKDE6) {
275*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
276*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
277*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
278*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopKDE), Return(true)));
279*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kKDESession), _))
280*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kKDESessionKDE6), Return(true)));
281*6777b538SAndroid Build Coastguard Worker
282*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE6, GetDesktopEnvironment(&getter));
283*6777b538SAndroid Build Coastguard Worker }
284*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopKDE4)285*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopKDE4) {
286*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
287*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
288*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
289*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopKDE), Return(true)));
290*6777b538SAndroid Build Coastguard Worker
291*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_KDE4, GetDesktopEnvironment(&getter));
292*6777b538SAndroid Build Coastguard Worker }
293*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopPantheon)294*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopPantheon) {
295*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
296*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
297*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
298*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopPantheon), Return(true)));
299*6777b538SAndroid Build Coastguard Worker
300*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_PANTHEON, GetDesktopEnvironment(&getter));
301*6777b538SAndroid Build Coastguard Worker }
302*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopUKUI)303*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopUKUI) {
304*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
305*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
306*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
307*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopUKUI), Return(true)));
308*6777b538SAndroid Build Coastguard Worker
309*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_UKUI, GetDesktopEnvironment(&getter));
310*6777b538SAndroid Build Coastguard Worker }
311*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopUnity)312*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopUnity) {
313*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
314*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
315*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
316*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopUnity), Return(true)));
317*6777b538SAndroid Build Coastguard Worker
318*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_UNITY, GetDesktopEnvironment(&getter));
319*6777b538SAndroid Build Coastguard Worker }
320*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopUnity7)321*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopUnity7) {
322*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
323*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
324*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
325*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopUnity7), Return(true)));
326*6777b538SAndroid Build Coastguard Worker
327*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_UNITY, GetDesktopEnvironment(&getter));
328*6777b538SAndroid Build Coastguard Worker }
329*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgDesktopUnity8)330*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgDesktopUnity8) {
331*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
332*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
333*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgCurrentDesktopEnvVar), _))
334*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kXdgDesktopUnity8), Return(true)));
335*6777b538SAndroid Build Coastguard Worker
336*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(DESKTOP_ENVIRONMENT_UNITY, GetDesktopEnvironment(&getter));
337*6777b538SAndroid Build Coastguard Worker }
338*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgSessiontypeUnset)339*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgSessiontypeUnset) {
340*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
341*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
342*6777b538SAndroid Build Coastguard Worker
343*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(SessionType::kUnset, GetSessionType(getter));
344*6777b538SAndroid Build Coastguard Worker }
345*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgSessionTypeOther)346*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgSessionTypeOther) {
347*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
348*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
349*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgSessionTypeEnvVar), _))
350*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kSessionUnknown), Return(true)));
351*6777b538SAndroid Build Coastguard Worker
352*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(SessionType::kOther, GetSessionType(getter));
353*6777b538SAndroid Build Coastguard Worker }
354*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgSessionTypeUnspecified)355*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgSessionTypeUnspecified) {
356*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
357*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
358*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgSessionTypeEnvVar), _))
359*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kSessionUnspecified), Return(true)));
360*6777b538SAndroid Build Coastguard Worker
361*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(SessionType::kUnspecified, GetSessionType(getter));
362*6777b538SAndroid Build Coastguard Worker }
363*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgSessionTypeTty)364*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgSessionTypeTty) {
365*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
366*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
367*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgSessionTypeEnvVar), _))
368*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kSessionTty), Return(true)));
369*6777b538SAndroid Build Coastguard Worker
370*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(SessionType::kTty, GetSessionType(getter));
371*6777b538SAndroid Build Coastguard Worker }
372*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgSessionTypeMir)373*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgSessionTypeMir) {
374*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
375*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
376*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgSessionTypeEnvVar), _))
377*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kSessionMir), Return(true)));
378*6777b538SAndroid Build Coastguard Worker
379*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(SessionType::kMir, GetSessionType(getter));
380*6777b538SAndroid Build Coastguard Worker }
381*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgSessionTypeX11)382*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgSessionTypeX11) {
383*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
384*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
385*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgSessionTypeEnvVar), _))
386*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kSessionX11), Return(true)));
387*6777b538SAndroid Build Coastguard Worker
388*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(SessionType::kX11, GetSessionType(getter));
389*6777b538SAndroid Build Coastguard Worker }
390*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgSessionTypeWayland)391*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgSessionTypeWayland) {
392*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
393*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
394*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgSessionTypeEnvVar), _))
395*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kSessionWayland), Return(true)));
396*6777b538SAndroid Build Coastguard Worker
397*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(SessionType::kWayland, GetSessionType(getter));
398*6777b538SAndroid Build Coastguard Worker }
399*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgSessionTypeWaylandCapital)400*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgSessionTypeWaylandCapital) {
401*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
402*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
403*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgSessionTypeEnvVar), _))
404*6777b538SAndroid Build Coastguard Worker .WillOnce(DoAll(SetArgPointee<1>(kSessionWaylandCapital), Return(true)));
405*6777b538SAndroid Build Coastguard Worker
406*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(SessionType::kWayland, GetSessionType(getter));
407*6777b538SAndroid Build Coastguard Worker }
408*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,GetXdgSessionTypeWaylandWhitespace)409*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, GetXdgSessionTypeWaylandWhitespace) {
410*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
411*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
412*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq(kXdgSessionTypeEnvVar), _))
413*6777b538SAndroid Build Coastguard Worker .WillOnce(
414*6777b538SAndroid Build Coastguard Worker DoAll(SetArgPointee<1>(kSessionWaylandWhitespace), Return(true)));
415*6777b538SAndroid Build Coastguard Worker
416*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(SessionType::kWayland, GetSessionType(getter));
417*6777b538SAndroid Build Coastguard Worker }
418*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,ExtractXdgActivationTokenFromEnvNotSet)419*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, ExtractXdgActivationTokenFromEnvNotSet) {
420*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
421*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(_, _)).WillRepeatedly(Return(false));
422*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(std::nullopt, ExtractXdgActivationTokenFromEnv(getter));
423*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(std::nullopt, TakeXdgActivationToken());
424*6777b538SAndroid Build Coastguard Worker }
425*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,ExtractXdgActivationTokenFromEnv)426*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, ExtractXdgActivationTokenFromEnv) {
427*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
428*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq("XDG_ACTIVATION_TOKEN"), _))
429*6777b538SAndroid Build Coastguard Worker .WillOnce(
430*6777b538SAndroid Build Coastguard Worker DoAll(SetArgPointee<1>(kXdgActivationTokenFromEnv), Return(true)));
431*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, UnSetVar(Eq("XDG_ACTIVATION_TOKEN")));
432*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kXdgActivationTokenFromEnv,
433*6777b538SAndroid Build Coastguard Worker ExtractXdgActivationTokenFromEnv(getter));
434*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kXdgActivationTokenFromEnv, TakeXdgActivationToken());
435*6777b538SAndroid Build Coastguard Worker // Should be cleared after the token is taken once.
436*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(std::nullopt, TakeXdgActivationToken());
437*6777b538SAndroid Build Coastguard Worker }
438*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,ExtractXdgActivationTokenFromCmdLineNotSet)439*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, ExtractXdgActivationTokenFromCmdLineNotSet) {
440*6777b538SAndroid Build Coastguard Worker CommandLine command_line(CommandLine::NO_PROGRAM);
441*6777b538SAndroid Build Coastguard Worker ExtractXdgActivationTokenFromCmdLine(command_line);
442*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(std::nullopt, TakeXdgActivationToken());
443*6777b538SAndroid Build Coastguard Worker }
444*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,ExtractXdgActivationTokenFromCmdLine)445*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, ExtractXdgActivationTokenFromCmdLine) {
446*6777b538SAndroid Build Coastguard Worker CommandLine command_line(CommandLine::NO_PROGRAM);
447*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
448*6777b538SAndroid Build Coastguard Worker // Extract activation token initially from env.
449*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq("XDG_ACTIVATION_TOKEN"), _))
450*6777b538SAndroid Build Coastguard Worker .WillOnce(
451*6777b538SAndroid Build Coastguard Worker DoAll(SetArgPointee<1>(kXdgActivationTokenFromEnv), Return(true)));
452*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, UnSetVar(Eq("XDG_ACTIVATION_TOKEN")));
453*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kXdgActivationTokenFromEnv,
454*6777b538SAndroid Build Coastguard Worker ExtractXdgActivationTokenFromEnv(getter));
455*6777b538SAndroid Build Coastguard Worker // Now extract token from command line.
456*6777b538SAndroid Build Coastguard Worker command_line.AppendSwitchASCII(kXdgActivationTokenSwitch,
457*6777b538SAndroid Build Coastguard Worker kXdgActivationTokenFromCmdLine);
458*6777b538SAndroid Build Coastguard Worker ExtractXdgActivationTokenFromCmdLine(command_line);
459*6777b538SAndroid Build Coastguard Worker // It should match the one from command line, not env.
460*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kXdgActivationTokenFromCmdLine, TakeXdgActivationToken());
461*6777b538SAndroid Build Coastguard Worker // Should be cleared after the token is taken once.
462*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(std::nullopt, TakeXdgActivationToken());
463*6777b538SAndroid Build Coastguard Worker }
464*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,ScopedXdgActivationTokenInjector)465*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, ScopedXdgActivationTokenInjector) {
466*6777b538SAndroid Build Coastguard Worker CommandLine cmd_line(CommandLine::NO_PROGRAM);
467*6777b538SAndroid Build Coastguard Worker MockEnvironment getter;
468*6777b538SAndroid Build Coastguard Worker cmd_line.AppendSwitch("x");
469*6777b538SAndroid Build Coastguard Worker cmd_line.AppendSwitch("y");
470*6777b538SAndroid Build Coastguard Worker cmd_line.AppendSwitch("z");
471*6777b538SAndroid Build Coastguard Worker CommandLine::SwitchMap initial_switches = cmd_line.GetSwitches();
472*6777b538SAndroid Build Coastguard Worker // Set token value in env
473*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, GetVar(Eq("XDG_ACTIVATION_TOKEN"), _))
474*6777b538SAndroid Build Coastguard Worker .WillOnce(
475*6777b538SAndroid Build Coastguard Worker DoAll(SetArgPointee<1>(kXdgActivationTokenFromEnv), Return(true)));
476*6777b538SAndroid Build Coastguard Worker EXPECT_CALL(getter, UnSetVar(Eq("XDG_ACTIVATION_TOKEN")));
477*6777b538SAndroid Build Coastguard Worker {
478*6777b538SAndroid Build Coastguard Worker ScopedXdgActivationTokenInjector scoped_injector(cmd_line, getter);
479*6777b538SAndroid Build Coastguard Worker for (const auto& pair : initial_switches) {
480*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(cmd_line.HasSwitch(pair.first));
481*6777b538SAndroid Build Coastguard Worker }
482*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(cmd_line.HasSwitch(kXdgActivationTokenSwitch));
483*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kXdgActivationTokenFromEnv,
484*6777b538SAndroid Build Coastguard Worker cmd_line.GetSwitchValueASCII(kXdgActivationTokenSwitch));
485*6777b538SAndroid Build Coastguard Worker }
486*6777b538SAndroid Build Coastguard Worker for (const auto& pair : initial_switches) {
487*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(cmd_line.HasSwitch(pair.first));
488*6777b538SAndroid Build Coastguard Worker }
489*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(cmd_line.HasSwitch(nix::kXdgActivationTokenSwitch));
490*6777b538SAndroid Build Coastguard Worker }
491*6777b538SAndroid Build Coastguard Worker
TEST(XDGUtilTest,LaunchOptionsWithXdgActivation)492*6777b538SAndroid Build Coastguard Worker TEST(XDGUtilTest, LaunchOptionsWithXdgActivation) {
493*6777b538SAndroid Build Coastguard Worker bool received_empty_launch_options = false;
494*6777b538SAndroid Build Coastguard Worker CreateLaunchOptionsWithXdgActivation(base::BindLambdaForTesting(
495*6777b538SAndroid Build Coastguard Worker [&received_empty_launch_options](LaunchOptions options) {
496*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(options.environment.empty());
497*6777b538SAndroid Build Coastguard Worker received_empty_launch_options = true;
498*6777b538SAndroid Build Coastguard Worker }));
499*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(received_empty_launch_options);
500*6777b538SAndroid Build Coastguard Worker
501*6777b538SAndroid Build Coastguard Worker ScopedClosureRunner reset_token_creator(base::BindOnce(
502*6777b538SAndroid Build Coastguard Worker &SetXdgActivationTokenCreator, XdgActivationTokenCreator()));
503*6777b538SAndroid Build Coastguard Worker SetXdgActivationTokenCreator(
504*6777b538SAndroid Build Coastguard Worker base::BindRepeating([](XdgActivationTokenCallback callback) {
505*6777b538SAndroid Build Coastguard Worker std::move(callback).Run(kXdgActivationTokenFromEnv);
506*6777b538SAndroid Build Coastguard Worker }));
507*6777b538SAndroid Build Coastguard Worker
508*6777b538SAndroid Build Coastguard Worker bool received_launch_options_with_test_token = false;
509*6777b538SAndroid Build Coastguard Worker CreateLaunchOptionsWithXdgActivation(base::BindLambdaForTesting(
510*6777b538SAndroid Build Coastguard Worker [&received_launch_options_with_test_token](LaunchOptions options) {
511*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(options.environment["XDG_ACTIVATION_TOKEN"],
512*6777b538SAndroid Build Coastguard Worker kXdgActivationTokenFromEnv);
513*6777b538SAndroid Build Coastguard Worker received_launch_options_with_test_token = true;
514*6777b538SAndroid Build Coastguard Worker }));
515*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(received_launch_options_with_test_token);
516*6777b538SAndroid Build Coastguard Worker }
517*6777b538SAndroid Build Coastguard Worker
518*6777b538SAndroid Build Coastguard Worker } // namespace nix
519*6777b538SAndroid Build Coastguard Worker } // namespace base
520