63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
package rss
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
const (
|
|
testDataDir = "testdata"
|
|
testFileSuffix = ".rss"
|
|
)
|
|
|
|
// testFetcher is an implementation of the Fetcher interface which reads the
|
|
// content from a local file.
|
|
type testFetcher struct{}
|
|
|
|
// Get takes a 'url' which is really just a name of a file in the 'testdata'
|
|
// directory and returns a fake http.Response with the file content as its body.
|
|
// It returns an error iff the file can not be opened.
|
|
func (f *testFetcher) Get(url string) (resp *http.Response, err error) {
|
|
file, err := os.Open(filepath.Join(testDataDir, url))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &http.Response{Body: file}, nil
|
|
}
|
|
|
|
// A trivial test making sure that that all feeds parse - it *does not* check
|
|
// for correctness or completeness thereof, except for dates.
|
|
func TestAllFeedsParse(t *testing.T) {
|
|
fileInfos, err := ioutil.ReadDir(testDataDir)
|
|
if err != nil {
|
|
t.Fatalf("ioutil.ReadDir(%q) err = %v, expected nil", testDataDir, err)
|
|
}
|
|
for _, fileInfo := range fileInfos {
|
|
fileName := fileInfo.Name()
|
|
if !strings.HasSuffix(fileName, testFileSuffix) {
|
|
continue
|
|
}
|
|
|
|
resp, err := ReadWithClient(fileName, new(testFetcher))
|
|
if err != nil {
|
|
t.Fatalf("ReadWithClient(%q) err = %v, expected nil", fileName, err)
|
|
}
|
|
|
|
channel, err := Regular(resp)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
|
|
for _, item := range channel.Item {
|
|
if _, err := item.PubDate.Parse(); err != nil {
|
|
t.Fatalf("Date Parser(%q) err = %v, expected nil", fileName, err)
|
|
}
|
|
}
|
|
}
|
|
}
|