rename docrawl -> doCrawl; add some missing comments
This commit is contained in:
1 parent
48be4bc77d
commit
6665729e3f
8 files changed
+15
-4
No files matched your search
@@ -8,7 +8,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// docrawl begins crawling the site at "homeurl"
|
// docrawl begins crawling the site at "homeurl"
|
||||||
func docrawl(homeurl string) itemSlice {
|
func doCrawl(homeurl string) itemSlice {
|
||||||
// set of what we have already crawled
|
// set of what we have already crawled
|
||||||
crawled := make(itemMap)
|
crawled := make(itemMap)
|
||||||
|
|
||||||
@@ -126,7 +126,7 @@ func crawlItem(item *httpItem, rchan chan<- *httpItem) {
|
|||||||
func main() {
|
func main() {
|
||||||
// crawl each URL on the command line
|
// crawl each URL on the command line
|
||||||
for _, u := range os.Args[1:] {
|
for _, u := range os.Args[1:] {
|
||||||
pages := docrawl(u)
|
pages := doCrawl(u)
|
||||||
l := sitemapToLocations(pages)
|
l := sitemapToLocations(pages)
|
||||||
j, _ := locationsToJSON(l)
|
j, _ := locationsToJSON(l)
|
||||||
fmt.Println(j)
|
fmt.Println(j)
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ func TestSimpleFetch(t *testing.T) {
|
|||||||
|
|
||||||
// TestSimpleMap figures out the site map for the site in baseURL
|
// TestSimpleMap figures out the site map for the site in baseURL
|
||||||
func TestSimpleMap(t *testing.T) {
|
func TestSimpleMap(t *testing.T) {
|
||||||
pages := docrawl(baseURL)
|
pages := doCrawl(baseURL)
|
||||||
|
|
||||||
// because our crawl is non-deterministic, we have to do a complete
|
// because our crawl is non-deterministic, we have to do a complete
|
||||||
// cycle through every page, counting stuff, finding specific pages
|
// cycle through every page, counting stuff, finding specific pages
|
||||||
@@ -185,7 +185,7 @@ func TestHeaderFetching(t *testing.T) {
|
|||||||
|
|
||||||
// TestJsonOutput gets a sitemap and then converts it to json
|
// TestJsonOutput gets a sitemap and then converts it to json
|
||||||
func TestJsonOutput(t *testing.T) {
|
func TestJsonOutput(t *testing.T) {
|
||||||
pages := docrawl(baseURL)
|
pages := doCrawl(baseURL)
|
||||||
l := sitemapToLocations(pages)
|
l := sitemapToLocations(pages)
|
||||||
if len(l) != 2 {
|
if len(l) != 2 {
|
||||||
t.Error("sitemapToLocations has the wrong number of locations")
|
t.Error("sitemapToLocations has the wrong number of locations")
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// custom errors
|
||||||
var (
|
var (
|
||||||
errContentTypeNotFound = errors.New("no Content-Type header found")
|
errContentTypeNotFound = errors.New("no Content-Type header found")
|
||||||
errFetchError = errors.New("couldn't fetch item")
|
errFetchError = errors.New("couldn't fetch item")
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ type itemMap map[string]*httpItem
|
|||||||
// itemType is an enum so we know how to classify each item
|
// itemType is an enum so we know how to classify each item
|
||||||
type itemType int
|
type itemType int
|
||||||
|
|
||||||
|
// enums for itemType
|
||||||
const (
|
const (
|
||||||
tUnknown itemType = iota
|
tUnknown itemType = iota
|
||||||
tHTMLPage
|
tHTMLPage
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ func sitemapToLocations(pages itemSlice) []*Location {
|
|||||||
return locations
|
return locations
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// locationsToJSON takes a *Location slice and marshals it into a JSON string
|
||||||
func locationsToJSON(locations []*Location) (string, error) {
|
func locationsToJSON(locations []*Location) (string, error) {
|
||||||
b, err := json.Marshal(locations)
|
b, err := json.Marshal(locations)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// custom errors
|
||||||
var (
|
var (
|
||||||
errInvalidURL = errors.New("this URL can't be parsed successfully")
|
errInvalidURL = errors.New("this URL can't be parsed successfully")
|
||||||
)
|
)
|
||||||
@@ -50,6 +51,9 @@ func resolveURL(referringURL string, currentURL string) (*url.URL, error) {
|
|||||||
return uResolved, checkURL(uResolved)
|
return uResolved, checkURL(uResolved)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// stripAnchorFromURL returns a version of the URL with out the "Fragment" part,
|
||||||
|
// which is anything after the '#' character, so:
|
||||||
|
// http://a.com/blah.html#anchor becomes http://a.com/blah.html
|
||||||
func stripAnchorFromURL(u *url.URL) string {
|
func stripAnchorFromURL(u *url.URL) string {
|
||||||
// copy the url locally
|
// copy the url locally
|
||||||
ucopy := *u
|
ucopy := *u
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ func TestBadResolve(t* testing.T) {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// TestURLStripAnchor tests the stripAnchorFromURL() function
|
||||||
func TestURLStripAnchor(t *testing.T) {
|
func TestURLStripAnchor(t *testing.T) {
|
||||||
u, err := url.Parse("http://swaits:pass@somehost.com:8765/blah/blah.html?x=y#foo")
|
u, err := url.Parse("http://swaits:pass@somehost.com:8765/blah/blah.html?x=y#foo")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TestUniqStrings passes a slice of strings to uniqStrings() to see if it removes
|
||||||
|
// all duplicates
|
||||||
func TestUniqStrings(t *testing.T) {
|
func TestUniqStrings(t *testing.T) {
|
||||||
strs := []string{"a", "a", "b", "a", "b", "c", "d", "a", "b", "e", "d"}
|
strs := []string{"a", "a", "b", "a", "b", "c", "d", "a", "b", "e", "d"}
|
||||||
uniq := uniqStrings(strs)
|
uniq := uniqStrings(strs)
|
||||||
@@ -17,6 +19,7 @@ func TestUniqStrings(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestUniqStringsNilParm passes a nil slice to uniqStrings to be sure it returns nil
|
||||||
func TestUniqStringsNilParm(t *testing.T) {
|
func TestUniqStringsNilParm(t *testing.T) {
|
||||||
uniq := uniqStrings(nil)
|
uniq := uniqStrings(nil)
|
||||||
if uniq != nil {
|
if uniq != nil {
|
||||||
|
|||||||
Reference in new issue
Block a user