package opml import ( "os" "reflect" "strings" "testing" ) func TestParse(t *testing.T) { have, _ := Parse(strings.NewReader(` Subscriptions `)) want := Folder{ Title: "", Feeds: []Feed{ { Title: "title1", FeedUrl: "https://baz.com/feed.xml", SiteUrl: "https://baz.com/", }, }, Folders: []Folder{ { Title: "sub", Feeds: []Feed{ { Title: "subtitle1", FeedUrl: "https://foo.com/feed.xml", SiteUrl: "https://foo.com/", }, { Title: "&>", FeedUrl: "https://bar.com/feed.xml", SiteUrl: "https://bar.com/", }, }, }, }, } if !reflect.DeepEqual(want, have) { t.Logf("want: %#v", want) t.Logf("have: %#v", have) t.Fatal("invalid opml") } } func TestParseFallback(t *testing.T) { // as reported in https://github.com/nkanaev/yarr/pull/56 // the feed below comes without `outline[text]` & `outline[type=rss]` attributes have, _ := Parse(strings.NewReader(` Newsflow `)) want := Folder{ Folders: []Folder{{ Title: "foldertitle", Feeds: []Feed{ {Title: "feedtext", FeedUrl: "https://example.com/feed.xml", SiteUrl: "https://example.com"}, }, }}, } if !reflect.DeepEqual(want, have) { t.Logf("want: %#v", want) t.Logf("have: %#v", have) t.Fatal("invalid opml") } } func TestParseWithEncoding(t *testing.T) { file, err := os.Open("sample_win1251.xml") if err != nil { t.Fatal(err) } have, err := Parse(file) if err != nil { t.Fatal(err) } want := Folder{ Title: "", Feeds: []Feed{ { Title: "пример1", FeedUrl: "https://baz.com/feed.xml", SiteUrl: "https://baz.com/", }, }, Folders: []Folder{ { Title: "папка", Feeds: []Feed{ { Title: "пример2", FeedUrl: "https://foo.com/feed.xml", SiteUrl: "https://foo.com/", }, }, }, }, } if !reflect.DeepEqual(want, have) { t.Logf("want: %#v", want) t.Logf("have: %#v", have) t.Fatal("invalid opml") } }