diff options
Diffstat (limited to 'reader/rss/parser_test.go')
-rw-r--r-- | reader/rss/parser_test.go | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/reader/rss/parser_test.go b/reader/rss/parser_test.go index e604927..af98d7e 100644 --- a/reader/rss/parser_test.go +++ b/reader/rss/parser_test.go @@ -652,3 +652,122 @@ func TestParseWithInvalidCharacterEntity(t *testing.T) { t.Errorf(`Incorrect url, got: %q`, feed.SiteURL) } } + +func TestParseEntryWithMediaGroup(t *testing.T) { + data := `<?xml version="1.0" encoding="utf-8"?> + <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/"> + <channel> + <title>My Example Feed</title> + <link>http://example.org</link> + <item> + <title>Example Item</title> + <link>http://www.example.org/entries/1</link> + <enclosure type="application/x-bittorrent" url="https://example.org/file3.torrent" length="670053113"> + </enclosure> + <media:group> + <media:content type="application/x-bittorrent" url="https://example.org/file1.torrent"></media:content> + <media:content type="application/x-bittorrent" url="https://example.org/file2.torrent" isDefault="true"></media:content> + <media:content type="application/x-bittorrent" url="https://example.org/file3.torrent"></media:content> + <media:content type="application/x-bittorrent" url="https://example.org/file4.torrent"></media:content> + <media:content type="application/x-bittorrent" url="https://example.org/file5.torrent" fileSize="42"></media:content> + <media:rating>nonadult</media:rating> + </media:group> + <media:thumbnail url="https://example.org/image.jpg" height="122" width="223"></media:thumbnail> + </item> + </channel> + </rss>` + + 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 len(feed.Entries[0].Enclosures) != 6 { + t.Fatalf("Incorrect number of enclosures, got: %d", len(feed.Entries[0].Enclosures)) + } + + expectedResults := []struct { + url string + mimeType string + size int64 + }{ + {"https://example.org/image.jpg", "image/*", 0}, + {"https://example.org/file3.torrent", "application/x-bittorrent", 670053113}, + {"https://example.org/file1.torrent", "application/x-bittorrent", 0}, + {"https://example.org/file2.torrent", "application/x-bittorrent", 0}, + {"https://example.org/file4.torrent", "application/x-bittorrent", 0}, + {"https://example.org/file5.torrent", "application/x-bittorrent", 42}, + } + + 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 TestParseEntryWithMediaContent(t *testing.T) { + data := `<?xml version="1.0" encoding="utf-8"?> + <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/"> + <channel> + <title>My Example Feed</title> + <link>http://example.org</link> + <item> + <title>Example Item</title> + <link>http://www.example.org/entries/1</link> + <media:thumbnail url="https://example.org/thumbnail.jpg" /> + <media:content url="https://example.org/media1.jpg" medium="image"> + <media:title type="html">Some Title for Media 1</media:title> + </media:content> + <media:content url="https://example.org/media2.jpg" medium="image" /> + </item> + </channel> + </rss>` + + 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 len(feed.Entries[0].Enclosures) != 3 { + 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://example.org/media1.jpg", "image/*", 0}, + {"https://example.org/media2.jpg", "image/*", 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) + } + } +} |