Compare commits

...
11 changed files with 19 additions and 12 deletions

No files matched your search

-1
View File
@@ -5,7 +5,6 @@
* deal with anchor issue (repeatedly crawling index.html#about, index.html#contact, etc.)
* should only crawl these pages once
* but should be included in the links part
* when sorting links, "uniq" them as well
* be smart about index.html?
## Cleanup
+3 -3
View File
@@ -8,7 +8,7 @@ import (
)
// docrawl begins crawling the site at "homeurl"
func docrawl(homeurl string) itemSlice {
func doCrawl(homeurl string) itemSlice {
// set of what we have already crawled
crawled := make(itemMap)
@@ -102,7 +102,7 @@ func crawlItem(item *httpItem, rchan chan<- *httpItem) {
}
// parse links
title, links, _ := parseLinks(text) // TODO remove error from parseLinks, not needed
title, links := parseLinks(text) // TODO remove error from parseLinks, not needed
if err != nil {
item.linkType = tBroken
rchan <- item
@@ -126,7 +126,7 @@ func crawlItem(item *httpItem, rchan chan<- *httpItem) {
func main() {
// crawl each URL on the command line
for _, u := range os.Args[1:] {
pages := docrawl(u)
pages := doCrawl(u)
l := sitemapToLocations(pages)
j, _ := locationsToJSON(l)
fmt.Println(j)
+2 -2
View File
@@ -76,7 +76,7 @@ func TestSimpleFetch(t *testing.T) {
// TestSimpleMap figures out the site map for the site in baseURL
func TestSimpleMap(t *testing.T) {
pages := docrawl(baseURL)
pages := doCrawl(baseURL)
// because our crawl is non-deterministic, we have to do a complete
// 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
func TestJsonOutput(t *testing.T) {
pages := docrawl(baseURL)
pages := doCrawl(baseURL)
l := sitemapToLocations(pages)
if len(l) != 2 {
t.Error("sitemapToLocations has the wrong number of locations")
+1
View File
@@ -7,6 +7,7 @@ import (
"net/http"
)
// custom errors
var (
errContentTypeNotFound = errors.New("no Content-Type header found")
errFetchError = errors.New("couldn't fetch item")
+1
View File
@@ -13,6 +13,7 @@ type itemMap map[string]*httpItem
// itemType is an enum so we know how to classify each item
type itemType int
// enums for itemType
const (
tUnknown itemType = iota
tHTMLPage
+1
View File
@@ -77,6 +77,7 @@ func sitemapToLocations(pages itemSlice) []*Location {
return locations
}
// locationsToJSON takes a *Location slice and marshals it into a JSON string
func locationsToJSON(locations []*Location) (string, error) {
b, err := json.Marshal(locations)
if err != nil {
+2 -2
View File
@@ -11,7 +11,7 @@ var reTitle = regexp.MustCompile(`(?i)<\s*title\s*>([^<]*)<\s*\/\s*title`)
// parseLinks takes a string and attempts to parse any html title and all links out of it,
// and returns a slice of the captures found
func parseLinks(s string) (string, []string, error) {
func parseLinks(s string) (string, []string) {
// find the title, or default to empty
title := ""
titleMatches := reTitle.FindStringSubmatch(s)
@@ -25,5 +25,5 @@ func parseLinks(s string) (string, []string, error) {
for _, match := range reURL.FindAllStringSubmatch(s, -1) {
results = append(results, match[2])
}
return title, results, nil
return title, results
}
+1 -4
View File
@@ -16,10 +16,7 @@ func TestSimpleParse(t *testing.T) {
<script href="scripts/blah.js"/>
</body>
</html>`
title, matches, err := parseLinks(doc)
if err != nil {
t.Error(err)
}
title, matches := parseLinks(doc)
if title != "Test Page" {
t.Error("got wrong title")
}
+4
View File
@@ -6,6 +6,7 @@ import (
"strings"
)
// custom errors
var (
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)
}
// 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 {
// copy the url locally
ucopy := *u
+1
View File
@@ -69,6 +69,7 @@ func TestBadResolve(t* testing.T) {
}
*/
// TestURLStripAnchor tests the stripAnchorFromURL() function
func TestURLStripAnchor(t *testing.T) {
u, err := url.Parse("http://swaits:pass@somehost.com:8765/blah/blah.html?x=y#foo")
if err != nil {
+3
View File
@@ -5,6 +5,8 @@ import (
"testing"
)
// TestUniqStrings passes a slice of strings to uniqStrings() to see if it removes
// all duplicates
func TestUniqStrings(t *testing.T) {
strs := []string{"a", "a", "b", "a", "b", "c", "d", "a", "b", "e", "d"}
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) {
uniq := uniqStrings(nil)
if uniq != nil {