SrtParserTests.cs 11 KB

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