Browse Source

Load the spec coverage in tests lazily.

It was adding noise to benchmark numbers.
Brad Fitzpatrick 11 years ago
parent
commit
57999e3998
1 changed files with 11 additions and 4 deletions
  1. 11 4
      z_spec_test.go

+ 11 - 4
z_spec_test.go

@@ -17,6 +17,7 @@ import (
 	"sort"
 	"strconv"
 	"strings"
+	"sync"
 	"testing"
 )
 
@@ -25,17 +26,21 @@ var coverSpec = flag.Bool("coverspec", false, "Run spec coverage tests")
 // The global map of sentence coverage for the http2 spec.
 var defaultSpecCoverage specCoverage
 
-func init() {
-	f, err := os.Open("testdata/draft-ietf-httpbis-http2.xml")
-	if err != nil {
+var loadSpecOnce sync.Once
+
+func loadSpec() {
+	if f, err := os.Open("testdata/draft-ietf-httpbis-http2.xml"); err != nil {
 		panic(err)
+	} else {
+		defaultSpecCoverage = readSpecCov(f)
+		f.Close()
 	}
-	defaultSpecCoverage = readSpecCov(f)
 }
 
 // covers marks all sentences for section sec in defaultSpecCoverage. Sentences not
 // "covered" will be included in report outputed by TestSpecCoverage.
 func covers(sec, sentences string) {
+	loadSpecOnce.Do(loadSpec)
 	defaultSpecCoverage.cover(sec, sentences)
 }
 
@@ -281,6 +286,8 @@ func TestSpecCoverage(t *testing.T) {
 		t.Skip()
 	}
 
+	loadSpecOnce.Do(loadSpec)
+
 	var (
 		list     []specPart
 		cv       = defaultSpecCoverage.coverage