MultiVersionTests.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. using System.Linq;
  2. using Emby.Naming.Common;
  3. using Emby.Naming.Video;
  4. using MediaBrowser.Model.IO;
  5. using Xunit;
  6. namespace Jellyfin.Naming.Tests.Video
  7. {
  8. public class MultiVersionTests
  9. {
  10. private readonly NamingOptions _namingOptions = new NamingOptions();
  11. // FIXME
  12. // [Fact]
  13. private void TestMultiEdition1()
  14. {
  15. var files = new[]
  16. {
  17. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past - 1080p.mkv",
  18. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past-trailer.mp4",
  19. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past - [hsbs].mkv",
  20. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past [hsbs].mkv"
  21. };
  22. var resolver = GetResolver();
  23. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  24. {
  25. IsDirectory = false,
  26. FullName = i
  27. }).ToList()).ToList();
  28. Assert.Single(result);
  29. Assert.Single(result[0].Extras);
  30. }
  31. // FIXME
  32. // [Fact]
  33. private void TestMultiEdition2()
  34. {
  35. var files = new[]
  36. {
  37. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past - apple.mkv",
  38. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past-trailer.mp4",
  39. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past - banana.mkv",
  40. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past [banana].mp4"
  41. };
  42. var resolver = GetResolver();
  43. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  44. {
  45. IsDirectory = false,
  46. FullName = i
  47. }).ToList()).ToList();
  48. Assert.Single(result);
  49. Assert.Single(result[0].Extras);
  50. Assert.Equal(2, result[0].AlternateVersions.Count);
  51. }
  52. [Fact]
  53. public void TestMultiEdition3()
  54. {
  55. var files = new[]
  56. {
  57. @"/movies/The Phantom of the Opera (1925)/The Phantom of the Opera (1925) - 1925 version.mkv",
  58. @"/movies/The Phantom of the Opera (1925)/The Phantom of the Opera (1925) - 1929 version.mkv"
  59. };
  60. var resolver = GetResolver();
  61. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  62. {
  63. IsDirectory = false,
  64. FullName = i
  65. }).ToList()).ToList();
  66. Assert.Single(result);
  67. Assert.Single(result[0].AlternateVersions);
  68. }
  69. // FIXME
  70. // [Fact]
  71. private void TestLetterFolders()
  72. {
  73. var files = new[]
  74. {
  75. @"/movies/M/Movie 1.mkv",
  76. @"/movies/M/Movie 2.mkv",
  77. @"/movies/M/Movie 3.mkv",
  78. @"/movies/M/Movie 4.mkv",
  79. @"/movies/M/Movie 5.mkv",
  80. @"/movies/M/Movie 6.mkv",
  81. @"/movies/M/Movie 7.mkv"
  82. };
  83. var resolver = GetResolver();
  84. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  85. {
  86. IsDirectory = false,
  87. FullName = i
  88. }).ToList()).ToList();
  89. Assert.Equal(7, result.Count);
  90. Assert.Empty(result[0].Extras);
  91. Assert.Empty(result[0].AlternateVersions);
  92. }
  93. // FIXME
  94. // [Fact]
  95. private void TestMultiVersionLimit()
  96. {
  97. var files = new[]
  98. {
  99. @"/movies/Movie/Movie.mkv",
  100. @"/movies/Movie/Movie-2.mkv",
  101. @"/movies/Movie/Movie-3.mkv",
  102. @"/movies/Movie/Movie-4.mkv",
  103. @"/movies/Movie/Movie-5.mkv",
  104. @"/movies/Movie/Movie-6.mkv",
  105. @"/movies/Movie/Movie-7.mkv",
  106. @"/movies/Movie/Movie-8.mkv"
  107. };
  108. var resolver = GetResolver();
  109. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  110. {
  111. IsDirectory = false,
  112. FullName = i
  113. }).ToList()).ToList();
  114. Assert.Single(result);
  115. Assert.Empty(result[0].Extras);
  116. Assert.Equal(7, result[0].AlternateVersions.Count);
  117. }
  118. // FIXME
  119. // [Fact]
  120. private void TestMultiVersionLimit2()
  121. {
  122. var files = new[]
  123. {
  124. @"/movies/Mo/Movie 1.mkv",
  125. @"/movies/Mo/Movie 2.mkv",
  126. @"/movies/Mo/Movie 3.mkv",
  127. @"/movies/Mo/Movie 4.mkv",
  128. @"/movies/Mo/Movie 5.mkv",
  129. @"/movies/Mo/Movie 6.mkv",
  130. @"/movies/Mo/Movie 7.mkv",
  131. @"/movies/Mo/Movie 8.mkv",
  132. @"/movies/Mo/Movie 9.mkv"
  133. };
  134. var resolver = GetResolver();
  135. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  136. {
  137. IsDirectory = false,
  138. FullName = i
  139. }).ToList()).ToList();
  140. Assert.Equal(9, result.Count);
  141. Assert.Empty(result[0].Extras);
  142. Assert.Empty(result[0].AlternateVersions);
  143. }
  144. // FIXME
  145. // [Fact]
  146. private void TestMultiVersion3()
  147. {
  148. var files = new[]
  149. {
  150. @"/movies/Movie/Movie 1.mkv",
  151. @"/movies/Movie/Movie 2.mkv",
  152. @"/movies/Movie/Movie 3.mkv",
  153. @"/movies/Movie/Movie 4.mkv",
  154. @"/movies/Movie/Movie 5.mkv"
  155. };
  156. var resolver = GetResolver();
  157. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  158. {
  159. IsDirectory = false,
  160. FullName = i
  161. }).ToList()).ToList();
  162. Assert.Equal(5, result.Count);
  163. Assert.Empty(result[0].Extras);
  164. Assert.Empty(result[0].AlternateVersions);
  165. }
  166. // FIXME
  167. // [Fact]
  168. private void TestMultiVersion4()
  169. {
  170. // Test for false positive
  171. var files = new[]
  172. {
  173. @"/movies/Iron Man/Iron Man.mkv",
  174. @"/movies/Iron Man/Iron Man (2008).mkv",
  175. @"/movies/Iron Man/Iron Man (2009).mkv",
  176. @"/movies/Iron Man/Iron Man (2010).mkv",
  177. @"/movies/Iron Man/Iron Man (2011).mkv"
  178. };
  179. var resolver = GetResolver();
  180. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  181. {
  182. IsDirectory = false,
  183. FullName = i
  184. }).ToList()).ToList();
  185. Assert.Equal(5, result.Count);
  186. Assert.Empty(result[0].Extras);
  187. Assert.Empty(result[0].AlternateVersions);
  188. }
  189. // FIXME
  190. // [Fact]
  191. private void TestMultiVersion5()
  192. {
  193. var files = new[]
  194. {
  195. @"/movies/Iron Man/Iron Man.mkv",
  196. @"/movies/Iron Man/Iron Man-720p.mkv",
  197. @"/movies/Iron Man/Iron Man-test.mkv",
  198. @"/movies/Iron Man/Iron Man-bluray.mkv",
  199. @"/movies/Iron Man/Iron Man-3d.mkv",
  200. @"/movies/Iron Man/Iron Man-3d-hsbs.mkv",
  201. @"/movies/Iron Man/Iron Man-3d.hsbs.mkv",
  202. @"/movies/Iron Man/Iron Man[test].mkv",
  203. };
  204. var resolver = GetResolver();
  205. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  206. {
  207. IsDirectory = false,
  208. FullName = i
  209. }).ToList()).ToList();
  210. Assert.Single(result);
  211. Assert.Empty(result[0].Extras);
  212. Assert.Equal(7, result[0].AlternateVersions.Count);
  213. Assert.False(result[0].AlternateVersions[2].Is3D);
  214. Assert.True(result[0].AlternateVersions[3].Is3D);
  215. Assert.True(result[0].AlternateVersions[4].Is3D);
  216. }
  217. // FIXME
  218. // [Fact]
  219. private void TestMultiVersion6()
  220. {
  221. var files = new[]
  222. {
  223. @"/movies/Iron Man/Iron Man.mkv",
  224. @"/movies/Iron Man/Iron Man - 720p.mkv",
  225. @"/movies/Iron Man/Iron Man - test.mkv",
  226. @"/movies/Iron Man/Iron Man - bluray.mkv",
  227. @"/movies/Iron Man/Iron Man - 3d.mkv",
  228. @"/movies/Iron Man/Iron Man - 3d-hsbs.mkv",
  229. @"/movies/Iron Man/Iron Man - 3d.hsbs.mkv",
  230. @"/movies/Iron Man/Iron Man [test].mkv"
  231. };
  232. var resolver = GetResolver();
  233. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  234. {
  235. IsDirectory = false,
  236. FullName = i
  237. }).ToList()).ToList();
  238. Assert.Single(result);
  239. Assert.Empty(result[0].Extras);
  240. Assert.Equal(7, result[0].AlternateVersions.Count);
  241. Assert.False(result[0].AlternateVersions[3].Is3D);
  242. Assert.True(result[0].AlternateVersions[4].Is3D);
  243. Assert.True(result[0].AlternateVersions[5].Is3D);
  244. }
  245. // FIXME
  246. // [Fact]
  247. private void TestMultiVersion7()
  248. {
  249. var files = new[]
  250. {
  251. @"/movies/Iron Man/Iron Man - B (2006).mkv",
  252. @"/movies/Iron Man/Iron Man - C (2007).mkv"
  253. };
  254. var resolver = GetResolver();
  255. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  256. {
  257. IsDirectory = false,
  258. FullName = i
  259. }).ToList()).ToList();
  260. Assert.Equal(2, result.Count);
  261. }
  262. // FIXME
  263. // [Fact]
  264. private void TestMultiVersion8()
  265. {
  266. // This is not actually supported yet
  267. var files = new[]
  268. {
  269. @"/movies/Iron Man/Iron Man.mkv",
  270. @"/movies/Iron Man/Iron Man_720p.mkv",
  271. @"/movies/Iron Man/Iron Man_test.mkv",
  272. @"/movies/Iron Man/Iron Man_bluray.mkv",
  273. @"/movies/Iron Man/Iron Man_3d.mkv",
  274. @"/movies/Iron Man/Iron Man_3d-hsbs.mkv",
  275. @"/movies/Iron Man/Iron Man_3d.hsbs.mkv"
  276. };
  277. var resolver = GetResolver();
  278. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  279. {
  280. IsDirectory = false,
  281. FullName = i
  282. }).ToList()).ToList();
  283. Assert.Single(result);
  284. Assert.Empty(result[0].Extras);
  285. Assert.Equal(6, result[0].AlternateVersions.Count);
  286. Assert.False(result[0].AlternateVersions[2].Is3D);
  287. Assert.True(result[0].AlternateVersions[3].Is3D);
  288. Assert.True(result[0].AlternateVersions[4].Is3D);
  289. }
  290. // FIXME
  291. // [Fact]
  292. private void TestMultiVersion9()
  293. {
  294. // Test for false positive
  295. var files = new[]
  296. {
  297. @"/movies/Iron Man/Iron Man (2007).mkv",
  298. @"/movies/Iron Man/Iron Man (2008).mkv",
  299. @"/movies/Iron Man/Iron Man (2009).mkv",
  300. @"/movies/Iron Man/Iron Man (2010).mkv",
  301. @"/movies/Iron Man/Iron Man (2011).mkv"
  302. };
  303. var resolver = GetResolver();
  304. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  305. {
  306. IsDirectory = false,
  307. FullName = i
  308. }).ToList()).ToList();
  309. Assert.Equal(5, result.Count);
  310. Assert.Empty(result[0].Extras);
  311. Assert.Empty(result[0].AlternateVersions);
  312. }
  313. // FIXME
  314. // [Fact]
  315. private void TestMultiVersion10()
  316. {
  317. var files = new[]
  318. {
  319. @"/movies/Blade Runner (1982)/Blade Runner (1982) [Final Cut] [1080p HEVC AAC].mkv",
  320. @"/movies/Blade Runner (1982)/Blade Runner (1982) [EE by ADM] [480p HEVC AAC,AAC,AAC].mkv"
  321. };
  322. var resolver = GetResolver();
  323. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  324. {
  325. IsDirectory = false,
  326. FullName = i
  327. }).ToList()).ToList();
  328. Assert.Single(result);
  329. Assert.Empty(result[0].Extras);
  330. Assert.Single(result[0].AlternateVersions);
  331. }
  332. // FIXME
  333. // [Fact]
  334. private void TestMultiVersion11()
  335. {
  336. // Currently not supported but we should probably handle this.
  337. var files = new[]
  338. {
  339. @"/movies/X-Men Apocalypse (2016)/X-Men Apocalypse (2016) [1080p] Blu-ray.x264.DTS.mkv",
  340. @"/movies/X-Men Apocalypse (2016)/X-Men Apocalypse (2016) [2160p] Blu-ray.x265.AAC.mkv"
  341. };
  342. var resolver = GetResolver();
  343. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  344. {
  345. IsDirectory = false,
  346. FullName = i
  347. }).ToList()).ToList();
  348. Assert.Single(result);
  349. Assert.Empty(result[0].Extras);
  350. Assert.Single(result[0].AlternateVersions);
  351. }
  352. private VideoListResolver GetResolver()
  353. {
  354. return new VideoListResolver(_namingOptions);
  355. }
  356. }
  357. }