// assertBookmarks tests the given bookmark jar. func assertBookmarks(b BookmarksJar) { err := b.Save("test1", "http://localhost") ut.AssertNil(err) err = b.Save("test2", "http://127.0.0.1") ut.AssertNil(err) err = b.Save("test1", "http://localhost") ut.AssertNotNil(err) url, err := b.Read("test1") ut.AssertNil(err) ut.AssertEquals("http://localhost", url) url, err = b.Read("test2") ut.AssertEquals("http://127.0.0.1", url) url, err = b.Read("test3") ut.AssertNotNil(err) r := b.Remove("test2") ut.AssertTrue(r) r = b.Remove("test3") ut.AssertFalse(r) r = b.Has("test1") ut.AssertTrue(r) r = b.Has("test4") ut.AssertFalse(r) }
func TestImages(t *testing.T) { ut.Run(t) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { fmt.Fprint(w, htmlPage1) })) defer ts.Close() bow := NewBrowser() err := bow.Open(ts.URL) ut.AssertNil(err) images := bow.Images() ut.AssertEquals(2, len(images)) ut.AssertEquals("imgur-image", images[0].ID) ut.AssertEquals("http://i.imgur.com/HW4bJtY.jpg", images[0].URL.String()) ut.AssertEquals("", images[0].Alt) ut.AssertEquals("It's a...", images[0].Title) ut.AssertEquals("", images[1].ID) ut.AssertEquals(ts.URL+"/Cxagv.jpg", images[1].URL.String()) ut.AssertEquals("A picture", images[1].Alt) ut.AssertEquals("", images[1].Title) buff := &bytes.Buffer{} l, err := images[0].Download(buff) ut.AssertNil(err) ut.AssertGreaterThan(0, buff.Len()) ut.AssertEquals(int(l), buff.Len()) }
func TestScripts(t *testing.T) { ut.Run(t) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { fmt.Fprint(w, htmlPage1) })) defer ts.Close() bow := NewBrowser() err := bow.Open(ts.URL) ut.AssertNil(err) scripts := bow.Scripts() ut.AssertEquals(2, len(scripts)) ut.AssertEquals("http://godoc.org/-/site.js", scripts[0].URL.String()) ut.AssertEquals("text/javascript", scripts[0].Type) ut.AssertEquals(ts.URL+"/jquery.min.js", scripts[1].URL.String()) ut.AssertEquals("text/javascript", scripts[1].Type) buff := &bytes.Buffer{} l, err := scripts[0].Download(buff) ut.AssertNil(err) ut.AssertGreaterThan(0, buff.Len()) ut.AssertEquals(int(l), buff.Len()) }
func TestGet(t *testing.T) { ut.Run(t) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { if req.URL.Path == "/page1" { fmt.Fprint(w, htmlPage1) } else if req.URL.Path == "/page2" { fmt.Fprint(w, htmlPage2) } })) defer ts.Close() bow := NewBrowser() err := bow.Open(ts.URL + "/page1") ut.AssertNil(err) ut.AssertEquals("Surf Page 1", bow.Title()) ut.AssertContains("<p>Hello, Surf!</p>", bow.Body()) err = bow.Open(ts.URL + "/page2") ut.AssertNil(err) ut.AssertEquals("Surf Page 2", bow.Title()) ok := bow.Back() ut.AssertTrue(ok) ut.AssertEquals("Surf Page 1", bow.Title()) ok = bow.Back() ut.AssertFalse(ok) ut.AssertEquals("Surf Page 1", bow.Title()) }
func TestBrowserForm(t *testing.T) { ut.Run(t) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { fmt.Fprint(w, htmlForm) } else { r.ParseForm() fmt.Fprint(w, r.Form.Encode()) } })) defer ts.Close() bow := &Browser{} bow.headers = make(http.Header, 10) bow.history = jar.NewMemoryHistory() err := bow.Open(ts.URL) ut.AssertNil(err) f, err := bow.Form("[name='default']") ut.AssertNil(err) f.Input("age", "55") f.Input("gender", "male") err = f.Click("submit2") ut.AssertNil(err) ut.AssertContains("age=55", bow.Body()) ut.AssertContains("gender=male", bow.Body()) ut.AssertContains("submit2=submitted2", bow.Body()) }
func TestFileBookmarks(t *testing.T) { ut.Run(t) b, err := NewFileBookmarks("./bookmarks.json") ut.AssertNil(err) defer func() { err = os.Remove("./bookmarks.json") }() assertBookmarks(b) }
func TestClick(t *testing.T) { ut.Run(t) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/" { fmt.Fprint(w, htmlPage1) } else if r.URL.Path == "/page2" { fmt.Fprint(w, htmlPage1) } })) defer ts.Close() bow := NewBrowser() err := bow.Open(ts.URL) ut.AssertNil(err) err = bow.Click("a:contains('click')") ut.AssertNil(err) ut.AssertContains("<p>Hello, Surf!</p>", bow.Body()) }
func TestDownload(t *testing.T) { ut.Run(t) out := &bytes.Buffer{} u, _ := url.Parse("http://i.imgur.com/HW4bJtY.jpg") asset := NewImageAsset(u, "", "", "") l, err := DownloadAsset(asset, out) ut.AssertNil(err) ut.AssertGreaterThan(0, int(l)) ut.AssertEquals(int(l), out.Len()) }
func TestUserAgent(t *testing.T) { ut.Run(t) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { fmt.Fprint(w, req.UserAgent()) })) defer ts.Close() bow := NewBrowser() bow.SetUserAgent("Testing/1.0") err := bow.Open(ts.URL) ut.AssertNil(err) ut.AssertEquals("Testing/1.0", bow.Body()) }
// TestHeadersSet // See: https://github.com/headzoo/surf/pull/19 func TestHeadersBug19(t *testing.T) { ut.Run(t) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { fmt.Fprint(w, req.Header.Get("X-Testing")) })) defer ts.Close() bow := NewBrowser() bow.AddRequestHeader("X-Testing", "Testing-1") bow.AddRequestHeader("X-Testing", "Testing-2") err := bow.Open(ts.URL) ut.AssertNil(err) ut.AssertContains("Testing-2", bow.Body()) }
func TestHead(t *testing.T) { ut.Run(t) var r *http.Request ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { r = req })) defer ts.Close() bow := NewBrowser() err := bow.Head(ts.URL + "/page1") ut.AssertNil(err) ut.AssertNotNil(r) }
func TestDownload(t *testing.T) { ut.Run(t) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { fmt.Fprint(w, req.UserAgent()) })) defer ts.Close() bow := NewBrowser() bow.Open(ts.URL) buff := &bytes.Buffer{} l, err := bow.Download(buff) ut.AssertNil(err) ut.AssertGreaterThan(0, int(l)) ut.AssertEquals(int(l), buff.Len()) }
func TestLinks(t *testing.T) { ut.Run(t) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { fmt.Fprint(w, htmlPage1) })) defer ts.Close() bow := NewBrowser() err := bow.Open(ts.URL) ut.AssertNil(err) links := bow.Links() ut.AssertEquals(2, len(links)) ut.AssertEquals("", links[0].ID) ut.AssertEquals(ts.URL+"/page2", links[0].URL.String()) ut.AssertEquals("click", links[0].Text) ut.AssertEquals("page3", links[1].ID) ut.AssertEquals(ts.URL+"/page3", links[1].URL.String()) ut.AssertEquals("no clicking", links[1].Text) }
func TestBookmarks(t *testing.T) { ut.Run(t) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { fmt.Fprint(w, htmlPage1) })) defer ts.Close() bookmarks := jar.NewMemoryBookmarks() bow := NewBrowser() bow.SetBookmarksJar(bookmarks) bookmarks.Save("test1", ts.URL) bow.OpenBookmark("test1") ut.AssertEquals("Surf Page 1", bow.Title()) ut.AssertContains("<p>Hello, Surf!</p>", bow.Body()) err := bow.Bookmark("test2") ut.AssertNil(err) bow.OpenBookmark("test2") ut.AssertEquals("Surf Page 1", bow.Title()) }