/src/NzbDrone.Core.Test/MediaFiles/MediaInfo/MediaInfoFormatterTests/FormatAudioChannelsFixture.cs

https://github.com/NzbDrone/NzbDrone · C# · 321 lines · 278 code · 43 blank · 0 comment · 0 complexity · 2587e006e107ec83a335fbcfa25afdfe MD5 · raw file

  1. using System.Globalization;
  2. using System.Threading;
  3. using FluentAssertions;
  4. using NUnit.Framework;
  5. using NzbDrone.Core.MediaFiles.MediaInfo;
  6. using NzbDrone.Test.Common;
  7. namespace NzbDrone.Core.Test.MediaFiles.MediaInfo.MediaInfoFormatterTests
  8. {
  9. [TestFixture]
  10. public class FormatAudioChannelsFixture : TestBase
  11. {
  12. [Test]
  13. public void should_subtract_one_from_AudioChannels_as_total_channels_if_LFE_in_AudioChannelPositionsText()
  14. {
  15. var mediaInfoModel = new MediaInfoModel
  16. {
  17. AudioChannelsContainer = 6,
  18. AudioChannelPositions = null,
  19. AudioChannelPositionsTextContainer = "Front: L C R, Side: L R, LFE"
  20. };
  21. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(5.1m);
  22. }
  23. [Test]
  24. public void should_use_AudioChannels_as_total_channels_if_LFE_not_in_AudioChannelPositionsText()
  25. {
  26. var mediaInfoModel = new MediaInfoModel
  27. {
  28. AudioChannelsContainer = 2,
  29. AudioChannelPositions = null,
  30. AudioChannelPositionsTextContainer = "Front: L R"
  31. };
  32. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(2);
  33. }
  34. [Test]
  35. public void should_return_0_if_schema_revision_is_less_than_3_and_other_properties_are_null()
  36. {
  37. var mediaInfoModel = new MediaInfoModel
  38. {
  39. AudioChannelsContainer = 2,
  40. AudioChannelPositions = null,
  41. AudioChannelPositionsTextContainer = null,
  42. SchemaRevision = 2
  43. };
  44. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(0);
  45. }
  46. [Test]
  47. public void should_use_AudioChannels_if_schema_revision_is_3_and_other_properties_are_null()
  48. {
  49. var mediaInfoModel = new MediaInfoModel
  50. {
  51. AudioChannelsContainer = 2,
  52. AudioChannelPositions = null,
  53. AudioChannelPositionsTextContainer = null,
  54. SchemaRevision = 3
  55. };
  56. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(2);
  57. }
  58. [Test]
  59. public void should_use_AudioChannels_if_schema_revision_is_3_and_AudioChannelPositions_is_0()
  60. {
  61. var mediaInfoModel = new MediaInfoModel
  62. {
  63. AudioFormat = "FLAC",
  64. AudioChannelsContainer = 6,
  65. AudioChannelPositions = "0/0/0",
  66. AudioChannelPositionsTextContainer = null,
  67. SchemaRevision = 3
  68. };
  69. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(5.1m);
  70. }
  71. [Test]
  72. public void should_sum_AudioChannelPositions()
  73. {
  74. var mediaInfoModel = new MediaInfoModel
  75. {
  76. AudioChannelsContainer = 2,
  77. AudioChannelPositions = "2/0/0",
  78. AudioChannelPositionsTextContainer = null,
  79. SchemaRevision = 3
  80. };
  81. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(2);
  82. }
  83. [Test]
  84. public void should_sum_AudioChannelPositions_including_decimal()
  85. {
  86. var mediaInfoModel = new MediaInfoModel
  87. {
  88. AudioChannelsContainer = 2,
  89. AudioChannelPositions = "3/2/0.1",
  90. AudioChannelPositionsTextContainer = null,
  91. SchemaRevision = 3
  92. };
  93. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(5.1m);
  94. }
  95. [Test]
  96. public void should_format_8_channel_object_based_as_71_if_dtsx()
  97. {
  98. var mediaInfoModel = new MediaInfoModel
  99. {
  100. AudioChannelsContainer = 8,
  101. AudioChannelsStream = 0,
  102. AudioFormat = "DTS",
  103. AudioAdditionalFeatures = "XLL X",
  104. AudioChannelPositions = "Object Based",
  105. AudioChannelPositionsTextContainer = "Object Based",
  106. AudioChannelPositionsTextStream = "Object Based",
  107. SchemaRevision = 3
  108. };
  109. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(7.1m);
  110. }
  111. [Test]
  112. public void should_format_8_channel_blank_as_71_if_dtsx()
  113. {
  114. var mediaInfoModel = new MediaInfoModel
  115. {
  116. AudioChannelsContainer = 8,
  117. AudioChannelsStream = 0,
  118. AudioFormat = "DTS",
  119. AudioAdditionalFeatures = "XLL X",
  120. AudioChannelPositions = "",
  121. AudioChannelPositionsTextContainer = "",
  122. AudioChannelPositionsTextStream = "Object Based",
  123. SchemaRevision = 3
  124. };
  125. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(7.1m);
  126. }
  127. [Test]
  128. public void should_format_6_channel_zero_as_51_if_flac()
  129. {
  130. var mediaInfoModel = new MediaInfoModel
  131. {
  132. AudioFormat = "FLAC",
  133. AudioChannelsContainer = 6,
  134. AudioChannelPositions = "0/0/0",
  135. AudioChannelPositionsTextContainer = null,
  136. SchemaRevision = 3
  137. };
  138. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(5.1m);
  139. }
  140. [Test]
  141. public void should_ignore_culture_on_channel_summary()
  142. {
  143. Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
  144. var mediaInfoModel = new MediaInfoModel
  145. {
  146. AudioChannelsContainer = 2,
  147. AudioChannelPositions = "3/2/0.1",
  148. AudioChannelPositionsTextContainer = null,
  149. SchemaRevision = 3
  150. };
  151. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(5.1m);
  152. }
  153. [Test]
  154. public void should_handle_AudioChannelPositions_three_digits()
  155. {
  156. var mediaInfoModel = new MediaInfoModel
  157. {
  158. AudioChannelsContainer = 2,
  159. AudioChannelPositions = "3/2/0.2.1",
  160. AudioChannelPositionsTextContainer = null,
  161. SchemaRevision = 3
  162. };
  163. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(7.1m);
  164. }
  165. [Test]
  166. public void should_cleanup_extraneous_text_from_AudioChannelPositions()
  167. {
  168. var mediaInfoModel = new MediaInfoModel
  169. {
  170. AudioChannelsContainer = 2,
  171. AudioChannelPositions = "Object Based / 3/2/2.1",
  172. AudioChannelPositionsTextContainer = null,
  173. SchemaRevision = 3
  174. };
  175. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(7.1m);
  176. }
  177. [Test]
  178. public void should_skip_empty_groups_in_AudioChannelPositions()
  179. {
  180. var mediaInfoModel = new MediaInfoModel
  181. {
  182. AudioChannelsContainer = 2,
  183. AudioChannelPositions = " / 2/0/0.0",
  184. AudioChannelPositionsTextContainer = null,
  185. SchemaRevision = 3
  186. };
  187. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(2);
  188. }
  189. [Test]
  190. public void should_sum_first_series_of_numbers_from_AudioChannelPositions()
  191. {
  192. var mediaInfoModel = new MediaInfoModel
  193. {
  194. AudioChannelsContainer = 2,
  195. AudioChannelPositions = "3/2/2.1 / 3/2/2.1",
  196. AudioChannelPositionsTextContainer = null,
  197. SchemaRevision = 3
  198. };
  199. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(7.1m);
  200. }
  201. [Test]
  202. public void should_sum_first_series_of_numbers_from_AudioChannelPositions_with_three_digits()
  203. {
  204. var mediaInfoModel = new MediaInfoModel
  205. {
  206. AudioChannelsContainer = 2,
  207. AudioChannelPositions = "3/2/0.2.1 / 3/2/0.1",
  208. AudioChannelPositionsTextContainer = null,
  209. SchemaRevision = 3
  210. };
  211. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(7.1m);
  212. }
  213. [Test]
  214. public void should_sum_dual_mono_representation_AudioChannelPositions()
  215. {
  216. var mediaInfoModel = new MediaInfoModel
  217. {
  218. AudioChannelsContainer = 2,
  219. AudioChannelPositions = "1+1",
  220. AudioChannelPositionsTextContainer = null,
  221. SchemaRevision = 3
  222. };
  223. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(2.0m);
  224. }
  225. [Test]
  226. public void should_use_AudioChannelPositionText_when_AudioChannelChannelPosition_is_invalid()
  227. {
  228. var mediaInfoModel = new MediaInfoModel
  229. {
  230. AudioChannelsContainer = 6,
  231. AudioChannelPositions = "15 objects",
  232. AudioChannelPositionsTextContainer = "15 objects / Front: L C R, Side: L R, LFE",
  233. SchemaRevision = 3
  234. };
  235. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(5.1m);
  236. }
  237. [Test]
  238. public void should_remove_atmos_objects_from_AudioChannelPostions()
  239. {
  240. var mediaInfoModel = new MediaInfoModel
  241. {
  242. AudioChannelsContainer = 2,
  243. AudioChannelPositions = "15 objects / 3/2.1",
  244. AudioChannelPositionsTextContainer = null,
  245. SchemaRevision = 3
  246. };
  247. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(5.1m);
  248. }
  249. [Test]
  250. public void should_use_audio_stream_text_when_exists()
  251. {
  252. var mediaInfoModel = new MediaInfoModel
  253. {
  254. AudioChannelsContainer = 6,
  255. AudioChannelsStream = 8,
  256. AudioChannelPositions = null,
  257. AudioChannelPositionsTextContainer = null,
  258. AudioChannelPositionsTextStream = "Front: L C R, Side: L R, Back: L R, LFE",
  259. SchemaRevision = 6
  260. };
  261. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(7.1m);
  262. }
  263. [Test]
  264. public void should_use_audio_stream_channels_when_exists()
  265. {
  266. var mediaInfoModel = new MediaInfoModel
  267. {
  268. AudioChannelsContainer = 6,
  269. AudioChannelsStream = 8,
  270. AudioChannelPositions = null,
  271. AudioChannelPositionsTextContainer = null,
  272. AudioChannelPositionsTextStream = null,
  273. SchemaRevision = 6
  274. };
  275. MediaInfoFormatter.FormatAudioChannels(mediaInfoModel).Should().Be(8m);
  276. }
  277. }
  278. }