Fix keymap.
[vuplus_xbmc] / xbmc / test / TestFileItem.cpp
1 /*
2  *      Copyright (C) 2005-2013 Team XBMC
3  *      http://xbmc.org
4  *
5  *  This Program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2, or (at your option)
8  *  any later version.
9  *
10  *  This Program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with XBMC; see the file COPYING.  If not, see
17  *  <http://www.gnu.org/licenses/>.
18  *
19  */
20
21 #include "FileItem.h"
22 #include "URL.h"
23 #include "settings/AdvancedSettings.h"
24
25 #include "gtest/gtest.h"
26
27 using ::testing::Test;
28 using ::testing::WithParamInterface;
29 using ::testing::ValuesIn;
30
31 struct TestFileData
32 {
33   const char *file;
34   bool use_folder;
35   const char *base;
36 };
37
38 class AdvancedSettingsResetBase : public Test
39 {
40 public:
41   AdvancedSettingsResetBase();
42 };
43
44 AdvancedSettingsResetBase::AdvancedSettingsResetBase()
45 {
46   // Force all settings to be reset to defaults
47   g_advancedSettings.OnSettingsUnloaded();
48   g_advancedSettings.Initialize();
49 }
50
51 class TestFileItemSpecifiedArtJpg : public AdvancedSettingsResetBase,
52                                     public WithParamInterface<TestFileData>
53 {
54 };
55
56
57 TEST_P(TestFileItemSpecifiedArtJpg, GetLocalArt)
58 {
59   CFileItem item;
60   item.SetPath(GetParam().file);
61   std::string path = CURL(item.GetLocalArt("art.jpg", GetParam().use_folder)).Get();
62   std::string compare = CURL(GetParam().base).Get();
63   EXPECT_EQ(compare, path);
64 }
65
66 const TestFileData MovieFiles[] = {{ "c:\\dir\\filename.avi", false, "c:\\dir\\filename-art.jpg" },
67                                    { "c:\\dir\\filename.avi", true,  "c:\\dir\\art.jpg" },
68                                    { "/dir/filename.avi", false, "/dir/filename-art.jpg" },
69                                    { "/dir/filename.avi", true,  "/dir/art.jpg" },
70                                    { "smb://somepath/file.avi", false, "smb://somepath/file-art.jpg" },
71                                    { "smb://somepath/file.avi", true, "smb://somepath/art.jpg" },
72                                    { "stack:///path/to/movie-cd1.avi , /path/to/movie-cd2.avi", false,  "/path/to/movie-art.jpg" },
73                                    { "stack:///path/to/movie-cd1.avi , /path/to/movie-cd2.avi", true,  "/path/to/art.jpg" },
74                                    { "stack:///path/to/movie_name/cd1/some_file1.avi , /path/to/movie_name/cd2/some_file2.avi", true,  "/path/to/movie_name/art.jpg" },
75                                    { "/home/user/TV Shows/Dexter/S1/1x01.avi", false, "/home/user/TV Shows/Dexter/S1/1x01-art.jpg" },
76                                    { "/home/user/TV Shows/Dexter/S1/1x01.avi", true, "/home/user/TV Shows/Dexter/S1/art.jpg" },
77                                    { "rar://g%3a%5cmultimedia%5cmovies%5cSphere%2erar/Sphere.avi", false, "g:\\multimedia\\movies\\Sphere-art.jpg" },
78                                    { "rar://g%3a%5cmultimedia%5cmovies%5cSphere%2erar/Sphere.avi", true, "g:\\multimedia\\movies\\art.jpg" },
79                                    { "/home/user/movies/movie_name/video_ts/VIDEO_TS.IFO", false, "/home/user/movies/movie_name/art.jpg" },
80                                    { "/home/user/movies/movie_name/video_ts/VIDEO_TS.IFO", true, "/home/user/movies/movie_name/art.jpg" },
81                                    { "/home/user/movies/movie_name/BDMV/index.bdmv", false, "/home/user/movies/movie_name/art.jpg" },
82                                    { "/home/user/movies/movie_name/BDMV/index.bdmv", true, "/home/user/movies/movie_name/art.jpg" }};
83
84 INSTANTIATE_TEST_CASE_P(MovieFiles, TestFileItemSpecifiedArtJpg, ValuesIn(MovieFiles));
85
86 class TestFileItemFallbackArt : public AdvancedSettingsResetBase,
87                                 public WithParamInterface<TestFileData>
88 {
89 };
90
91 TEST_P(TestFileItemFallbackArt, GetLocalArt)
92 {
93   CFileItem item;
94   item.SetPath(GetParam().file);
95   std::string path = CURL(item.GetLocalArt("", GetParam().use_folder)).Get();
96   std::string compare = CURL(GetParam().base).Get();
97   EXPECT_EQ(compare, path);
98 }
99
100 const TestFileData NoArtFiles[] = {{ "c:\\dir\\filename.avi", false, "c:\\dir\\filename.tbn" },
101                                    { "/dir/filename.avi", false, "/dir/filename.tbn" },
102                                    { "smb://somepath/file.avi", false, "smb://somepath/file.tbn" },
103                                    { "/home/user/TV Shows/Dexter/S1/1x01.avi", false, "/home/user/TV Shows/Dexter/S1/1x01.tbn" },
104                                    { "rar://g%3a%5cmultimedia%5cmovies%5cSphere%2erar/Sphere.avi", false, "g:\\multimedia\\movies\\Sphere.tbn" }};
105
106 INSTANTIATE_TEST_CASE_P(NoArt, TestFileItemFallbackArt, ValuesIn(NoArtFiles));
107
108 class TestFileItemBasePath : public AdvancedSettingsResetBase,
109                              public WithParamInterface<TestFileData>
110 {
111 };
112
113 TEST_P(TestFileItemBasePath, GetBaseMoviePath)
114 {
115   CFileItem item;
116   item.SetPath(GetParam().file);
117   std::string path = CURL(item.GetBaseMoviePath(GetParam().use_folder)).Get();
118   std::string compare = CURL(GetParam().base).Get();
119   EXPECT_EQ(compare, path);
120 }
121
122 const TestFileData BaseMovies[] = {{ "c:\\dir\\filename.avi", false, "c:\\dir\\filename.avi" },
123                                    { "c:\\dir\\filename.avi", true,  "c:\\dir\\" },
124                                    { "/dir/filename.avi", false, "/dir/filename.avi" },
125                                    { "/dir/filename.avi", true,  "/dir/" },
126                                    { "smb://somepath/file.avi", false, "smb://somepath/file.avi" },
127                                    { "smb://somepath/file.avi", true, "smb://somepath/" },
128                                    { "stack:///path/to/movie_name/cd1/some_file1.avi , /path/to/movie_name/cd2/some_file2.avi", false, "stack:///path/to/movie_name/cd1/some_file1.avi , /path/to/movie_name/cd2/some_file2.avi" },
129                                    { "stack:///path/to/movie_name/cd1/some_file1.avi , /path/to/movie_name/cd2/some_file2.avi", true,  "/path/to/movie_name/" },
130                                    { "/home/user/TV Shows/Dexter/S1/1x01.avi", false, "/home/user/TV Shows/Dexter/S1/1x01.avi" },
131                                    { "/home/user/TV Shows/Dexter/S1/1x01.avi", true, "/home/user/TV Shows/Dexter/S1/" },
132                                    { "rar://g%3a%5cmultimedia%5cmovies%5cSphere%2erar/Sphere.avi", true, "g:\\multimedia\\movies\\" },
133                                    { "/home/user/movies/movie_name/video_ts/VIDEO_TS.IFO", false, "/home/user/movies/movie_name/" },
134                                    { "/home/user/movies/movie_name/video_ts/VIDEO_TS.IFO", true, "/home/user/movies/movie_name/" },
135                                    { "/home/user/movies/movie_name/BDMV/index.bdmv", false, "/home/user/movies/movie_name/" },
136                                    { "/home/user/movies/movie_name/BDMV/index.bdmv", true, "/home/user/movies/movie_name/" }};
137
138 INSTANTIATE_TEST_CASE_P(BaseNameMovies, TestFileItemBasePath, ValuesIn(BaseMovies));