From 912a98788e66b836125fe8ef37672a4de20c169c Mon Sep 17 00:00:00 2001 From: Frédéric Guillot Date: Thu, 28 Nov 2019 23:47:53 -0800 Subject: Add support of media elements for Atom feeds --- reader/atom/parser_test.go | 171 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 152 insertions(+), 19 deletions(-) (limited to 'reader/atom/parser_test.go') diff --git a/reader/atom/parser_test.go b/reader/atom/parser_test.go index 746c767..37ab32e 100644 --- a/reader/atom/parser_test.go +++ b/reader/atom/parser_test.go @@ -472,31 +472,30 @@ func TestParseEntryWithEnclosures(t *testing.T) { } if len(feed.Entries[0].Enclosures) != 2 { - t.Errorf("Incorrect number of enclosures, got: %d", len(feed.Entries[0].Enclosures)) + t.Fatalf("Incorrect number of enclosures, got: %d", len(feed.Entries[0].Enclosures)) } - if feed.Entries[0].Enclosures[0].URL != "http://www.example.org/myaudiofile.mp3" { - t.Errorf("Incorrect enclosure URL, got: %s", feed.Entries[0].Enclosures[0].URL) + expectedResults := []struct { + url string + mimeType string + size int64 + }{ + {"http://www.example.org/myaudiofile.mp3", "audio/mpeg", 1234}, + {"http://www.example.org/myaudiofile.torrent", "application/x-bittorrent", 4567}, } - if feed.Entries[0].Enclosures[0].MimeType != "audio/mpeg" { - t.Errorf("Incorrect enclosure type, got: %s", feed.Entries[0].Enclosures[0].MimeType) - } - - if feed.Entries[0].Enclosures[0].Size != 1234 { - t.Errorf("Incorrect enclosure length, got: %d", feed.Entries[0].Enclosures[0].Size) - } - - if feed.Entries[0].Enclosures[1].URL != "http://www.example.org/myaudiofile.torrent" { - t.Errorf("Incorrect enclosure URL, got: %s", feed.Entries[0].Enclosures[1].URL) - } + for index, enclosure := range feed.Entries[0].Enclosures { + if expectedResults[index].url != enclosure.URL { + t.Errorf(`Unexpected enclosure URL, got %q instead of %q`, enclosure.URL, expectedResults[index].url) + } - if feed.Entries[0].Enclosures[1].MimeType != "application/x-bittorrent" { - t.Errorf("Incorrect enclosure type, got: %s", feed.Entries[0].Enclosures[1].MimeType) - } + if expectedResults[index].mimeType != enclosure.MimeType { + t.Errorf(`Unexpected enclosure type, got %q instead of %q`, enclosure.MimeType, expectedResults[index].mimeType) + } - if feed.Entries[0].Enclosures[1].Size != 4567 { - t.Errorf("Incorrect enclosure length, got: %d", feed.Entries[0].Enclosures[1].Size) + if expectedResults[index].size != enclosure.Size { + t.Errorf(`Unexpected enclosure size, got %d instead of %d`, enclosure.Size, expectedResults[index].size) + } } } @@ -596,3 +595,137 @@ func TestParseWithInvalidCharacterEntity(t *testing.T) { t.Errorf(`Incorrect URL, got: %q`, feed.SiteURL) } } + +func TestParseMediaGroup(t *testing.T) { + data := ` + + http://www.example.org/myfeed + My Video Feed + 2005-07-15T12:00:00Z + + + + http://www.example.org/entries/1 + Some Video + 2005-07-15T12:00:00Z + + + Another title + + + Some description +A website: http://example.org/ + + + ` + + feed, err := Parse(bytes.NewBufferString(data)) + if err != nil { + t.Fatal(err) + } + + if len(feed.Entries) != 1 { + t.Errorf("Incorrect number of entries, got: %d", len(feed.Entries)) + } + + if feed.Entries[0].URL != "http://www.example.org/entries/1" { + t.Errorf("Incorrect entry URL, got: %s", feed.Entries[0].URL) + } + + if feed.Entries[0].Content != `Some description
A website: http://example.org/` { + t.Errorf("Incorrect entry content, got: %q", feed.Entries[0].Content) + } + + if len(feed.Entries[0].Enclosures) != 2 { + t.Fatalf("Incorrect number of enclosures, got: %d", len(feed.Entries[0].Enclosures)) + } + + expectedResults := []struct { + url string + mimeType string + size int64 + }{ + {"https://example.org/thumbnail.jpg", "image/*", 0}, + {"https://www.youtube.com/v/abcd", "application/x-shockwave-flash", 0}, + } + + for index, enclosure := range feed.Entries[0].Enclosures { + if expectedResults[index].url != enclosure.URL { + t.Errorf(`Unexpected enclosure URL, got %q instead of %q`, enclosure.URL, expectedResults[index].url) + } + + if expectedResults[index].mimeType != enclosure.MimeType { + t.Errorf(`Unexpected enclosure type, got %q instead of %q`, enclosure.MimeType, expectedResults[index].mimeType) + } + + if expectedResults[index].size != enclosure.Size { + t.Errorf(`Unexpected enclosure size, got %d instead of %d`, enclosure.Size, expectedResults[index].size) + } + } +} + +func TestParseMediaElements(t *testing.T) { + data := ` + + http://www.example.org/myfeed + My Video Feed + 2005-07-15T12:00:00Z + + + + http://www.example.org/entries/1 + Some Video + 2005-07-15T12:00:00Z + + Another title + + + Some description +A website: http://example.org/ + + ` + + feed, err := Parse(bytes.NewBufferString(data)) + if err != nil { + t.Fatal(err) + } + + if len(feed.Entries) != 1 { + t.Errorf("Incorrect number of entries, got: %d", len(feed.Entries)) + } + + if feed.Entries[0].URL != "http://www.example.org/entries/1" { + t.Errorf("Incorrect entry URL, got: %s", feed.Entries[0].URL) + } + + if feed.Entries[0].Content != `Some description
A website: http://example.org/` { + t.Errorf("Incorrect entry content, got: %q", feed.Entries[0].Content) + } + + if len(feed.Entries[0].Enclosures) != 2 { + t.Fatalf("Incorrect number of enclosures, got: %d", len(feed.Entries[0].Enclosures)) + } + + expectedResults := []struct { + url string + mimeType string + size int64 + }{ + {"https://example.org/thumbnail.jpg", "image/*", 0}, + {"https://www.youtube.com/v/abcd", "application/x-shockwave-flash", 0}, + } + + for index, enclosure := range feed.Entries[0].Enclosures { + if expectedResults[index].url != enclosure.URL { + t.Errorf(`Unexpected enclosure URL, got %q instead of %q`, enclosure.URL, expectedResults[index].url) + } + + if expectedResults[index].mimeType != enclosure.MimeType { + t.Errorf(`Unexpected enclosure type, got %q instead of %q`, enclosure.MimeType, expectedResults[index].mimeType) + } + + if expectedResults[index].size != enclosure.Size { + t.Errorf(`Unexpected enclosure size, got %d instead of %d`, enclosure.Size, expectedResults[index].size) + } + } +} -- cgit v1.2.3