package parser import ( "reflect" "strings" "testing" ) func TestRSSFeed(t *testing.T) { have, _ := Parse(strings.NewReader(` en ??? http://www.scripting.com/ Scripting News Title 1 http://www.scripting.com/one/ Description 1 Title 2 http://www.scripting.com/two/ Description 2 `)) want := &Feed{ Title: "Scripting News", SiteURL: "http://www.scripting.com/", Items: []Item{ { GUID: "http://www.scripting.com/one/", URL: "http://www.scripting.com/one/", Title: "Title 1", Content: "Description 1", }, { GUID: "http://www.scripting.com/two/", URL: "http://www.scripting.com/two/", Title: "Title 2", Content: "Description 2", }, }, } if !reflect.DeepEqual(want, have) { t.Logf("want: %#v", want) t.Logf("have: %#v", have) t.Fatal("invalid rss") } } func TestRSSMediaContentThumbnail(t *testing.T) { // see: https://vimeo.com/channels/staffpicks/videos/rss feed, _ := Parse(strings.NewReader(` `)) if len(feed.Items[0].MediaLinks) != 1 { t.Fatalf("Expected 1 media link, got %#v", feed.Items[0].MediaLinks) } have := feed.Items[0].MediaLinks[0] want := MediaLink{ URL: "https://i.vimeocdn.com/video/1092705247_960.jpg", Type: "image", } if !reflect.DeepEqual(want, have) { t.Logf("want: %#v", want) t.Logf("have: %#v", have) t.FailNow() } } func TestRSSWithLotsOfSpaces(t *testing.T) { // https://pxlnv.com/: https://feedpress.me/pxlnv feed, err := Parse(strings.NewReader(strings.ReplaceAll(` finally `, "", strings.Repeat(" ", 500)))) if err != nil { t.Fatal(err) } have := feed.Title want := "finally" if have != want { t.Logf("want: %#v", want) t.Logf("have: %#v", have) t.FailNow() } } func TestRSSPodcast(t *testing.T) { feed, _ := Parse(strings.NewReader(` `)) if len(feed.Items[0].MediaLinks) != 1 { t.Fatal("Invalid media links") } have := feed.Items[0].MediaLinks[0] want := MediaLink{ URL: "http://example.com/audio.ext", Type: "audio", } if !reflect.DeepEqual(want, have) { t.Logf("want: %#v", want) t.Logf("have: %#v", have) t.FailNow() } } func TestRSSOpusPodcast(t *testing.T) { feed, _ := Parse(strings.NewReader(` `)) if len(feed.Items[0].MediaLinks) != 1 { t.Fatal("Invalid media links") } have := feed.Items[0].MediaLinks[0] want := MediaLink{ URL: "http://example.com/audio.ext", Type: "audio", } if !reflect.DeepEqual(want, have) { t.Logf("want: %#v", want) t.Logf("have: %#v", have) t.FailNow() } } // found in: https://podcast.cscript.site/podcast.xml func TestRSSPodcastDuplicated(t *testing.T) { feed, _ := Parse(strings.NewReader(` ]]> `)) have := feed.Items[0].Content want := `` if want != have { t.Fatalf("content doesn't match\nwant: %#v\nhave: %#v\n", want, have) } if len(feed.Items[0].MediaLinks) != 0 { t.Fatal("item media must be excluded if present in the content") } } func TestRSSTitleHTMLTags(t *testing.T) { feed, _ := Parse(strings.NewReader(` <p>title in p</p> very <strong>strong</strong> title `)) have := []string{feed.Items[0].Title, feed.Items[1].Title} want := []string{"title in p", "very strong title"} for i := 0; i < len(want); i++ { if want[i] != have[i] { t.Errorf("title doesn't match\nwant: %#v\nhave: %#v\n", want[i], have[i]) } } } func TestRSSIsPermalink(t *testing.T) { feed, _ := Parse(strings.NewReader(` http://example.com/posts/1 `)) have := feed.Items want := []Item{ { GUID: "http://example.com/posts/1", URL: "http://example.com/posts/1", }, } for i := 0; i < len(want); i++ { if !reflect.DeepEqual(want, have) { t.Errorf("Failed to handle isPermalink\nwant: %#v\nhave: %#v\n", want[i], have[i]) } } }