package test import ( "fmt" "io" "os" "testing" "git.brandonirizarry.xyz/links/internal/findlinks" "github.com/google/go-cmp/cmp" ) type parserFn func(io.Reader) ([]findlinks.Link, error) func findLinksFile(filename string, parser parserFn) ([]findlinks.Link, error) { f, err := os.Open(filename) if err != nil { panic("can't open test file") } defer f.Close() return parser(f) } func TestFindlinks(t *testing.T) { type test struct { filename string links []findlinks.Link } tests := []test{ { "html/ex1.html", []findlinks.Link{ { Href: "/other-page", Text: "A link to another page", }, }, }, { "html/ex2.html", []findlinks.Link{ { Href: "https://www.twitter.com/joncalhoun", Text: "Check me out on twitter", }, { Href: "https://github.com/gophercises", Text: "Gophercises is on Github!", }, }, }, { "html/ex4.html", []findlinks.Link{ { Href: "/dog-cat", Text: "dog cat", }, }, }, } for _, test := range tests { parsers := []parserFn{findlinks.Parse} for i, p := range parsers { testName := fmt.Sprintf("Parser %d %s", i+1, test.filename) t.Run(testName, func(t *testing.T) { links, err := findLinksFile(test.filename, p) if err != nil { t.Error(err) } if !cmp.Equal(links, test.links) { t.Errorf("got %v, want %v", links, test.links) } }) } } }