package main import ( "context" "net/http" "net/http/httptest" "testing" ) var feedSourceTests = []struct { filename string title string itemText string }{ { filename: "/xkcd.xml", title: "xkcd.com", itemText: "Occam", }, } func TestFeedSource(t *testing.T) { server := httptest.NewServer(http.FileServer(http.Dir("testdata"))) defer server.Close() ctx, cancel := context.WithCancel(context.Background()) defer cancel() for _, tt := range feedSourceTests { src := NewFeed(server.URL + tt.filename) src.update(ctx) if err := src.Error; err != nil { t.Errorf("%v: Error = %v, expected nil", tt.filename, err) continue } if src.Title != tt.title { t.Errorf("%v: Title = %v expected %v", tt.filename, src.Title, tt.title) } items := src.GetItems() if len(items) == 0 { t.Errorf("%v: GetItems() = %v expected len > 0", tt.filename, items) } else { x := items[0] if x.Text != tt.itemText { t.Errorf("%v: item 0 Text = %q expected %q", tt.filename, x.Text, tt.itemText) } } } }