From 3cc7d7f2899963563822d86339e31b4c2800939a Mon Sep 17 00:00:00 2001 From: Lucas Clemente Date: Tue, 17 May 2016 00:44:15 +0200 Subject: [PATCH] add a test that checks that each errorcode has a string representation --- errorcodes/error_code.go | 4 ++++ errorcodes/error_codes.go | 7 +----- errorcodes/errorcodes_test.go | 40 +++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 errorcodes/error_code.go create mode 100644 errorcodes/errorcodes_test.go diff --git a/errorcodes/error_code.go b/errorcodes/error_code.go new file mode 100644 index 000000000..ef20b024e --- /dev/null +++ b/errorcodes/error_code.go @@ -0,0 +1,4 @@ +package errorcodes + +// An ErrorCode in QUIC +type ErrorCode uint32 diff --git a/errorcodes/error_codes.go b/errorcodes/error_codes.go index 707b4bdc0..454fc9b93 100644 --- a/errorcodes/error_codes.go +++ b/errorcodes/error_codes.go @@ -1,12 +1,7 @@ -// Package errorcodes defines the error codes in QUIC. -// package errorcodes -// An ErrorCode in QUIC -type ErrorCode uint32 - // The error codes defined by QUIC -// Remeber to run go generate ./... whenever the error codes change. +// Remeber to run `go generate ./...` whenever the error codes change. //go:generate stringer -type=ErrorCode const ( InternalError ErrorCode = 1 diff --git a/errorcodes/errorcodes_test.go b/errorcodes/errorcodes_test.go new file mode 100644 index 000000000..0e3fab64a --- /dev/null +++ b/errorcodes/errorcodes_test.go @@ -0,0 +1,40 @@ +package errorcodes_test + +import ( + "go/ast" + "go/parser" + "go/token" + "os" + "strconv" + + "github.com/lucas-clemente/quic-go/errorcodes" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestErrorcodes(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Errorcodes Suite") +} + +var _ = Describe("error codes", func() { + // If this test breaks, you should run `go generate ./...` + It("has a string representation for every error code", func() { + // We parse the error code file, extract all constants, and verify that + // each of them has a string version. Go FTW! + filename := os.Getenv("GOPATH") + "/src/github.com/lucas-clemente/quic-go/errorcodes/error_codes.go" + fileAst, err := parser.ParseFile(token.NewFileSet(), filename, nil, 0) + Expect(err).NotTo(HaveOccurred()) + constSpecs := fileAst.Decls[0].(*ast.GenDecl).Specs + Expect(len(constSpecs)).To(BeNumerically(">", 4)) // at time of writing + for _, c := range constSpecs { + name := c.(*ast.ValueSpec).Names[0].Name + valString := c.(*ast.ValueSpec).Values[0].(*ast.BasicLit).Value + val, err := strconv.Atoi(valString) + Expect(err).NotTo(HaveOccurred()) + Expect(errorcodes.ErrorCode(val).String()).To(Equal(name)) + } + }) +})