2
0

SrtParserTests.cs 11 KB

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