From 43620cd9b61ab5b04ed9184b85e32077d2e2688f Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Mon, 22 Mar 2021 14:07:35 +0000 Subject: [PATCH] basic rdf test --- src/feed/rdf.go | 23 +++++++++++++++++++ src/feed/rdf_test.go | 54 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 src/feed/rdf_test.go diff --git a/src/feed/rdf.go b/src/feed/rdf.go index 384e66b..cdd2f0d 100644 --- a/src/feed/rdf.go +++ b/src/feed/rdf.go @@ -2,6 +2,7 @@ package feed import ( "encoding/xml" + "io" ) type rdfFeed struct { @@ -19,3 +20,25 @@ type rdfItem struct { DublinCoreDate string `xml:"http://purl.org/dc/elements/1.1/ date"` DublinCoreContent string `xml:"http://purl.org/rss/1.0/modules/content/ encoded"` } + +func ParseRDF(r io.Reader) (*Feed, error) { + f := rdfFeed{} + + decoder := xml.NewDecoder(r) + if err := decoder.Decode(&f); err != nil { + return nil, err + } + + feed := &Feed{ + Title: f.Title, + SiteURL: f.Link, + } + for _, e := range f.Items { + feed.Items = append(feed.Items, Item{ + GUID: e.Link, + URL: e.Link, + Title: e.Title, + }) + } + return feed, nil +} diff --git a/src/feed/rdf_test.go b/src/feed/rdf_test.go new file mode 100644 index 0000000..0deee0b --- /dev/null +++ b/src/feed/rdf_test.go @@ -0,0 +1,54 @@ +package feed + +import ( + "reflect" + "strings" + "testing" +) + +func TestRDFFeed(t *testing.T) { + have, _ := ParseRDF(strings.NewReader(` + + + + Mozilla Dot Org + http://www.mozilla.org + the Mozilla Organization + web site + + + + Mozilla + http://www.mozilla.org/images/moz.gif + http://www.mozilla.org + + + + New Status Updates + http://www.mozilla.org/status/ + + + + Bugzilla Reorganized + http://www.mozilla.org/bugs/ + + + + `)) + want := &Feed{ + Title: "Mozilla Dot Org", + SiteURL: "http://www.mozilla.org", + Items: []Item{ + {GUID: "http://www.mozilla.org/status/", URL: "http://www.mozilla.org/status/", Title: "New Status Updates"}, + {GUID: "http://www.mozilla.org/bugs/", URL: "http://www.mozilla.org/bugs/", Title: "Bugzilla Reorganized"}, + }, + } + + if !reflect.DeepEqual(want, have) { + t.Logf("want: %#v", want) + t.Logf("have: %#v", have) + t.Fatal("invalid rdf") + } +}