summaryrefslogtreecommitdiffstats
path: root/xbmc/utils/test/TestURIUtils.cpp
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2020-10-19 00:52:24 +0200
committermanuel <manuel@mausz.at>2020-10-19 00:52:24 +0200
commitbe933ef2241d79558f91796cc5b3a161f72ebf9c (patch)
treefe3ab2f130e20c99001f2d7a81d610c78c96a3f4 /xbmc/utils/test/TestURIUtils.cpp
parent5f8335c1e49ce108ef3481863833c98efa00411b (diff)
downloadkodi-pvr-build-be933ef2241d79558f91796cc5b3a161f72ebf9c.tar.gz
kodi-pvr-build-be933ef2241d79558f91796cc5b3a161f72ebf9c.tar.bz2
kodi-pvr-build-be933ef2241d79558f91796cc5b3a161f72ebf9c.zip
sync with upstream
Diffstat (limited to 'xbmc/utils/test/TestURIUtils.cpp')
-rw-r--r--xbmc/utils/test/TestURIUtils.cpp585
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
20using namespace XFILE;
21
22class TestURIUtils : public testing::Test
23{
24protected:
25 TestURIUtils() = default;
26 ~TestURIUtils() override
27 {
28 CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_pathSubstitutions.clear();
29 }
30};
31
32TEST_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
38TEST_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
54TEST_F(TestURIUtils, GetExtension)
55{
56 EXPECT_STREQ(".avi",
57 URIUtils::GetExtension("/path/to/movie.avi").c_str());
58}
59
60TEST_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
79TEST_F(TestURIUtils, GetFileName)
80{
81 EXPECT_STREQ("movie.avi",
82 URIUtils::GetFileName("/path/to/movie.avi").c_str());
83}
84
85TEST_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
96TEST_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
105TEST_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
130TEST_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
142TEST_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
163TEST_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
173TEST_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
186TEST_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
243TEST_F(TestURIUtils, IsAddonsPath)
244{
245 EXPECT_TRUE(URIUtils::IsAddonsPath("addons://path/to/addons"));
246}
247
248TEST_F(TestURIUtils, IsSourcesPath)
249{
250 EXPECT_TRUE(URIUtils::IsSourcesPath("sources://path/to/sources"));
251}
252
253TEST_F(TestURIUtils, IsCDDA)
254{
255 EXPECT_TRUE(URIUtils::IsCDDA("cdda://path/to/cdda"));
256}
257
258TEST_F(TestURIUtils, IsDOSPath)
259{
260 EXPECT_TRUE(URIUtils::IsDOSPath("C://path/to/dosfile"));
261}
262
263TEST_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
275TEST_F(TestURIUtils, IsFTP)
276{
277 EXPECT_TRUE(URIUtils::IsFTP("ftp://path/in/ftp"));
278}
279
280TEST_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
289TEST_F(TestURIUtils, IsInArchive)
290{
291 EXPECT_TRUE(URIUtils::IsInArchive("zip://path/to/file"));
292}
293
294TEST_F(TestURIUtils, IsInRAR)
295{
296 EXPECT_TRUE(URIUtils::IsInRAR("rar://path/to/file"));
297}
298
299TEST_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
307TEST_F(TestURIUtils, IsInZIP)
308{
309 EXPECT_TRUE(URIUtils::IsInZIP("zip://path/to/file"));
310}
311
312TEST_F(TestURIUtils, IsISO9660)
313{
314 EXPECT_TRUE(URIUtils::IsISO9660("iso9660://path/to/file"));
315}
316
317TEST_F(TestURIUtils, IsLiveTV)
318{
319 EXPECT_TRUE(URIUtils::IsLiveTV("whatever://path/to/file.pvr"));
320}
321
322TEST_F(TestURIUtils, IsMultiPath)
323{
324 EXPECT_TRUE(URIUtils::IsMultiPath("multipath://path/to/file"));
325}
326
327TEST_F(TestURIUtils, IsMusicDb)
328{
329 EXPECT_TRUE(URIUtils::IsMusicDb("musicdb://path/to/file"));
330}
331
332TEST_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
338TEST_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
346TEST_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
357TEST_F(TestURIUtils, IsPlugin)
358{
359 EXPECT_TRUE(URIUtils::IsPlugin("plugin://path/to/file"));
360}
361
362TEST_F(TestURIUtils, IsScript)
363{
364 EXPECT_TRUE(URIUtils::IsScript("script://path/to/file"));
365}
366
367TEST_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
375TEST_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
388TEST_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
394TEST_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
400TEST_F(TestURIUtils, IsStack)
401{
402 EXPECT_TRUE(URIUtils::IsStack("stack://path/to/file"));
403}
404
405TEST_F(TestURIUtils, IsUPnP)
406{
407 EXPECT_TRUE(URIUtils::IsUPnP("upnp://path/to/file"));
408}
409
410TEST_F(TestURIUtils, IsURL)
411{
412 EXPECT_TRUE(URIUtils::IsURL("someprotocol://path/to/file"));
413 EXPECT_FALSE(URIUtils::IsURL("/path/to/file"));
414}
415
416TEST_F(TestURIUtils, IsVideoDb)
417{
418 EXPECT_TRUE(URIUtils::IsVideoDb("videodb://path/to/file"));
419}
420
421TEST_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
429TEST_F(TestURIUtils, IsBluray)
430{
431 EXPECT_TRUE(URIUtils::IsBluray("bluray://path/to/file"));
432}
433
434TEST_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
444TEST_F(TestURIUtils, HasSlashAtEnd)
445{
446 EXPECT_TRUE(URIUtils::HasSlashAtEnd("bluray://path/to/file/"));
447 EXPECT_FALSE(URIUtils::HasSlashAtEnd("bluray://path/to/file"));
448}
449
450TEST_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
460TEST_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
469TEST_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
480TEST_F(TestURIUtils, HasParentInHostname)
481{
482 EXPECT_TRUE(URIUtils::HasParentInHostname(CURL("zip://")));
483 EXPECT_TRUE(URIUtils::HasParentInHostname(CURL("bluray://")));
484}
485
486TEST_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
493TEST_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
501TEST_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
560TEST_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}