package main import ( "bytes" "reflect" "strings" "testing" ) func TestParseSingleEntry(t *testing.T) { document := strings.Join([]string{ "1", "00:00:00,000 --> 00:00:14,000", "toto", "titi", }, "\n") entries, err := parseSrt(bytes.NewBuffer([]byte(document))) if err != nil { t.Fatal(err) } expectedEntries := []Entry{ { Start: "00:00:00,000", End: "00:00:14,000", Line1: "toto", Line2: "titi", }, } if !reflect.DeepEqual(entries, expectedEntries) { t.Fatalf("unexpected entries: %v", entries) } } func TestParseMultipleEntries(t *testing.T) { document := strings.Join([]string{ "1", "00:00:00,000 --> 00:00:14,000", "toto", "titi", "", "2", "00:01:00,000 --> 00:02:14,000", "tutu", "tata", }, "\n") entries, err := parseSrt(bytes.NewBuffer([]byte(document))) if err != nil { t.Fatal(err) } expectedEntries := []Entry{ { Start: "00:00:00,000", End: "00:00:14,000", Line1: "toto", Line2: "titi", }, { Start: "00:01:00,000", End: "00:02:14,000", Line1: "tutu", Line2: "tata", }, } if !reflect.DeepEqual(entries, expectedEntries) { t.Fatalf("unexpected entries: %v", entries) } } func TestParseInvalidTimestamp(t *testing.T) { document := strings.Join([]string{ "1", "00:00:00.000 --> 00:00:14.000", "toto", "titi", }, "\n") _, err := parseSrt(bytes.NewBuffer([]byte(document))) if err == nil { t.Fatal("expected error") } else if eStr := err.Error(); eStr != "invalid timestamp line: \"00:00:00.000 --> 00:00:14.000\"" { t.Fatalf("unexpected error: %q", eStr) } } func TestParseSingleLine(t *testing.T) { document := strings.Join([]string{ "1", "00:00:00,000 --> 00:00:14,000", "toto", }, "\n") entries, err := parseSrt(bytes.NewBuffer([]byte(document))) if err != nil { t.Fatal(err) } expectedEntries := []Entry{ { Start: "00:00:00,000", End: "00:00:14,000", Line1: "toto", Line2: "", }, } if !reflect.DeepEqual(entries, expectedEntries) { t.Fatalf("unexpected entries: %v", entries) } } func TestParseMultipleEntriesSingleLine(t *testing.T) { document := strings.Join([]string{ "1", "00:00:00,000 --> 00:00:14,000", "toto", "", "2", "00:01:00,000 --> 00:02:14,000", "tata", }, "\n") entries, err := parseSrt(bytes.NewBuffer([]byte(document))) if err != nil { t.Fatal(err) } expectedEntries := []Entry{ { Start: "00:00:00,000", End: "00:00:14,000", Line1: "toto", Line2: "", }, { Start: "00:01:00,000", End: "00:02:14,000", Line1: "tata", Line2: "", }, } if !reflect.DeepEqual(entries, expectedEntries) { t.Fatalf("unexpected entries: %v", entries) } }