mirror of https://github.com/gorilla/feeds
Mirror of https://github.com/gorilla/feeds
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
405 lines
12 KiB
405 lines
12 KiB
package feeds |
|
|
|
import ( |
|
"encoding/xml" |
|
"io" |
|
"os" |
|
"reflect" |
|
"testing" |
|
|
|
"github.com/kr/pretty" |
|
) |
|
|
|
var testRssFeedXML = RssFeedXml{ |
|
XMLName: xml.Name{Space: "", Local: "rss"}, |
|
Version: "2.0", |
|
ContentNamespace: "", |
|
Channel: &RssFeed{ |
|
XMLName: xml.Name{Space: "", Local: "channel"}, |
|
Title: "Lorem ipsum feed for an interval of 1 minutes", |
|
Link: "http://example.com/", |
|
Description: "This is a constantly updating lorem ipsum feed", |
|
Language: "", |
|
Copyright: "Michael Bertolacci, licensed under a Creative Commons Attribution 3.0 Unported License.", |
|
ManagingEditor: "", |
|
WebMaster: "", |
|
PubDate: "Tue, 30 Oct 2018 23:22:00 GMT", |
|
LastBuildDate: "Tue, 30 Oct 2018 23:22:37 GMT", |
|
Category: "", |
|
Generator: "RSS for Node", |
|
Docs: "", |
|
Cloud: "", |
|
Ttl: 60, |
|
Rating: "", |
|
SkipHours: "", |
|
SkipDays: "", |
|
Image: (*RssImage)(nil), |
|
TextInput: (*RssTextInput)(nil), |
|
Items: []*RssItem{ |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "item"}, |
|
Title: "Lorem ipsum 2018-10-30T23:22:00+00:00", |
|
Link: "http://example.com/test/1540941720", |
|
Description: "Exercitation ut Lorem sint proident.", |
|
Content: (*RssContent)(nil), |
|
Author: "", |
|
Category: "", |
|
Comments: "", |
|
Enclosure: (*RssEnclosure)(nil), |
|
Guid: "http://example.com/test/1540941720", |
|
PubDate: "Tue, 30 Oct 2018 23:22:00 GMT", |
|
Source: "", |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "item"}, |
|
Title: "Lorem ipsum 2018-10-30T23:21:00+00:00", |
|
Link: "http://example.com/test/1540941660", |
|
Description: "Ea est do quis fugiat exercitation.", |
|
Content: (*RssContent)(nil), |
|
Author: "", |
|
Category: "", |
|
Comments: "", |
|
Enclosure: (*RssEnclosure)(nil), |
|
Guid: "http://example.com/test/1540941660", |
|
PubDate: "Tue, 30 Oct 2018 23:21:00 GMT", |
|
Source: "", |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "item"}, |
|
Title: "Lorem ipsum 2018-10-30T23:20:00+00:00", |
|
Link: "http://example.com/test/1540941600", |
|
Description: "Ipsum velit cillum ad laborum sit nulla exercitation consequat sint veniam culpa veniam voluptate incididunt.", |
|
Content: (*RssContent)(nil), |
|
Author: "", |
|
Category: "", |
|
Comments: "", |
|
Enclosure: (*RssEnclosure)(nil), |
|
Guid: "http://example.com/test/1540941600", |
|
PubDate: "Tue, 30 Oct 2018 23:20:00 GMT", |
|
Source: "", |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "item"}, |
|
Title: "Lorem ipsum 2018-10-30T23:19:00+00:00", |
|
Link: "http://example.com/test/1540941540", |
|
Description: "Ullamco pariatur aliqua consequat ea veniam id qui incididunt laborum.", |
|
Content: (*RssContent)(nil), |
|
Author: "", |
|
Category: "", |
|
Comments: "", |
|
Enclosure: (*RssEnclosure)(nil), |
|
Guid: "http://example.com/test/1540941540", |
|
PubDate: "Tue, 30 Oct 2018 23:19:00 GMT", |
|
Source: "", |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "item"}, |
|
Title: "Lorem ipsum 2018-10-30T23:18:00+00:00", |
|
Link: "http://example.com/test/1540941480", |
|
Description: "Velit proident aliquip aliquip anim mollit voluptate laboris voluptate et occaecat occaecat laboris ea nulla.", |
|
Content: (*RssContent)(nil), |
|
Author: "", |
|
Category: "", |
|
Comments: "", |
|
Enclosure: (*RssEnclosure)(nil), |
|
Guid: "http://example.com/test/1540941480", |
|
PubDate: "Tue, 30 Oct 2018 23:18:00 GMT", |
|
Source: "", |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "item"}, |
|
Title: "Lorem ipsum 2018-10-30T23:17:00+00:00", |
|
Link: "http://example.com/test/1540941420", |
|
Description: "Do in quis mollit consequat id in minim laborum sint exercitation laborum elit officia.", |
|
Content: (*RssContent)(nil), |
|
Author: "", |
|
Category: "", |
|
Comments: "", |
|
Enclosure: (*RssEnclosure)(nil), |
|
Guid: "http://example.com/test/1540941420", |
|
PubDate: "Tue, 30 Oct 2018 23:17:00 GMT", |
|
Source: "", |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "item"}, |
|
Title: "Lorem ipsum 2018-10-30T23:16:00+00:00", |
|
Link: "http://example.com/test/1540941360", |
|
Description: "Irure id sint ullamco Lorem magna consectetur officia adipisicing duis incididunt.", |
|
Content: (*RssContent)(nil), |
|
Author: "", |
|
Category: "", |
|
Comments: "", |
|
Enclosure: (*RssEnclosure)(nil), |
|
Guid: "http://example.com/test/1540941360", |
|
PubDate: "Tue, 30 Oct 2018 23:16:00 GMT", |
|
Source: "", |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "item"}, |
|
Title: "Lorem ipsum 2018-10-30T23:15:00+00:00", |
|
Link: "http://example.com/test/1540941300", |
|
Description: "Sunt anim excepteur esse nisi commodo culpa laborum exercitation ad anim ex elit.", |
|
Content: (*RssContent)(nil), |
|
Author: "", |
|
Category: "", |
|
Comments: "", |
|
Enclosure: (*RssEnclosure)(nil), |
|
Guid: "http://example.com/test/1540941300", |
|
PubDate: "Tue, 30 Oct 2018 23:15:00 GMT", |
|
Source: "", |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "item"}, |
|
Title: "Lorem ipsum 2018-10-30T23:14:00+00:00", |
|
Link: "http://example.com/test/1540941240", |
|
Description: "Excepteur aliquip fugiat ex labore nisi.", |
|
Content: (*RssContent)(nil), |
|
Author: "", |
|
Category: "", |
|
Comments: "", |
|
Enclosure: (*RssEnclosure)(nil), |
|
Guid: "http://example.com/test/1540941240", |
|
PubDate: "Tue, 30 Oct 2018 23:14:00 GMT", |
|
Source: "", |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "item"}, |
|
Title: "Lorem ipsum 2018-10-30T23:13:00+00:00", |
|
Link: "http://example.com/test/1540941180", |
|
Description: "Id proident adipisicing proident pariatur aute pariatur pariatur dolor dolor in voluptate dolor.", |
|
Content: (*RssContent)(nil), |
|
Author: "", |
|
Category: "", |
|
Comments: "", |
|
Enclosure: (*RssEnclosure)(nil), |
|
Guid: "http://example.com/test/1540941180", |
|
PubDate: "Tue, 30 Oct 2018 23:13:00 GMT", |
|
Source: "", |
|
}, |
|
}, |
|
}, |
|
} |
|
|
|
var testAtomFeedXML = AtomFeed{ |
|
XMLName: xml.Name{Space: "", Local: "feed"}, |
|
Xmlns: "", |
|
Title: "Lorem ipsum feed for an interval of 1 minutes", |
|
Id: "", |
|
Updated: "", |
|
Category: "", |
|
Icon: "", |
|
Logo: "", |
|
Rights: "", |
|
Subtitle: "", |
|
Link: &AtomLink{ |
|
XMLName: xml.Name{Space: "", Local: "link"}, |
|
Href: "", |
|
Rel: "", |
|
Type: "", |
|
Length: "", |
|
}, |
|
Author: &AtomAuthor{ |
|
XMLName: xml.Name{Space: "", Local: "author"}, |
|
AtomPerson: AtomPerson{}, |
|
}, |
|
Contributor: (*AtomContributor)(nil), |
|
Entries: []*AtomEntry{ |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "entry"}, |
|
Xmlns: "", |
|
Title: "Lorem ipsum 2018-10-30T23:22:00+00:00", |
|
Updated: "", |
|
Id: "", |
|
Category: "", |
|
Content: (*AtomContent)(nil), |
|
Rights: "", |
|
Source: "", |
|
Published: "", |
|
Contributor: (*AtomContributor)(nil), |
|
Links: nil, |
|
Summary: (*AtomSummary)(nil), |
|
Author: (*AtomAuthor)(nil), |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "entry"}, |
|
Xmlns: "", |
|
Title: "Lorem ipsum 2018-10-30T23:21:00+00:00", |
|
Updated: "", |
|
Id: "", |
|
Category: "", |
|
Content: (*AtomContent)(nil), |
|
Rights: "", |
|
Source: "", |
|
Published: "", |
|
Contributor: (*AtomContributor)(nil), |
|
Links: nil, |
|
Summary: (*AtomSummary)(nil), |
|
Author: (*AtomAuthor)(nil), |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "entry"}, |
|
Xmlns: "", |
|
Title: "Lorem ipsum 2018-10-30T23:20:00+00:00", |
|
Updated: "", |
|
Id: "", |
|
Category: "", |
|
Content: (*AtomContent)(nil), |
|
Rights: "", |
|
Source: "", |
|
Published: "", |
|
Contributor: (*AtomContributor)(nil), |
|
Links: nil, |
|
Summary: (*AtomSummary)(nil), |
|
Author: (*AtomAuthor)(nil), |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "entry"}, |
|
Xmlns: "", |
|
Title: "Lorem ipsum 2018-10-30T23:19:00+00:00", |
|
Updated: "", |
|
Id: "", |
|
Category: "", |
|
Content: (*AtomContent)(nil), |
|
Rights: "", |
|
Source: "", |
|
Published: "", |
|
Contributor: (*AtomContributor)(nil), |
|
Links: nil, |
|
Summary: (*AtomSummary)(nil), |
|
Author: (*AtomAuthor)(nil), |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "entry"}, |
|
Xmlns: "", |
|
Title: "Lorem ipsum 2018-10-30T23:18:00+00:00", |
|
Updated: "", |
|
Id: "", |
|
Category: "", |
|
Content: (*AtomContent)(nil), |
|
Rights: "", |
|
Source: "", |
|
Published: "", |
|
Contributor: (*AtomContributor)(nil), |
|
Links: nil, |
|
Summary: (*AtomSummary)(nil), |
|
Author: (*AtomAuthor)(nil), |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "entry"}, |
|
Xmlns: "", |
|
Title: "Lorem ipsum 2018-10-30T23:17:00+00:00", |
|
Updated: "", |
|
Id: "", |
|
Category: "", |
|
Content: (*AtomContent)(nil), |
|
Rights: "", |
|
Source: "", |
|
Published: "", |
|
Contributor: (*AtomContributor)(nil), |
|
Links: nil, |
|
Summary: (*AtomSummary)(nil), |
|
Author: (*AtomAuthor)(nil), |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "entry"}, |
|
Xmlns: "", |
|
Title: "Lorem ipsum 2018-10-30T23:16:00+00:00", |
|
Updated: "", |
|
Id: "", |
|
Category: "", |
|
Content: (*AtomContent)(nil), |
|
Rights: "", |
|
Source: "", |
|
Published: "", |
|
Contributor: (*AtomContributor)(nil), |
|
Links: nil, |
|
Summary: (*AtomSummary)(nil), |
|
Author: (*AtomAuthor)(nil), |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "entry"}, |
|
Xmlns: "", |
|
Title: "Lorem ipsum 2018-10-30T23:15:00+00:00", |
|
Updated: "", |
|
Id: "", |
|
Category: "", |
|
Content: (*AtomContent)(nil), |
|
Rights: "", |
|
Source: "", |
|
Published: "", |
|
Contributor: (*AtomContributor)(nil), |
|
Links: nil, |
|
Summary: (*AtomSummary)(nil), |
|
Author: (*AtomAuthor)(nil), |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "entry"}, |
|
Xmlns: "", |
|
Title: "Lorem ipsum 2018-10-30T23:14:00+00:00", |
|
Updated: "", |
|
Id: "", |
|
Category: "", |
|
Content: (*AtomContent)(nil), |
|
Rights: "", |
|
Source: "", |
|
Published: "", |
|
Contributor: (*AtomContributor)(nil), |
|
Links: nil, |
|
Summary: (*AtomSummary)(nil), |
|
Author: (*AtomAuthor)(nil), |
|
}, |
|
{ |
|
XMLName: xml.Name{Space: "", Local: "entry"}, |
|
Xmlns: "", |
|
Title: "Lorem ipsum 2018-10-30T23:13:00+00:00", |
|
Updated: "", |
|
Id: "", |
|
Category: "", |
|
Content: (*AtomContent)(nil), |
|
Rights: "", |
|
Source: "", |
|
Published: "", |
|
Contributor: (*AtomContributor)(nil), |
|
Links: nil, |
|
Summary: (*AtomSummary)(nil), |
|
Author: (*AtomAuthor)(nil), |
|
}, |
|
}, |
|
} |
|
|
|
func TestRssUnmarshal(t *testing.T) { |
|
var xmlFeed RssFeedXml |
|
xmlFile, err := os.Open("test.rss") |
|
if err != nil { |
|
panic("AHH file bad") |
|
} |
|
bytes, _ := io.ReadAll(xmlFile) |
|
if err := xml.Unmarshal(bytes, &xmlFeed); err != nil { |
|
panic(err) |
|
} |
|
|
|
if !reflect.DeepEqual(testRssFeedXML, xmlFeed) { |
|
diffs := pretty.Diff(testRssFeedXML, xmlFeed) |
|
t.Log(pretty.Println(diffs)) |
|
t.Error("object was not unmarshalled correctly") |
|
} |
|
|
|
} |
|
|
|
func TestAtomUnmarshal(t *testing.T) { |
|
var xmlFeed AtomFeed |
|
xmlFile, err := os.Open("test.atom") |
|
if err != nil { |
|
panic("AHH file bad") |
|
} |
|
bytes, _ := io.ReadAll(xmlFile) |
|
if err := xml.Unmarshal(bytes, &xmlFeed); err != nil { |
|
panic(err) |
|
} |
|
|
|
if !reflect.DeepEqual(testAtomFeedXML, xmlFeed) { |
|
diffs := pretty.Diff(testAtomFeedXML, xmlFeed) |
|
t.Log(pretty.Println(diffs)) |
|
t.Error("object was not unmarshalled correctly") |
|
} |
|
}
|
|
|