SrtParserTests.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Threading;
  4. using MediaBrowser.MediaEncoding.Subtitles;
  5. using MediaBrowser.Model.Logging;
  6. using MediaBrowser.Model.MediaInfo;
  7. using Microsoft.VisualStudio.TestTools.UnitTesting;
  8. namespace MediaBrowser.Tests.MediaEncoding.Subtitles
  9. {
  10. [TestClass]
  11. public class SrtParserTests
  12. {
  13. [TestMethod]
  14. public void TestParse()
  15. {
  16. var expectedSubs =
  17. new SubtitleTrackInfo
  18. {
  19. TrackEvents = new List<SubtitleTrackEvent> {
  20. new SubtitleTrackEvent {
  21. Id = "1",
  22. StartPositionTicks = 24000000,
  23. EndPositionTicks = 52000000,
  24. Text =
  25. "[Background Music Playing]"
  26. },
  27. new SubtitleTrackEvent {
  28. Id = "2",
  29. StartPositionTicks = 157120000,
  30. EndPositionTicks = 173990000,
  31. Text =
  32. "Oh my god, Watch out!"+ParserValues.NewLine+"It's coming!!"
  33. },
  34. new SubtitleTrackEvent {
  35. Id = "3",
  36. StartPositionTicks = 257120000,
  37. EndPositionTicks = 303990000,
  38. Text = "[Bird noises]"
  39. },
  40. new SubtitleTrackEvent {
  41. Id = "4",
  42. StartPositionTicks = 310000000,
  43. EndPositionTicks = 319990000,
  44. Text =
  45. "This text is <font color=\"red\">RED</font> and has not been positioned."
  46. },
  47. new SubtitleTrackEvent {
  48. Id = "5",
  49. StartPositionTicks = 320000000,
  50. EndPositionTicks = 329990000,
  51. Text =
  52. "This is a"+ParserValues.NewLine+"new line, as is"+ParserValues.NewLine+"this"
  53. },
  54. new SubtitleTrackEvent {
  55. Id = "6",
  56. StartPositionTicks = 330000000,
  57. EndPositionTicks = 339990000,
  58. Text =
  59. "This contains nested <b>bold, <i>italic, <u>underline</u> and <s>strike-through</s></u></i></b> HTML tags"
  60. },
  61. new SubtitleTrackEvent {
  62. Id = "7",
  63. StartPositionTicks = 340000000,
  64. EndPositionTicks = 349990000,
  65. Text =
  66. "Unclosed but <b>supported HTML tags are left in, SSA italics aren't"
  67. },
  68. new SubtitleTrackEvent {
  69. Id = "8",
  70. StartPositionTicks = 350000000,
  71. EndPositionTicks = 359990000,
  72. Text =
  73. "&lt;ggg&gt;Unsupported&lt;/ggg&gt; HTML tags are escaped and left in, even if &lt;hhh&gt;not closed."
  74. },
  75. new SubtitleTrackEvent {
  76. Id = "9",
  77. StartPositionTicks = 360000000,
  78. EndPositionTicks = 369990000,
  79. Text =
  80. "Multiple SSA tags are stripped"
  81. },
  82. new SubtitleTrackEvent {
  83. Id = "10",
  84. StartPositionTicks = 370000000,
  85. EndPositionTicks = 379990000,
  86. Text =
  87. "Greater than (&lt;) and less than (&gt;) are shown"
  88. }
  89. }
  90. };
  91. var sut = new SrtParser(new NullLogger());
  92. var stream = File.OpenRead(@"MediaEncoding\Subtitles\TestSubtitles\unit.srt");
  93. var result = sut.Parse(stream, CancellationToken.None);
  94. Assert.IsNotNull(result);
  95. Assert.AreEqual(expectedSubs.TrackEvents.Count, result.TrackEvents.Count);
  96. for (int i = 0; i < expectedSubs.TrackEvents.Count; i++)
  97. {
  98. Assert.AreEqual(expectedSubs.TrackEvents[i].Id, result.TrackEvents[i].Id);
  99. Assert.AreEqual(expectedSubs.TrackEvents[i].StartPositionTicks, result.TrackEvents[i].StartPositionTicks);
  100. Assert.AreEqual(expectedSubs.TrackEvents[i].EndPositionTicks, result.TrackEvents[i].EndPositionTicks);
  101. Assert.AreEqual(expectedSubs.TrackEvents[i].Text, result.TrackEvents[i].Text);
  102. }
  103. }
  104. }
  105. }