func TestFileTransport(t *testing.T) { check := checker(t) dname, err := ioutil.TempDir("", "") check("TempDir", err) fname := filepath.Join(dname, "foo.txt") err = ioutil.WriteFile(fname, []byte("Bar"), 0644) check("WriteFile", err) tr := &http.Transport{} tr.RegisterProtocol("file", http.NewFileTransport(http.Dir(dname))) c := &http.Client{Transport: tr} fooURLs := []string{"file:///foo.txt", "file://../foo.txt"} for _, urlstr := range fooURLs { res, err := c.Get(urlstr) check("Get "+urlstr, err) if res.StatusCode != 200 { t.Errorf("for %s, StatusCode = %d, want 200", urlstr, res.StatusCode) } if res.ContentLength != -1 { t.Errorf("for %s, ContentLength = %d, want -1", urlstr, res.ContentLength) } if res.Body == nil { t.Fatalf("for %s, nil Body", urlstr) } slurp, err := ioutil.ReadAll(res.Body) check("ReadAll "+urlstr, err) if string(slurp) != "Bar" { t.Errorf("for %s, got content %q, want %q", urlstr, string(slurp), "Bar") } } const badURL = "file://../no-exist.txt" res, err := c.Get(badURL) check("Get "+badURL, err) if res.StatusCode != 404 { t.Errorf("for %s, StatusCode = %d, want 404", badURL, res.StatusCode) } }
// Load the data form NormalizationTest.txt func loadTestData() { if *localFiles { pwd, _ := os.Getwd() *url = "file://" + path.Join(pwd, file) } t := &http.Transport{} t.RegisterProtocol("file", http.NewFileTransport(http.Dir("/"))) c := &http.Client{Transport: t} resp, err := c.Get(*url) if err != nil { logger.Fatal(err) } if resp.StatusCode != 200 { logger.Fatal("bad GET status for "+file, resp.Status) } f := resp.Body defer f.Close() input := bufio.NewReader(f) for { line, err := input.ReadString('\n') if err != nil { if err == os.EOF { break } logger.Fatal(err) } if len(line) == 0 || line[0] == '#' { continue } m := partRe.FindStringSubmatch(line) if m != nil { if len(m) < 3 { logger.Fatal("Failed to parse Part: ", line) } i, err := strconv.Atoi(m[1]) if err != nil { logger.Fatal(err) } name := m[2] part = append(part, Part{name: name[:len(name)-1], number: i}) continue } m = testRe.FindStringSubmatch(line) if m == nil || len(m) < 7 { logger.Fatalf(`Failed to parse: "%s" result: %#v`, line, m) } test := Test{name: m[6], partnr: len(part) - 1, number: counter} counter++ for j := 1; j < len(m)-1; j++ { for _, split := range strings.Split(m[j], " ") { r, err := strconv.Btoui64(split, 16) if err != nil { logger.Fatal(err) } if test.rune == 0 { // save for CharacterByCharacterTests test.rune = int(r) } var buf [utf8.UTFMax]byte sz := utf8.EncodeRune(buf[:], int(r)) test.cols[j-1] += string(buf[:sz]) } } part := &part[len(part)-1] part.tests = append(part.tests, test) } }