diff --git a/src/parser/atom.go b/src/parser/atom.go index b943e62..5853ddc 100644 --- a/src/parser/atom.go +++ b/src/parser/atom.go @@ -23,7 +23,7 @@ type atomEntry struct { Published string `xml:"published"` Updated string `xml:"updated"` Links atomLinks `xml:"link"` - Content atomText `xml:"content"` + Content atomText `xml:"http://www.w3.org/2005/Atom content"` media } diff --git a/src/parser/atom_test.go b/src/parser/atom_test.go index d3aa05f..de94918 100644 --- a/src/parser/atom_test.go +++ b/src/parser/atom_test.go @@ -56,3 +56,24 @@ func TestAtom(t *testing.T) { t.Fatal("invalid atom") } } + +func TestAtomClashingNamespaces(t *testing.T) { + have, err := Parse(strings.NewReader(` + + + + atom content + + + + `)) + want := &Feed{Items: []Item{{Content: "atom content"}}} + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(want, have) { + t.Logf("want: %#v", want) + t.Logf("have: %#v", have) + t.FailNow() + } +} diff --git a/src/parser/feed.go b/src/parser/feed.go index ff7eb56..bbed1d4 100644 --- a/src/parser/feed.go +++ b/src/parser/feed.go @@ -46,11 +46,11 @@ func Parse(r io.Reader) (*Feed, error) { lookup := make([]byte, 1024) n, err := io.ReadFull(r, lookup) switch { - case err != nil: - return nil, err case err == io.ErrUnexpectedEOF: lookup = lookup[:n] r = bytes.NewReader(lookup) + case err != nil: + return nil, err default: r = io.MultiReader(bytes.NewReader(lookup), r) } diff --git a/src/parser/feed_test.go b/src/parser/feed_test.go index df82f60..5b4f9d8 100644 --- a/src/parser/feed_test.go +++ b/src/parser/feed_test.go @@ -77,3 +77,18 @@ func TestParse(t *testing.T) { t.Fatal("invalid content") } } + +func TestParseShortFeed(t *testing.T) { + have, err := Parse(strings.NewReader( + ``, + )) + want := &Feed{} + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(want, have) { + t.Logf("want: %#v", want) + t.Logf("have: %#v", have) + t.FailNow() + } +} diff --git a/src/parser/media.go b/src/parser/media.go index e6c5a71..b8e9712 100644 --- a/src/parser/media.go +++ b/src/parser/media.go @@ -12,13 +12,6 @@ type mediaGroup struct { MediaDescriptions []mediaDescription `xml:"http://search.yahoo.com/mrss/ description"` } -type mediaContent struct { - URL string `xml:"url,attr"` - Type string `xml:"type,attr"` - FileSize string `xml:"fileSize,attr"` - Medium string `xml:"medium,attr"` -} - type mediaThumbnail struct { URL string `xml:"url,attr"` }