diff options
Diffstat (limited to 'xbmc/utils/test/TestURIUtils.cpp')
| -rw-r--r-- | xbmc/utils/test/TestURIUtils.cpp | 585 |
1 files changed, 585 insertions, 0 deletions
diff --git a/xbmc/utils/test/TestURIUtils.cpp b/xbmc/utils/test/TestURIUtils.cpp new file mode 100644 index 0000000..7122fe9 --- /dev/null +++ b/xbmc/utils/test/TestURIUtils.cpp | |||
| @@ -0,0 +1,585 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2005-2018 Team Kodi | ||
| 3 | * This file is part of Kodi - https://kodi.tv | ||
| 4 | * | ||
| 5 | * SPDX-License-Identifier: GPL-2.0-or-later | ||
| 6 | * See LICENSES/README.md for more information. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #include "ServiceBroker.h" | ||
| 10 | #include "URL.h" | ||
| 11 | #include "filesystem/MultiPathDirectory.h" | ||
| 12 | #include "settings/AdvancedSettings.h" | ||
| 13 | #include "settings/SettingsComponent.h" | ||
| 14 | #include "utils/URIUtils.h" | ||
| 15 | |||
| 16 | #include <utility> | ||
| 17 | |||
| 18 | #include <gtest/gtest.h> | ||
| 19 | |||
| 20 | using namespace XFILE; | ||
| 21 | |||
| 22 | class TestURIUtils : public testing::Test | ||
| 23 | { | ||
| 24 | protected: | ||
| 25 | TestURIUtils() = default; | ||
| 26 | ~TestURIUtils() override | ||
| 27 | { | ||
| 28 | CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_pathSubstitutions.clear(); | ||
| 29 | } | ||
| 30 | }; | ||
| 31 | |||
| 32 | TEST_F(TestURIUtils, PathHasParent) | ||
| 33 | { | ||
| 34 | EXPECT_TRUE(URIUtils::PathHasParent("/path/to/movie.avi", "/path/to/")); | ||
| 35 | EXPECT_FALSE(URIUtils::PathHasParent("/path/to/movie.avi", "/path/2/")); | ||
| 36 | } | ||
| 37 | |||
| 38 | TEST_F(TestURIUtils, GetDirectory) | ||
| 39 | { | ||
| 40 | EXPECT_STREQ("/path/to/", URIUtils::GetDirectory("/path/to/movie.avi").c_str()); | ||
| 41 | EXPECT_STREQ("/path/to/", URIUtils::GetDirectory("/path/to/").c_str()); | ||
| 42 | EXPECT_STREQ("/path/to/|option=foo", URIUtils::GetDirectory("/path/to/movie.avi|option=foo").c_str()); | ||
| 43 | EXPECT_STREQ("/path/to/|option=foo", URIUtils::GetDirectory("/path/to/|option=foo").c_str()); | ||
| 44 | EXPECT_STREQ("", URIUtils::GetDirectory("movie.avi").c_str()); | ||
| 45 | EXPECT_STREQ("", URIUtils::GetDirectory("movie.avi|option=foo").c_str()); | ||
| 46 | EXPECT_STREQ("", URIUtils::GetDirectory("").c_str()); | ||
| 47 | |||
| 48 | // Make sure it works when assigning to the same str as the reference parameter | ||
| 49 | std::string var = "/path/to/movie.avi|option=foo"; | ||
| 50 | var = URIUtils::GetDirectory(var); | ||
| 51 | EXPECT_STREQ("/path/to/|option=foo", var.c_str()); | ||
| 52 | } | ||
| 53 | |||
| 54 | TEST_F(TestURIUtils, GetExtension) | ||
| 55 | { | ||
| 56 | EXPECT_STREQ(".avi", | ||
| 57 | URIUtils::GetExtension("/path/to/movie.avi").c_str()); | ||
| 58 | } | ||
| 59 | |||
| 60 | TEST_F(TestURIUtils, HasExtension) | ||
| 61 | { | ||
| 62 | EXPECT_TRUE (URIUtils::HasExtension("/path/to/movie.AvI")); | ||
| 63 | EXPECT_FALSE(URIUtils::HasExtension("/path/to/movie")); | ||
| 64 | EXPECT_FALSE(URIUtils::HasExtension("/path/.to/movie")); | ||
| 65 | EXPECT_FALSE(URIUtils::HasExtension("")); | ||
| 66 | |||
| 67 | EXPECT_TRUE (URIUtils::HasExtension("/path/to/movie.AvI", ".avi")); | ||
| 68 | EXPECT_FALSE(URIUtils::HasExtension("/path/to/movie.AvI", ".mkv")); | ||
| 69 | EXPECT_FALSE(URIUtils::HasExtension("/path/.avi/movie", ".avi")); | ||
| 70 | EXPECT_FALSE(URIUtils::HasExtension("", ".avi")); | ||
| 71 | |||
| 72 | EXPECT_TRUE (URIUtils::HasExtension("/path/movie.AvI", ".avi|.mkv|.mp4")); | ||
| 73 | EXPECT_TRUE (URIUtils::HasExtension("/path/movie.AvI", ".mkv|.avi|.mp4")); | ||
| 74 | EXPECT_FALSE(URIUtils::HasExtension("/path/movie.AvI", ".mpg|.mkv|.mp4")); | ||
| 75 | EXPECT_FALSE(URIUtils::HasExtension("/path.mkv/movie.AvI", ".mpg|.mkv|.mp4")); | ||
| 76 | EXPECT_FALSE(URIUtils::HasExtension("", ".avi|.mkv|.mp4")); | ||
| 77 | } | ||
| 78 | |||
| 79 | TEST_F(TestURIUtils, GetFileName) | ||
| 80 | { | ||
| 81 | EXPECT_STREQ("movie.avi", | ||
| 82 | URIUtils::GetFileName("/path/to/movie.avi").c_str()); | ||
| 83 | } | ||
| 84 | |||
| 85 | TEST_F(TestURIUtils, RemoveExtension) | ||
| 86 | { | ||
| 87 | std::string ref, var; | ||
| 88 | |||
| 89 | /* NOTE: CSettings need to be set to find other extensions. */ | ||
| 90 | ref = "/path/to/file"; | ||
| 91 | var = "/path/to/file.xml"; | ||
| 92 | URIUtils::RemoveExtension(var); | ||
| 93 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 94 | } | ||
| 95 | |||
| 96 | TEST_F(TestURIUtils, ReplaceExtension) | ||
| 97 | { | ||
| 98 | std::string ref, var; | ||
| 99 | |||
| 100 | ref = "/path/to/file.xsd"; | ||
| 101 | var = URIUtils::ReplaceExtension("/path/to/file.xml", ".xsd"); | ||
| 102 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 103 | } | ||
| 104 | |||
| 105 | TEST_F(TestURIUtils, Split) | ||
| 106 | { | ||
| 107 | std::string refpath, reffile, varpath, varfile; | ||
| 108 | |||
| 109 | refpath = "/path/to/"; | ||
| 110 | reffile = "movie.avi"; | ||
| 111 | URIUtils::Split("/path/to/movie.avi", varpath, varfile); | ||
| 112 | EXPECT_STREQ(refpath.c_str(), varpath.c_str()); | ||
| 113 | EXPECT_STREQ(reffile.c_str(), varfile.c_str()); | ||
| 114 | |||
| 115 | std::string varpathOptional, varfileOptional; | ||
| 116 | |||
| 117 | refpath = "/path/to/"; | ||
| 118 | reffile = "movie?movie.avi"; | ||
| 119 | URIUtils::Split("/path/to/movie?movie.avi", varpathOptional, varfileOptional); | ||
| 120 | EXPECT_STREQ(refpath.c_str(), varpathOptional.c_str()); | ||
| 121 | EXPECT_STREQ(reffile.c_str(), varfileOptional.c_str()); | ||
| 122 | |||
| 123 | refpath = "file:///path/to/"; | ||
| 124 | reffile = "movie.avi"; | ||
| 125 | URIUtils::Split("file:///path/to/movie.avi?showinfo=true", varpathOptional, varfileOptional); | ||
| 126 | EXPECT_STREQ(refpath.c_str(), varpathOptional.c_str()); | ||
| 127 | EXPECT_STREQ(reffile.c_str(), varfileOptional.c_str()); | ||
| 128 | } | ||
| 129 | |||
| 130 | TEST_F(TestURIUtils, SplitPath) | ||
| 131 | { | ||
| 132 | std::vector<std::string> strarray; | ||
| 133 | |||
| 134 | strarray = URIUtils::SplitPath("http://www.test.com/path/to/movie.avi"); | ||
| 135 | |||
| 136 | EXPECT_STREQ("http://www.test.com/", strarray.at(0).c_str()); | ||
| 137 | EXPECT_STREQ("path", strarray.at(1).c_str()); | ||
| 138 | EXPECT_STREQ("to", strarray.at(2).c_str()); | ||
| 139 | EXPECT_STREQ("movie.avi", strarray.at(3).c_str()); | ||
| 140 | } | ||
| 141 | |||
| 142 | TEST_F(TestURIUtils, SplitPathLocal) | ||
| 143 | { | ||
| 144 | #ifndef TARGET_LINUX | ||
| 145 | const char *path = "C:\\path\\to\\movie.avi"; | ||
| 146 | #else | ||
| 147 | const char *path = "/path/to/movie.avi"; | ||
| 148 | #endif | ||
| 149 | std::vector<std::string> strarray; | ||
| 150 | |||
| 151 | strarray = URIUtils::SplitPath(path); | ||
| 152 | |||
| 153 | #ifndef TARGET_LINUX | ||
| 154 | EXPECT_STREQ("C:", strarray.at(0).c_str()); | ||
| 155 | #else | ||
| 156 | EXPECT_STREQ("", strarray.at(0).c_str()); | ||
| 157 | #endif | ||
| 158 | EXPECT_STREQ("path", strarray.at(1).c_str()); | ||
| 159 | EXPECT_STREQ("to", strarray.at(2).c_str()); | ||
| 160 | EXPECT_STREQ("movie.avi", strarray.at(3).c_str()); | ||
| 161 | } | ||
| 162 | |||
| 163 | TEST_F(TestURIUtils, GetCommonPath) | ||
| 164 | { | ||
| 165 | std::string ref, var; | ||
| 166 | |||
| 167 | ref = "/path/"; | ||
| 168 | var = "/path/2/movie.avi"; | ||
| 169 | URIUtils::GetCommonPath(var, "/path/to/movie.avi"); | ||
| 170 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 171 | } | ||
| 172 | |||
| 173 | TEST_F(TestURIUtils, GetParentPath) | ||
| 174 | { | ||
| 175 | std::string ref, var; | ||
| 176 | |||
| 177 | ref = "/path/to/"; | ||
| 178 | var = URIUtils::GetParentPath("/path/to/movie.avi"); | ||
| 179 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 180 | |||
| 181 | var.clear(); | ||
| 182 | EXPECT_TRUE(URIUtils::GetParentPath("/path/to/movie.avi", var)); | ||
| 183 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 184 | } | ||
| 185 | |||
| 186 | TEST_F(TestURIUtils, SubstitutePath) | ||
| 187 | { | ||
| 188 | std::string from, to, ref, var; | ||
| 189 | |||
| 190 | from = "C:\\My Videos"; | ||
| 191 | to = "https://myserver/some%20other%20path"; | ||
| 192 | CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_pathSubstitutions.push_back(std::make_pair(from, to)); | ||
| 193 | |||
| 194 | from = "/this/path1"; | ||
| 195 | to = "/some/other/path2"; | ||
| 196 | CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_pathSubstitutions.push_back(std::make_pair(from, to)); | ||
| 197 | |||
| 198 | from = "davs://otherserver/my%20music%20path"; | ||
| 199 | to = "D:\\Local Music\\MP3 Collection"; | ||
| 200 | CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_pathSubstitutions.push_back(std::make_pair(from, to)); | ||
| 201 | |||
| 202 | ref = "https://myserver/some%20other%20path/sub%20dir/movie%20name.avi"; | ||
| 203 | var = URIUtils::SubstitutePath("C:\\My Videos\\sub dir\\movie name.avi"); | ||
| 204 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 205 | |||
| 206 | ref = "C:\\My Videos\\sub dir\\movie name.avi"; | ||
| 207 | var = URIUtils::SubstitutePath("https://myserver/some%20other%20path/sub%20dir/movie%20name.avi", true); | ||
| 208 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 209 | |||
| 210 | ref = "D:\\Local Music\\MP3 Collection\\Phil Collins\\Some CD\\01 - Two Hearts.mp3"; | ||
| 211 | var = URIUtils::SubstitutePath("davs://otherserver/my%20music%20path/Phil%20Collins/Some%20CD/01%20-%20Two%20Hearts.mp3"); | ||
| 212 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 213 | |||
| 214 | ref = "davs://otherserver/my%20music%20path/Phil%20Collins/Some%20CD/01%20-%20Two%20Hearts.mp3"; | ||
| 215 | var = URIUtils::SubstitutePath("D:\\Local Music\\MP3 Collection\\Phil Collins\\Some CD\\01 - Two Hearts.mp3", true); | ||
| 216 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 217 | |||
| 218 | ref = "/some/other/path2/to/movie.avi"; | ||
| 219 | var = URIUtils::SubstitutePath("/this/path1/to/movie.avi"); | ||
| 220 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 221 | |||
| 222 | ref = "/this/path1/to/movie.avi"; | ||
| 223 | var = URIUtils::SubstitutePath("/some/other/path2/to/movie.avi", true); | ||
| 224 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 225 | |||
| 226 | ref = "/no/translation path/"; | ||
| 227 | var = URIUtils::SubstitutePath(ref); | ||
| 228 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 229 | |||
| 230 | ref = "/no/translation path/"; | ||
| 231 | var = URIUtils::SubstitutePath(ref, true); | ||
| 232 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 233 | |||
| 234 | ref = "c:\\no\\translation path"; | ||
| 235 | var = URIUtils::SubstitutePath(ref); | ||
| 236 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 237 | |||
| 238 | ref = "c:\\no\\translation path"; | ||
| 239 | var = URIUtils::SubstitutePath(ref, true); | ||
| 240 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 241 | } | ||
| 242 | |||
| 243 | TEST_F(TestURIUtils, IsAddonsPath) | ||
| 244 | { | ||
| 245 | EXPECT_TRUE(URIUtils::IsAddonsPath("addons://path/to/addons")); | ||
| 246 | } | ||
| 247 | |||
| 248 | TEST_F(TestURIUtils, IsSourcesPath) | ||
| 249 | { | ||
| 250 | EXPECT_TRUE(URIUtils::IsSourcesPath("sources://path/to/sources")); | ||
| 251 | } | ||
| 252 | |||
| 253 | TEST_F(TestURIUtils, IsCDDA) | ||
| 254 | { | ||
| 255 | EXPECT_TRUE(URIUtils::IsCDDA("cdda://path/to/cdda")); | ||
| 256 | } | ||
| 257 | |||
| 258 | TEST_F(TestURIUtils, IsDOSPath) | ||
| 259 | { | ||
| 260 | EXPECT_TRUE(URIUtils::IsDOSPath("C://path/to/dosfile")); | ||
| 261 | } | ||
| 262 | |||
| 263 | TEST_F(TestURIUtils, IsDVD) | ||
| 264 | { | ||
| 265 | EXPECT_TRUE(URIUtils::IsDVD("dvd://path/in/video_ts.ifo")); | ||
| 266 | #if defined(TARGET_WINDOWS) | ||
| 267 | EXPECT_TRUE(URIUtils::IsDVD("dvd://path/in/file")); | ||
| 268 | #else | ||
| 269 | EXPECT_TRUE(URIUtils::IsDVD("iso9660://path/in/video_ts.ifo")); | ||
| 270 | EXPECT_TRUE(URIUtils::IsDVD("udf://path/in/video_ts.ifo")); | ||
| 271 | EXPECT_TRUE(URIUtils::IsDVD("dvd://1")); | ||
| 272 | #endif | ||
| 273 | } | ||
| 274 | |||
| 275 | TEST_F(TestURIUtils, IsFTP) | ||
| 276 | { | ||
| 277 | EXPECT_TRUE(URIUtils::IsFTP("ftp://path/in/ftp")); | ||
| 278 | } | ||
| 279 | |||
| 280 | TEST_F(TestURIUtils, IsHD) | ||
| 281 | { | ||
| 282 | EXPECT_TRUE(URIUtils::IsHD("/path/to/file")); | ||
| 283 | EXPECT_TRUE(URIUtils::IsHD("file:///path/to/file")); | ||
| 284 | EXPECT_TRUE(URIUtils::IsHD("special://path/to/file")); | ||
| 285 | EXPECT_TRUE(URIUtils::IsHD("stack://path/to/file")); | ||
| 286 | EXPECT_TRUE(URIUtils::IsHD("zip://path/to/file")); | ||
| 287 | } | ||
| 288 | |||
| 289 | TEST_F(TestURIUtils, IsInArchive) | ||
| 290 | { | ||
| 291 | EXPECT_TRUE(URIUtils::IsInArchive("zip://path/to/file")); | ||
| 292 | } | ||
| 293 | |||
| 294 | TEST_F(TestURIUtils, IsInRAR) | ||
| 295 | { | ||
| 296 | EXPECT_TRUE(URIUtils::IsInRAR("rar://path/to/file")); | ||
| 297 | } | ||
| 298 | |||
| 299 | TEST_F(TestURIUtils, IsInternetStream) | ||
| 300 | { | ||
| 301 | CURL url1("http://path/to/file"); | ||
| 302 | CURL url2("https://path/to/file"); | ||
| 303 | EXPECT_TRUE(URIUtils::IsInternetStream(url1)); | ||
| 304 | EXPECT_TRUE(URIUtils::IsInternetStream(url2)); | ||
| 305 | } | ||
| 306 | |||
| 307 | TEST_F(TestURIUtils, IsInZIP) | ||
| 308 | { | ||
| 309 | EXPECT_TRUE(URIUtils::IsInZIP("zip://path/to/file")); | ||
| 310 | } | ||
| 311 | |||
| 312 | TEST_F(TestURIUtils, IsISO9660) | ||
| 313 | { | ||
| 314 | EXPECT_TRUE(URIUtils::IsISO9660("iso9660://path/to/file")); | ||
| 315 | } | ||
| 316 | |||
| 317 | TEST_F(TestURIUtils, IsLiveTV) | ||
| 318 | { | ||
| 319 | EXPECT_TRUE(URIUtils::IsLiveTV("whatever://path/to/file.pvr")); | ||
| 320 | } | ||
| 321 | |||
| 322 | TEST_F(TestURIUtils, IsMultiPath) | ||
| 323 | { | ||
| 324 | EXPECT_TRUE(URIUtils::IsMultiPath("multipath://path/to/file")); | ||
| 325 | } | ||
| 326 | |||
| 327 | TEST_F(TestURIUtils, IsMusicDb) | ||
| 328 | { | ||
| 329 | EXPECT_TRUE(URIUtils::IsMusicDb("musicdb://path/to/file")); | ||
| 330 | } | ||
| 331 | |||
| 332 | TEST_F(TestURIUtils, IsNfs) | ||
| 333 | { | ||
| 334 | EXPECT_TRUE(URIUtils::IsNfs("nfs://path/to/file")); | ||
| 335 | EXPECT_TRUE(URIUtils::IsNfs("stack://nfs://path/to/file")); | ||
| 336 | } | ||
| 337 | |||
| 338 | TEST_F(TestURIUtils, IsOnDVD) | ||
| 339 | { | ||
| 340 | EXPECT_TRUE(URIUtils::IsOnDVD("dvd://path/to/file")); | ||
| 341 | EXPECT_TRUE(URIUtils::IsOnDVD("udf://path/to/file")); | ||
| 342 | EXPECT_TRUE(URIUtils::IsOnDVD("iso9660://path/to/file")); | ||
| 343 | EXPECT_TRUE(URIUtils::IsOnDVD("cdda://path/to/file")); | ||
| 344 | } | ||
| 345 | |||
| 346 | TEST_F(TestURIUtils, IsOnLAN) | ||
| 347 | { | ||
| 348 | std::vector<std::string> multiVec; | ||
| 349 | multiVec.emplace_back("smb://path/to/file"); | ||
| 350 | EXPECT_TRUE(URIUtils::IsOnLAN(CMultiPathDirectory::ConstructMultiPath(multiVec))); | ||
| 351 | EXPECT_TRUE(URIUtils::IsOnLAN("stack://smb://path/to/file")); | ||
| 352 | EXPECT_TRUE(URIUtils::IsOnLAN("smb://path/to/file")); | ||
| 353 | EXPECT_FALSE(URIUtils::IsOnLAN("plugin://path/to/file")); | ||
| 354 | EXPECT_TRUE(URIUtils::IsOnLAN("upnp://path/to/file")); | ||
| 355 | } | ||
| 356 | |||
| 357 | TEST_F(TestURIUtils, IsPlugin) | ||
| 358 | { | ||
| 359 | EXPECT_TRUE(URIUtils::IsPlugin("plugin://path/to/file")); | ||
| 360 | } | ||
| 361 | |||
| 362 | TEST_F(TestURIUtils, IsScript) | ||
| 363 | { | ||
| 364 | EXPECT_TRUE(URIUtils::IsScript("script://path/to/file")); | ||
| 365 | } | ||
| 366 | |||
| 367 | TEST_F(TestURIUtils, IsRAR) | ||
| 368 | { | ||
| 369 | EXPECT_TRUE(URIUtils::IsRAR("/path/to/rarfile.rar")); | ||
| 370 | EXPECT_TRUE(URIUtils::IsRAR("/path/to/rarfile.cbr")); | ||
| 371 | EXPECT_FALSE(URIUtils::IsRAR("/path/to/file")); | ||
| 372 | EXPECT_FALSE(URIUtils::IsRAR("rar://path/to/file")); | ||
| 373 | } | ||
| 374 | |||
| 375 | TEST_F(TestURIUtils, IsRemote) | ||
| 376 | { | ||
| 377 | EXPECT_TRUE(URIUtils::IsRemote("http://path/to/file")); | ||
| 378 | EXPECT_TRUE(URIUtils::IsRemote("https://path/to/file")); | ||
| 379 | EXPECT_FALSE(URIUtils::IsRemote("addons://user/")); | ||
| 380 | EXPECT_FALSE(URIUtils::IsRemote("sources://video/")); | ||
| 381 | EXPECT_FALSE(URIUtils::IsRemote("videodb://movies/titles")); | ||
| 382 | EXPECT_FALSE(URIUtils::IsRemote("musicdb://genres/")); | ||
| 383 | EXPECT_FALSE(URIUtils::IsRemote("library://video/")); | ||
| 384 | EXPECT_FALSE(URIUtils::IsRemote("androidapp://app")); | ||
| 385 | EXPECT_FALSE(URIUtils::IsRemote("plugin://plugin.video.id")); | ||
| 386 | } | ||
| 387 | |||
| 388 | TEST_F(TestURIUtils, IsSmb) | ||
| 389 | { | ||
| 390 | EXPECT_TRUE(URIUtils::IsSmb("smb://path/to/file")); | ||
| 391 | EXPECT_TRUE(URIUtils::IsSmb("stack://smb://path/to/file")); | ||
| 392 | } | ||
| 393 | |||
| 394 | TEST_F(TestURIUtils, IsSpecial) | ||
| 395 | { | ||
| 396 | EXPECT_TRUE(URIUtils::IsSpecial("special://path/to/file")); | ||
| 397 | EXPECT_TRUE(URIUtils::IsSpecial("stack://special://path/to/file")); | ||
| 398 | } | ||
| 399 | |||
| 400 | TEST_F(TestURIUtils, IsStack) | ||
| 401 | { | ||
| 402 | EXPECT_TRUE(URIUtils::IsStack("stack://path/to/file")); | ||
| 403 | } | ||
| 404 | |||
| 405 | TEST_F(TestURIUtils, IsUPnP) | ||
| 406 | { | ||
| 407 | EXPECT_TRUE(URIUtils::IsUPnP("upnp://path/to/file")); | ||
| 408 | } | ||
| 409 | |||
| 410 | TEST_F(TestURIUtils, IsURL) | ||
| 411 | { | ||
| 412 | EXPECT_TRUE(URIUtils::IsURL("someprotocol://path/to/file")); | ||
| 413 | EXPECT_FALSE(URIUtils::IsURL("/path/to/file")); | ||
| 414 | } | ||
| 415 | |||
| 416 | TEST_F(TestURIUtils, IsVideoDb) | ||
| 417 | { | ||
| 418 | EXPECT_TRUE(URIUtils::IsVideoDb("videodb://path/to/file")); | ||
| 419 | } | ||
| 420 | |||
| 421 | TEST_F(TestURIUtils, IsZIP) | ||
| 422 | { | ||
| 423 | EXPECT_TRUE(URIUtils::IsZIP("/path/to/zipfile.zip")); | ||
| 424 | EXPECT_TRUE(URIUtils::IsZIP("/path/to/zipfile.cbz")); | ||
| 425 | EXPECT_FALSE(URIUtils::IsZIP("/path/to/file")); | ||
| 426 | EXPECT_FALSE(URIUtils::IsZIP("zip://path/to/file")); | ||
| 427 | } | ||
| 428 | |||
| 429 | TEST_F(TestURIUtils, IsBluray) | ||
| 430 | { | ||
| 431 | EXPECT_TRUE(URIUtils::IsBluray("bluray://path/to/file")); | ||
| 432 | } | ||
| 433 | |||
| 434 | TEST_F(TestURIUtils, AddSlashAtEnd) | ||
| 435 | { | ||
| 436 | std::string ref, var; | ||
| 437 | |||
| 438 | ref = "bluray://path/to/file/"; | ||
| 439 | var = "bluray://path/to/file/"; | ||
| 440 | URIUtils::AddSlashAtEnd(var); | ||
| 441 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 442 | } | ||
| 443 | |||
| 444 | TEST_F(TestURIUtils, HasSlashAtEnd) | ||
| 445 | { | ||
| 446 | EXPECT_TRUE(URIUtils::HasSlashAtEnd("bluray://path/to/file/")); | ||
| 447 | EXPECT_FALSE(URIUtils::HasSlashAtEnd("bluray://path/to/file")); | ||
| 448 | } | ||
| 449 | |||
| 450 | TEST_F(TestURIUtils, RemoveSlashAtEnd) | ||
| 451 | { | ||
| 452 | std::string ref, var; | ||
| 453 | |||
| 454 | ref = "bluray://path/to/file"; | ||
| 455 | var = "bluray://path/to/file/"; | ||
| 456 | URIUtils::RemoveSlashAtEnd(var); | ||
| 457 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 458 | } | ||
| 459 | |||
| 460 | TEST_F(TestURIUtils, CreateArchivePath) | ||
| 461 | { | ||
| 462 | std::string ref, var; | ||
| 463 | |||
| 464 | ref = "zip://%2fpath%2fto%2f/file"; | ||
| 465 | var = URIUtils::CreateArchivePath("zip", CURL("/path/to/"), "file").Get(); | ||
| 466 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 467 | } | ||
| 468 | |||
| 469 | TEST_F(TestURIUtils, AddFileToFolder) | ||
| 470 | { | ||
| 471 | std::string ref = "/path/to/file"; | ||
| 472 | std::string var = URIUtils::AddFileToFolder("/path/to", "file"); | ||
| 473 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 474 | |||
| 475 | ref = "/path/to/file/and/more"; | ||
| 476 | var = URIUtils::AddFileToFolder("/path", "to", "file", "and", "more"); | ||
| 477 | EXPECT_STREQ(ref.c_str(), var.c_str()); | ||
| 478 | } | ||
| 479 | |||
| 480 | TEST_F(TestURIUtils, HasParentInHostname) | ||
| 481 | { | ||
| 482 | EXPECT_TRUE(URIUtils::HasParentInHostname(CURL("zip://"))); | ||
| 483 | EXPECT_TRUE(URIUtils::HasParentInHostname(CURL("bluray://"))); | ||
| 484 | } | ||
| 485 | |||
| 486 | TEST_F(TestURIUtils, HasEncodedHostname) | ||
| 487 | { | ||
| 488 | EXPECT_TRUE(URIUtils::HasEncodedHostname(CURL("zip://"))); | ||
| 489 | EXPECT_TRUE(URIUtils::HasEncodedHostname(CURL("bluray://"))); | ||
| 490 | EXPECT_TRUE(URIUtils::HasEncodedHostname(CURL("musicsearch://"))); | ||
| 491 | } | ||
| 492 | |||
| 493 | TEST_F(TestURIUtils, HasEncodedFilename) | ||
| 494 | { | ||
| 495 | EXPECT_TRUE(URIUtils::HasEncodedFilename(CURL("shout://"))); | ||
| 496 | EXPECT_TRUE(URIUtils::HasEncodedFilename(CURL("dav://"))); | ||
| 497 | EXPECT_TRUE(URIUtils::HasEncodedFilename(CURL("rss://"))); | ||
| 498 | EXPECT_TRUE(URIUtils::HasEncodedFilename(CURL("davs://"))); | ||
| 499 | } | ||
| 500 | |||
| 501 | TEST_F(TestURIUtils, GetRealPath) | ||
| 502 | { | ||
| 503 | std::string ref; | ||
| 504 | |||
| 505 | ref = "/path/to/file/"; | ||
| 506 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath(ref).c_str()); | ||
| 507 | |||
| 508 | ref = "path/to/file"; | ||
| 509 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("../path/to/file").c_str()); | ||
| 510 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("./path/to/file").c_str()); | ||
| 511 | |||
| 512 | ref = "/path/to/file"; | ||
| 513 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath(ref).c_str()); | ||
| 514 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("/path/to/./file").c_str()); | ||
| 515 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("/./path/to/./file").c_str()); | ||
| 516 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("/path/to/some/../file").c_str()); | ||
| 517 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("/../path/to/some/../file").c_str()); | ||
| 518 | |||
| 519 | ref = "/path/to"; | ||
| 520 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("/path/to/some/../file/..").c_str()); | ||
| 521 | |||
| 522 | #ifdef TARGET_WINDOWS | ||
| 523 | ref = "\\\\path\\to\\file\\"; | ||
| 524 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath(ref).c_str()); | ||
| 525 | |||
| 526 | ref = "path\\to\\file"; | ||
| 527 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("..\\path\\to\\file").c_str()); | ||
| 528 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath(".\\path\\to\\file").c_str()); | ||
| 529 | |||
| 530 | ref = "\\\\path\\to\\file"; | ||
| 531 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath(ref).c_str()); | ||
| 532 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("\\\\path\\to\\.\\file").c_str()); | ||
| 533 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("\\\\.\\path/to\\.\\file").c_str()); | ||
| 534 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("\\\\path\\to\\some\\..\\file").c_str()); | ||
| 535 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("\\\\..\\path\\to\\some\\..\\file").c_str()); | ||
| 536 | |||
| 537 | ref = "\\\\path\\to"; | ||
| 538 | EXPECT_STREQ(ref.c_str(), URIUtils::GetRealPath("\\\\path\\to\\some\\..\\file\\..").c_str()); | ||
| 539 | #endif | ||
| 540 | |||
| 541 | // test rar/zip paths | ||
| 542 | ref = "zip://%2fpath%2fto%2fzip/subpath/to/file"; | ||
| 543 | EXPECT_STRCASEEQ(ref.c_str(), URIUtils::GetRealPath(ref).c_str()); | ||
| 544 | |||
| 545 | // test rar/zip paths | ||
| 546 | ref = "zip://%2fpath%2fto%2fzip/subpath/to/file"; | ||
| 547 | EXPECT_STRCASEEQ(ref.c_str(), URIUtils::GetRealPath("zip://%2fpath%2fto%2fzip/../subpath/to/file").c_str()); | ||
| 548 | EXPECT_STRCASEEQ(ref.c_str(), URIUtils::GetRealPath("zip://%2fpath%2fto%2fzip/./subpath/to/file").c_str()); | ||
| 549 | EXPECT_STRCASEEQ(ref.c_str(), URIUtils::GetRealPath("zip://%2fpath%2fto%2fzip/subpath/to/./file").c_str()); | ||
| 550 | EXPECT_STRCASEEQ(ref.c_str(), URIUtils::GetRealPath("zip://%2fpath%2fto%2fzip/subpath/to/some/../file").c_str()); | ||
| 551 | |||
| 552 | EXPECT_STRCASEEQ(ref.c_str(), URIUtils::GetRealPath("zip://%2fpath%2fto%2f.%2fzip/subpath/to/file").c_str()); | ||
| 553 | EXPECT_STRCASEEQ(ref.c_str(), URIUtils::GetRealPath("zip://%2fpath%2fto%2fsome%2f..%2fzip/subpath/to/file").c_str()); | ||
| 554 | |||
| 555 | // test zip/zip path | ||
| 556 | ref ="zip://zip%3a%2f%2f%252Fpath%252Fto%252Fzip%2fpath%2fto%2fzip/subpath/to/file"; | ||
| 557 | EXPECT_STRCASEEQ(ref.c_str(), URIUtils::GetRealPath("zip://zip%3a%2f%2f%252Fpath%252Fto%252Fsome%252F..%252Fzip%2fpath%2fto%2fsome%2f..%2fzip/subpath/to/some/../file").c_str()); | ||
| 558 | } | ||
| 559 | |||
| 560 | TEST_F(TestURIUtils, UpdateUrlEncoding) | ||
| 561 | { | ||
| 562 | std::string oldUrl = "stack://zip://%2fpath%2fto%2farchive%2fsome%2darchive%2dfile%2eCD1%2ezip/video.avi , zip://%2fpath%2fto%2farchive%2fsome%2darchive%2dfile%2eCD2%2ezip/video.avi"; | ||
| 563 | std::string newUrl = "stack://zip://%2fpath%2fto%2farchive%2fsome-archive-file.CD1.zip/video.avi , zip://%2fpath%2fto%2farchive%2fsome-archive-file.CD2.zip/video.avi"; | ||
| 564 | |||
| 565 | EXPECT_TRUE(URIUtils::UpdateUrlEncoding(oldUrl)); | ||
| 566 | EXPECT_STRCASEEQ(newUrl.c_str(), oldUrl.c_str()); | ||
| 567 | |||
| 568 | oldUrl = "zip://%2fpath%2fto%2farchive%2fsome%2darchive%2efile%2ezip/video.avi"; | ||
| 569 | newUrl = "zip://%2fpath%2fto%2farchive%2fsome-archive.file.zip/video.avi"; | ||
| 570 | |||
| 571 | EXPECT_TRUE(URIUtils::UpdateUrlEncoding(oldUrl)); | ||
| 572 | EXPECT_STRCASEEQ(newUrl.c_str(), oldUrl.c_str()); | ||
| 573 | |||
| 574 | oldUrl = "/path/to/some/long%2dnamed%2efile"; | ||
| 575 | newUrl = "/path/to/some/long%2dnamed%2efile"; | ||
| 576 | |||
| 577 | EXPECT_FALSE(URIUtils::UpdateUrlEncoding(oldUrl)); | ||
| 578 | EXPECT_STRCASEEQ(newUrl.c_str(), oldUrl.c_str()); | ||
| 579 | |||
| 580 | oldUrl = "/path/to/some/long-named.file"; | ||
| 581 | newUrl = "/path/to/some/long-named.file"; | ||
| 582 | |||
| 583 | EXPECT_FALSE(URIUtils::UpdateUrlEncoding(oldUrl)); | ||
| 584 | EXPECT_STRCASEEQ(newUrl.c_str(), oldUrl.c_str()); | ||
| 585 | } | ||
