]> Cypherpunks repositories - gostls13.git/commitdiff
html: be able to test more than one testdata file.
authorNigel Tao <nigeltao@golang.org>
Sun, 6 Nov 2011 22:38:40 +0000 (09:38 +1100)
committerNigel Tao <nigeltao@golang.org>
Sun, 6 Nov 2011 22:38:40 +0000 (09:38 +1100)
R=andybalholm
CC=golang-dev
https://golang.org/cl/5351041

src/pkg/html/parse_test.go

index a6398e7a124379143d38280218fcf1c305da5525..c938cb9e697ca14859758fa9d81aa403bde02e72 100644 (file)
@@ -23,6 +23,7 @@ func pipeErr(err error) io.Reader {
 }
 
 func readDat(filename string, c chan io.Reader) {
+       defer close(c)
        f, err := os.Open("testdata/webkit/" + filename)
        if err != nil {
                c <- pipeErr(err)
@@ -125,17 +126,27 @@ func dump(n *Node) (string, error) {
 }
 
 func TestParser(t *testing.T) {
-       // TODO(nigeltao): Process all the .dat files, not just the first one.
-       filenames := []string{
-               "tests1.dat",
+       testFiles := []struct {
+               filename string
+               // n is the number of test cases to run from that file.
+               // -1 means all test cases.
+               n int
+       }{
+               // TODO(nigeltao): Process all the test cases from all the .dat files.
+               {"tests1.dat", 87},
+               {"tests2.dat", 0},
+               {"tests3.dat", 0},
        }
-       for _, filename := range filenames {
+       for _, tf := range testFiles {
                rc := make(chan io.Reader)
-               go readDat(filename, rc)
-               // TODO(nigeltao): Process all test cases, not just a subset.
-               for i := 0; i < 87; i++ {
+               go readDat(tf.filename, rc)
+               for i := 0; i != tf.n; i++ {
                        // Parse the #data section.
-                       b, err := ioutil.ReadAll(<-rc)
+                       dataReader := <-rc
+                       if dataReader == nil {
+                               break
+                       }
+                       b, err := ioutil.ReadAll(dataReader)
                        if err != nil {
                                t.Fatal(err)
                        }
@@ -158,7 +169,7 @@ func TestParser(t *testing.T) {
                                t.Fatal(err)
                        }
                        if want := string(b); got != want {
-                               t.Errorf("%s test #%d %q, got vs want:\n----\n%s----\n%s----", filename, i, text, got, want)
+                               t.Errorf("%s test #%d %q, got vs want:\n----\n%s----\n%s----", tf.filename, i, text, got, want)
                                continue
                        }
                        if renderTestBlacklist[text] {
@@ -178,10 +189,16 @@ func TestParser(t *testing.T) {
                                t.Fatal(err)
                        }
                        if got != got1 {
-                               t.Errorf("%s test #%d %q, got vs got1:\n----\n%s----\n%s----", filename, i, text, got, got1)
+                               t.Errorf("%s test #%d %q, got vs got1:\n----\n%s----\n%s----", tf.filename, i, text, got, got1)
                                continue
                        }
                }
+               // Drain any untested cases for the test file.
+               for r := range rc {
+                       if _, err := ioutil.ReadAll(r); err != nil {
+                               t.Fatal(err)
+                       }
+               }
        }
 }