From 3e2ee75cf16ec3c0c3c585d60c0667beae4469cc Mon Sep 17 00:00:00 2001 From: Kloon ImKloon Date: Fri, 20 Oct 2023 19:30:09 +0200 Subject: [PATCH] Add test for styled SRT --- srt.go | 7 ++--- srt_test.go | 19 ++++++++++++++ subtitles_test.go | 45 +++++++++++++++++++++++++++++++++ testdata/example-styled-in.srt | 24 ++++++++++++++++++ testdata/example-styled-out.srt | 24 ++++++++++++++++++ 5 files changed, 116 insertions(+), 3 deletions(-) create mode 100644 testdata/example-styled-in.srt create mode 100644 testdata/example-styled-out.srt diff --git a/srt.go b/srt.go index e0f0002..74fe153 100644 --- a/srt.go +++ b/srt.go @@ -113,9 +113,10 @@ func ReadFromSRT(i io.Reader) (o *Subtitles, err error) { o.Items = append(o.Items, s) } else { // Add text - if l := parseTextSrt(line); len(l.Items) > 0 { - s.Lines = append(s.Lines, l) - } + s.Lines = append(s.Lines, parseTextSrt(line)) + // if l := parseTextSrt(line); len(l.Items) > 0 { + // s.Lines = append(s.Lines, l) + // } } } return diff --git a/srt_test.go b/srt_test.go index f44fbbd..be630ee 100644 --- a/srt_test.go +++ b/srt_test.go @@ -46,3 +46,22 @@ func TestSRTMissingSequence(t *testing.T) { assert.NoError(t, err) assert.Equal(t, string(c), w.String()) } + +func TestSRTStyled(t *testing.T) { + // Open + s, err := astisub.OpenFile("./testdata/example-styled-in.srt") + assert.NoError(t, err) + assertStyledSubtitleItems(t, s) + + // No subtitles to write + w := &bytes.Buffer{} + err = astisub.Subtitles{}.WriteToSRT(w) + assert.EqualError(t, err, astisub.ErrNoSubtitlesToWrite.Error()) + + // Write + c, err := ioutil.ReadFile("./testdata/example-styled-out.srt") + assert.NoError(t, err) + err = s.WriteToSRT(w) + assert.NoError(t, err) + assert.Equal(t, string(c), w.String()) +} diff --git a/subtitles_test.go b/subtitles_test.go index a8012ba..6f06706 100644 --- a/subtitles_test.go +++ b/subtitles_test.go @@ -40,6 +40,51 @@ func assertSubtitleItems(t *testing.T, i *astisub.Subtitles) { assert.Equal(t, "electronic melody)", i.Items[5].Lines[1].String()) } +func assertStyledSubtitleItems(t *testing.T, i *astisub.Subtitles) { + assert.Len(t, i.Items, 6) + assert.Equal(t, 17*time.Second+985*time.Millisecond, i.Items[0].StartAt) + assert.Equal(t, 20*time.Second+521*time.Millisecond, i.Items[0].EndAt) + assert.Equal(t, "[instrumental music]", i.Items[0].Lines[0].String()) + assert.Equal(t, "#00ff00", *i.Items[0].Lines[0].Items[0].InlineStyle.SRTColor) + assert.True(t, i.Items[0].Lines[0].Items[0].InlineStyle.SRTBold) + assert.False(t, i.Items[0].Lines[0].Items[0].InlineStyle.SRTItalics) + assert.False(t, i.Items[0].Lines[0].Items[0].InlineStyle.SRTUnderline) + assert.Equal(t, 47*time.Second+115*time.Millisecond, i.Items[1].StartAt) + assert.Equal(t, 48*time.Second+282*time.Millisecond, i.Items[1].EndAt) + assert.Equal(t, "[ticks]", i.Items[1].Lines[0].String()) + assert.Equal(t, "#ffffff", *i.Items[1].Lines[0].Items[0].InlineStyle.SRTColor) + assert.False(t, i.Items[1].Lines[0].Items[0].InlineStyle.SRTBold) + assert.False(t, i.Items[1].Lines[0].Items[0].InlineStyle.SRTItalics) + assert.False(t, i.Items[1].Lines[0].Items[0].InlineStyle.SRTUnderline) + assert.Equal(t, 58*time.Second+192*time.Millisecond, i.Items[2].StartAt) + assert.Equal(t, 59*time.Second+727*time.Millisecond, i.Items[2].EndAt) + assert.Equal(t, "[instrumental music]", i.Items[2].Lines[0].String()) + assert.Equal(t, "#00ff00", *i.Items[2].Lines[0].Items[0].InlineStyle.SRTColor) + assert.False(t, i.Items[2].Lines[0].Items[0].InlineStyle.SRTBold) + assert.False(t, i.Items[2].Lines[0].Items[0].InlineStyle.SRTItalics) + assert.False(t, i.Items[2].Lines[0].Items[0].InlineStyle.SRTUnderline) + assert.Equal(t, 1*time.Minute+1*time.Second+662*time.Millisecond, i.Items[3].StartAt) + assert.Equal(t, 1*time.Minute+3*time.Second+63*time.Millisecond, i.Items[3].EndAt) + assert.Equal(t, "[dog barking]", i.Items[3].Lines[0].String()) + assert.Nil(t, i.Items[3].Lines[0].Items[0].InlineStyle.SRTColor) + assert.True(t, i.Items[3].Lines[0].Items[0].InlineStyle.SRTBold) + assert.False(t, i.Items[3].Lines[0].Items[0].InlineStyle.SRTItalics) + assert.True(t, i.Items[3].Lines[0].Items[0].InlineStyle.SRTUnderline) + assert.Equal(t, 1*time.Minute+26*time.Second+787*time.Millisecond, i.Items[4].StartAt) + assert.Equal(t, 1*time.Minute+29*time.Second+523*time.Millisecond, i.Items[4].EndAt) + assert.Equal(t, "[beeping]", i.Items[4].Lines[0].String()) + assert.Nil(t, i.Items[4].Lines[0].Items[0].InlineStyle) + assert.Equal(t, 1*time.Minute+29*time.Second+590*time.Millisecond, i.Items[5].StartAt) + assert.Equal(t, 1*time.Minute+31*time.Second+992*time.Millisecond, i.Items[5].EndAt) + assert.Equal(t, "[automated]", i.Items[5].Lines[0].String()) + assert.Nil(t, i.Items[5].Lines[0].Items[0].InlineStyle) + assert.Equal(t, "'The time is 7:35.'", i.Items[5].Lines[1].String()) + assert.Nil(t, i.Items[5].Lines[1].Items[0].InlineStyle.SRTColor) + assert.False(t, i.Items[5].Lines[1].Items[0].InlineStyle.SRTBold) + assert.True(t, i.Items[5].Lines[1].Items[0].InlineStyle.SRTItalics) + assert.False(t, i.Items[5].Lines[1].Items[0].InlineStyle.SRTUnderline) +} + func mockSubtitles() *astisub.Subtitles { return &astisub.Subtitles{Items: []*astisub.Item{{EndAt: 3 * time.Second, StartAt: time.Second, Lines: []astisub.Line{{Items: []astisub.LineItem{{Text: "subtitle-1"}}}}}, {EndAt: 7 * time.Second, StartAt: 3 * time.Second, Lines: []astisub.Line{{Items: []astisub.LineItem{{Text: "subtitle-2"}}}}}}} } diff --git a/testdata/example-styled-in.srt b/testdata/example-styled-in.srt new file mode 100644 index 0000000..e938314 --- /dev/null +++ b/testdata/example-styled-in.srt @@ -0,0 +1,24 @@ +1 +00:00:17,985 --> 00:00:20,521 +[instrumental music] + +2 +00:00:47,115 --> 00:00:48,282 +[ticks] + +3 +00:00:58,192 --> 00:00:59,727 +[instrumental music] + +4 +00:01:01,662 --> 00:01:03,063 +[dog barking] + +5 +00:01:26,787 --> 00:01:29,523 +[beeping] + +6 +00:01:29,590 --> 00:01:31,992 +[automated] +'The time is 7:35.' diff --git a/testdata/example-styled-out.srt b/testdata/example-styled-out.srt new file mode 100644 index 0000000..8439545 --- /dev/null +++ b/testdata/example-styled-out.srt @@ -0,0 +1,24 @@ +1 +00:00:17,985 --> 00:00:20,521 +[instrumental music] + +2 +00:00:47,115 --> 00:00:48,282 +[ticks] + +3 +00:00:58,192 --> 00:00:59,727 +[instrumental music] + +4 +00:01:01,662 --> 00:01:03,063 +[dog barking] + +5 +00:01:26,787 --> 00:01:29,523 +[beeping] + +6 +00:01:29,590 --> 00:01:31,992 +[automated] +'The time is 7:35.'