23 #include "testtemplatedpathresolver.h"
25 #include "templatedpathresolver.h"
26 #include "strings.hpp"
28 #include <QCoreApplication>
30 #include <QProcessEnvironment>
33 #include <sys/types.h>
37 TestTemplatedPathResolver::TestTemplatedPathResolver()
42 bool TestTemplatedPathResolver::executeTest()
45 resolver.setEnvVarsEnabled(
true);
46 resolver.setProgdirEnabled(
true);
47 resolver.setUserHomeEnabled(
true);
50 const QString PROGDIR_VALUE =
"this env. var should be ignored";
51 qputenv(
"PROGDIR", PROGDIR_VALUE.toUtf8());
52 QString exeLocation = QCoreApplication::applicationDirPath();
53 if (resolver.
resolve(
"$PROGDIR") != exeLocation)
55 testLog << QString(
"simple $PROGDIR resolution failure: %1 != %2")
56 .arg(resolver.
resolve(
"$PROGDIR"), exeLocation);
63 testLog << QString(
"suffixed $PROGDIR resolution failure: %1 != %2")
69 if (resolver.
resolve(
"/home/alice/$PROGDIR/logs") !=
"/home/alice/"
72 testLog << QString(
"$PROGDIR in the middle of the path failure: %1 != %2")
73 .arg(resolver.
resolve(
"/home/alice/$PROGDIR/logs"),
79 if (resolver.
resolve(
"~") != QDir::homePath())
81 testLog << QString(
"Home resolution failed: %1 != %2")
82 .arg(resolver.
resolve(
"~"), QDir::homePath());
86 #ifdef DOOMSEEKER_TEMPLATED_PATH_RESOLVER_TILDEUSER
88 const struct passwd *pwent = getpwnam(
"root");
91 testLog <<
"Unable to retrieve home dir for root";
94 const QString rootHome = pwent->pw_dir;
95 if (resolver.
resolve(
"~root") != rootHome)
97 testLog << QString(
"Home resolution of root failed: %1 != %2")
98 .arg(resolver.
resolve(
"~root"), rootHome);
101 if (resolver.
resolve(
"~root/") != rootHome +
"/")
103 testLog << QString(
"Home resolution of root/ failed: %1 != %2")
104 .arg(resolver.
resolve(
"~root/"), rootHome +
"/");
107 if (resolver.
resolve(
"~root/extra/more") != rootHome +
"/extra/more")
109 testLog << QString(
"Home resolution of root/extra failed: %1 != %2")
110 .arg(resolver.
resolve(
"~root/extra/more"), rootHome +
"/extra/more");
115 QString noUser =
"~noUser";
116 while (getpwnam(noUser.toLatin1().constData()) !=
nullptr)
120 if (resolver.
resolve(noUser) != noUser)
122 testLog << QString(
"Home resolution of user who doesn't exist failed: %1 != %2")
123 .arg(resolver.
resolve(noUser), noUser);
127 if (resolver.
resolve(noUser) != noUser)
129 testLog << QString(
"Home resolution of user who doesn't exist with / failed: %1 != %2")
130 .arg(resolver.
resolve(noUser), noUser);
134 if (resolver.
resolve(noUser) != noUser)
136 testLog << QString(
"Home resolution of user who doesn't exist with /extra failed: %1 != %2")
137 .arg(resolver.
resolve(noUser), noUser);
141 const QString noUser =
"~guest/stuff";
142 if (resolver.
resolve(noUser) != noUser)
144 testLog << QString(
"Home resolution of a named user failed: %1 != %2")
145 .arg(resolver.
resolve(noUser), noUser);
151 qputenv(
"G00dV4r",
"/data/is/mine");
152 qputenv(
"an0ther",
"ok");
154 QString templated =
"~/logs/$an0ther/$G00dV4r/$an0ther/$badvar44/done";
155 QString expected = QDir::homePath() +
"/logs/ok//data/is/mine/ok//done";
156 if (resolver.
resolve(templated) != expected)
158 testLog << QString(
"complex env resolution failure: %1 != %2")
159 .arg(resolver.
resolve(templated), expected);
165 qputenv(
"PROGDIRECTORY",
"some/folder");
166 if (resolver.
resolve(
"$PROGDIRECTORY/logs") !=
"some/folder/logs")
168 testLog << QString(
"$PROGDIRECTORY resolution failure: %1 != %2")
169 .arg(resolver.
resolve(
"$PROGDIRECTORY/logs"),
"some/folder/logs");
176 resolver.setEnvVarsEnabled(
false);
177 qputenv(
"PROGDIRECTORY",
"some/folder");
178 if (resolver.
resolve(
"$PROGDIRECTORY/logs") !=
"$PROGDIRECTORY/logs")
180 testLog << QString(
"Env disabled - $PROGDIRECTORY should not be resolved: %1 != %2")
181 .arg(resolver.
resolve(
"$PROGDIRECTORY/logs"),
"$PROGDIRECTORY/logs");
184 if (resolver.
resolve(
"$PROGDIR") != exeLocation)
186 testLog << QString(
"Env disabled - $PROGDIR should still be resolved: %1 != %2")
187 .arg(resolver.
resolve(
"$PROGDIR"), exeLocation);
192 resolver.setEnvVarsEnabled(
true);
193 resolver.setProgdirEnabled(
false);
194 qputenv(
"PROGDIRECTORY",
"some/folder");
195 if (resolver.
resolve(
"$PROGDIRECTORY/logs") !=
"some/folder/logs")
197 testLog << QString(
"$PROGDIR disabled - $PROGDIRECTORY should still be resolved: %1 != %2")
198 .arg(resolver.
resolve(
"$PROGDIRECTORY/logs"),
"some/folder/logs");
201 if (resolver.
resolve(
"$PROGDIR") != PROGDIR_VALUE)
203 testLog << QString(
"$PROGDIR disabled - $PROGDIR should still be resolved: %1 != %2")
204 .arg(resolver.
resolve(
"$PROGDIR"), PROGDIR_VALUE);
209 resolver.setEnvVarsEnabled(
false);
210 resolver.setProgdirEnabled(
false);
212 qputenv(
"PROGDIRECTORY",
"some/folder");
213 if (resolver.
resolve(
"$PROGDIRECTORY/logs") !=
"$PROGDIRECTORY/logs")
215 testLog << QString(
"$PROGDIR and env disabled - $PROGDIRECTORY should not be resolved: %1 != %2")
216 .arg(resolver.
resolve(
"$PROGDIRECTORY/logs"),
"$PROGDIRECTORY/logs");
219 if (resolver.
resolve(
"$PROGDIR") !=
"$PROGDIR")
221 testLog << QString(
"$PROGDIR and env disabled - $PROGDIR should not be resolved: %1 != %2")
222 .arg(resolver.
resolve(
"$PROGDIR"),
"$PROGDIR");
227 resolver.setEnvVarsEnabled(
true);
228 resolver.setProgdirEnabled(
true);
229 resolver.setUserHomeEnabled(
false);
230 if (resolver.
resolve(
"~") !=
"~")
232 testLog << QString(
"Home resolution disabled - ~ failed: %1 != %2")
233 .arg(resolver.
resolve(
"~"),
"~");
237 if (resolver.
resolve(
"~root") !=
"~root")
239 testLog << QString(
"Home resolution disabled - ~root failed: %1 != %2")
240 .arg(resolver.
resolve(
"~root"),
"~root");
245 resolver.setEnvVarsEnabled(
false);
246 resolver.setProgdirEnabled(
false);
247 resolver.setUserHomeEnabled(
false);
249 qputenv(
"PROGDIRECTORY",
"some/folder");
250 if (resolver.
resolve(
"~/$PROGDIR/$PROGDIRECTORY/log.txt") !=
"~/$PROGDIR/$PROGDIRECTORY/log.txt")
252 testLog << QString(
"All disabled failed: %1 != %2")
253 .arg(resolver.
resolve(
"~/$PROGDIR/$PROGDIRECTORY/log.txt"),
"~/$PROGDIR/$PROGDIRECTORY/log.txt");