[videodb] remove unused seasons table from episode_view
[xbmc.git] / xbmc / video / test / TestVideoFileItemClassify.cpp
blobc9c500bc78fa67a0b6fa82cf7b479fac2952a39d
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "FileItem.h"
10 #include "ServiceBroker.h"
11 #include "filesystem/Directory.h"
12 #include "filesystem/File.h"
13 #include "games/tags/GameInfoTag.h"
14 #include "music/tags/MusicInfoTag.h"
15 #include "pictures/PictureInfoTag.h"
16 #include "test/TestUtils.h"
17 #include "utils/FileExtensionProvider.h"
18 #include "utils/FileUtils.h"
19 #include "utils/URIUtils.h"
20 #include "video/VideoFileItemClassify.h"
21 #include "video/VideoInfoTag.h"
23 #include <array>
25 #include <gtest/gtest.h>
27 using namespace KODI;
29 struct StubDefinition
31 StubDefinition(const std::string& path,
32 bool res = true,
33 const std::string& tagPath = "",
34 bool isFolder = false)
35 : item(path, isFolder), result(res)
37 if (!tagPath.empty())
39 if (isFolder)
40 item.GetVideoInfoTag()->m_strPath = tagPath;
41 else
42 item.GetVideoInfoTag()->m_strFileNameAndPath = tagPath;
46 CFileItem item;
47 bool result;
50 class DiscStubTest : public testing::WithParamInterface<StubDefinition>, public testing::Test
54 TEST_P(DiscStubTest, IsDiscStub)
56 EXPECT_EQ(VIDEO::IsDiscStub(GetParam().item), GetParam().result);
59 const auto discstub_tests = std::array{
60 StubDefinition{"/home/user/test.disc"},
61 StubDefinition{"videodb://foo/bar", true, "/home/user/test.disc"},
62 StubDefinition{"videodb://foo/bar", false, "/home/user/test.disc", true},
63 StubDefinition{"/home/user/test.avi", false},
66 INSTANTIATE_TEST_SUITE_P(TestVideoFileItemClassify,
67 DiscStubTest,
68 testing::ValuesIn(discstub_tests));
70 struct VideoClassifyTest
72 VideoClassifyTest(const std::string& path,
73 bool res = true,
74 const std::string& mime = "",
75 int tag_type = 0)
76 : item(path, false), result(res)
78 if (!mime.empty())
79 item.SetMimeType(mime);
80 switch (tag_type)
82 case 1:
83 item.GetVideoInfoTag()->m_strFileNameAndPath = path;
84 break;
85 case 2:
86 item.GetGameInfoTag()->SetGameClient("some_client");
87 break;
88 case 3:
89 item.GetMusicInfoTag()->SetPlayCount(1);
90 break;
91 case 4:
92 item.GetPictureInfoTag()->SetInfo("foo", "bar");
94 break;
95 default:
96 break;
100 CFileItem item;
101 bool result;
104 class VideoTest : public testing::WithParamInterface<VideoClassifyTest>, public testing::Test
108 TEST_P(VideoTest, IsVideo)
110 EXPECT_EQ(VIDEO::IsVideo(GetParam().item), GetParam().result);
113 const auto video_tests = std::array{
114 VideoClassifyTest{"/home/user/video.avi", true, "video/avi"},
115 VideoClassifyTest{"/home/user/video.avi", true, "", 1},
116 VideoClassifyTest{"/home/user/video.gam", false, "", 2},
117 VideoClassifyTest{"/home/user/video.mus", false, "", 3},
118 VideoClassifyTest{"/home/user/video.pic", false, "", 4},
119 VideoClassifyTest{"pvr://recordings/tv/1", true},
120 VideoClassifyTest{"pvr://123", false},
121 VideoClassifyTest{"dvd://VIDEO_TS/video_ts.ifo", true},
122 VideoClassifyTest{"dvd://1", true},
123 VideoClassifyTest{"/home/user/video.not", true, "application/ogg"},
124 VideoClassifyTest{"/home/user/video.not", true, "application/mp4"},
125 VideoClassifyTest{"/home/user/video.not", true, "application/mxf"},
128 INSTANTIATE_TEST_SUITE_P(TestVideoFileItemClassify, VideoTest, testing::ValuesIn(video_tests));
130 TEST(TestVideoFileItemClassify, VideoExtensions)
132 const auto& exts = CServiceBroker::GetFileExtensionProvider().GetVideoExtensions();
133 for (const auto& ext : StringUtils::Split(exts, "|"))
135 if (!ext.empty())
137 EXPECT_TRUE(VIDEO::IsVideo(CFileItem(ext, false)));
142 TEST(TestVideoFileItemClassify, IsBDFile)
144 EXPECT_TRUE(VIDEO::IsBDFile(CFileItem("/home/foo/index.BDMV", false)));
145 EXPECT_TRUE(VIDEO::IsBDFile(CFileItem("smb://foo/bar/index.bdm", false)));
146 EXPECT_TRUE(VIDEO::IsBDFile(CFileItem("ftp://foo:bar@foobar.com/movieobject.BDMV", false)));
147 EXPECT_TRUE(VIDEO::IsBDFile(CFileItem("https://foobar.com/movieobj.bdm", false)));
148 EXPECT_FALSE(VIDEO::IsBDFile(CFileItem("https://foobar.com/movieobject.not", false)));
151 TEST(TestVideoFileItemClassify, IsDVDFile)
153 EXPECT_TRUE(VIDEO::IsDVDFile(CFileItem("/home/foo/video_ts.vob", false), true, false));
154 EXPECT_TRUE(VIDEO::IsDVDFile(CFileItem("/home/foo/video_ts.VOB", false), true, true));
155 EXPECT_FALSE(VIDEO::IsDVDFile(CFileItem("/home/foo/video_TS.vob", false), false, false));
156 EXPECT_FALSE(VIDEO::IsDVDFile(CFileItem("/home/foo/video_ts.VOb", false), false, true));
158 EXPECT_TRUE(VIDEO::IsDVDFile(CFileItem("/home/foo/vts_yo_0.vob", false), true, false));
159 EXPECT_TRUE(VIDEO::IsDVDFile(CFileItem("/home/foo/vts_0_ifo.vob", false), true, true));
160 EXPECT_FALSE(VIDEO::IsDVDFile(CFileItem("/home/foo/VTS_123456_0.vob", false), false, false));
161 EXPECT_FALSE(VIDEO::IsDVDFile(CFileItem("/home/foo/VTS_qwerty_0.VOB", false), false, true));
163 EXPECT_TRUE(VIDEO::IsDVDFile(CFileItem("/home/foo/video_ts.IFO", false), false, true));
164 EXPECT_TRUE(VIDEO::IsDVDFile(CFileItem("/home/foo/video_ts.IFO", false), true, true));
165 EXPECT_FALSE(VIDEO::IsDVDFile(CFileItem("/home/foo/video_ts.IFO", false), false, false));
166 EXPECT_FALSE(VIDEO::IsDVDFile(CFileItem("/home/foo/video_ts.IFO", false), true, false));
168 EXPECT_TRUE(VIDEO::IsDVDFile(CFileItem("/home/foo/vts_ab_0.ifo", false), false, true));
169 EXPECT_TRUE(VIDEO::IsDVDFile(CFileItem("/home/foo/vts_ab_0.ifo", false), false, true));
170 EXPECT_FALSE(VIDEO::IsDVDFile(CFileItem("/home/foo/VTS_ab_0.ifo", false), false, false));
171 EXPECT_FALSE(VIDEO::IsDVDFile(CFileItem("/home/foo/VTS_ab_0.ifo", false), false, false));
174 TEST(TestVideoFileItemClassify, IsProtectedBlurayDisc)
176 const auto temp_file = CXBMCTestUtils::Instance().CreateTempFile("bluraytest");
177 const std::string dir = CXBMCTestUtils::Instance().TempFileDirectory(temp_file);
178 CFileUtils::DeleteItem(URIUtils::AddFileToFolder(dir, "AACS", "Unit_Key_RO.inf"));
179 EXPECT_FALSE(VIDEO::IsProtectedBlurayDisc(CFileItem(dir, true)));
180 XFILE::CDirectory::Create(URIUtils::AddFileToFolder(dir, "AACS"));
181 XFILE::CFile inf_file;
182 inf_file.OpenForWrite(URIUtils::AddFileToFolder(dir, "AACS", "Unit_Key_RO.inf"));
183 inf_file.Close();
184 EXPECT_TRUE(VIDEO::IsProtectedBlurayDisc(CFileItem(dir, true)));
185 CFileUtils::DeleteItem(URIUtils::AddFileToFolder(dir, "AACS", "Unit_Key_RO.inf"));
186 CXBMCTestUtils::Instance().DeleteTempFile(temp_file);
189 TEST(TestVideoFileItemClassify, IsSubtitle)
191 const auto& exts = CServiceBroker::GetFileExtensionProvider().GetSubtitleExtensions();
192 for (const auto& ext : StringUtils::Split(exts, "|"))
194 if (!ext.empty())
196 EXPECT_TRUE(VIDEO::IsSubtitle(CFileItem("random" + ext, false)));
200 EXPECT_FALSE(VIDEO::IsSubtitle(CFileItem("random.notasub", false)));
203 TEST(TestVideoFileItemClassify, IsVideoAssetsFile)
205 EXPECT_TRUE(VIDEO::IsVideoAssetFile(CFileItem("videodb://foo/bar?videoversionid=1", false)));
206 EXPECT_FALSE(VIDEO::IsVideoAssetFile(CFileItem("videodb://foo/bar?videoversionid=1", true)));
207 EXPECT_FALSE(VIDEO::IsVideoAssetFile(CFileItem("videodb://foo/bar", false)));
210 TEST(TestVideoFileItemClassify, IsVideoDb)
212 EXPECT_TRUE(VIDEO::IsVideoDb(CFileItem("videodb://1/2/3", false)));
213 EXPECT_TRUE(VIDEO::IsVideoDb(CFileItem("videodb://1/2/", true)));
214 EXPECT_FALSE(VIDEO::IsVideoDb(CFileItem("/videodb/home/foo/Extraordinary/", true)));
217 TEST(TestVideoFileItemClassify, IsVideoExtrasFolder)
219 EXPECT_TRUE(VIDEO::IsVideoExtrasFolder(CFileItem("/home/foo/Extras/", true)));
220 EXPECT_TRUE(VIDEO::IsVideoExtrasFolder(CFileItem("/home/foo/extras/", true)));
221 EXPECT_FALSE(VIDEO::IsVideoExtrasFolder(CFileItem("/home/foo/Extraordinary/", true)));
222 EXPECT_FALSE(VIDEO::IsVideoExtrasFolder(CFileItem("/home/foo/Extras/abc.mkv", false)));