}
func readDat(filename string, c chan io.Reader) {
+ defer close(c)
f, err := os.Open("testdata/webkit/" + filename)
if err != nil {
c <- pipeErr(err)
}
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)
}
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] {
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)
+ }
+ }
}
}