]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: refactor test TestParseFormUnknownContentType
authorDavid Ndungu <dnjuguna@gmail.com>
Sat, 27 Jul 2019 22:19:32 +0000 (15:19 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 8 Nov 2019 18:11:01 +0000 (18:11 +0000)
Use names to better communicate when a test case fails.

Change-Id: Id882783cb5e444b705443fbcdf612713f8a3b032
Reviewed-on: https://go-review.googlesource.com/c/go/+/187823
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/net/http/request_test.go

index bb06d922f0fb9e6cfe75c3a6f3319d2e65ae6d2f..42c16d00ea8c60cd76c75b994c26fcaffc5a703d 100644 (file)
@@ -85,35 +85,37 @@ func TestParseFormQueryMethods(t *testing.T) {
        }
 }
 
-type stringMap map[string][]string
-type parseContentTypeTest struct {
-       shouldError bool
-       contentType stringMap
-}
-
-var parseContentTypeTests = []parseContentTypeTest{
-       {false, stringMap{"Content-Type": {"text/plain"}}},
-       // Empty content type is legal - may be treated as
-       // application/octet-stream (RFC 7231, section 3.1.1.5)
-       {false, stringMap{}},
-       {true, stringMap{"Content-Type": {"text/plain; boundary="}}},
-       {false, stringMap{"Content-Type": {"application/unknown"}}},
-}
-
 func TestParseFormUnknownContentType(t *testing.T) {
-       for i, test := range parseContentTypeTests {
-               req := &Request{
-                       Method: "POST",
-                       Header: Header(test.contentType),
-                       Body:   ioutil.NopCloser(strings.NewReader("body")),
-               }
-               err := req.ParseForm()
-               switch {
-               case err == nil && test.shouldError:
-                       t.Errorf("test %d should have returned error", i)
-               case err != nil && !test.shouldError:
-                       t.Errorf("test %d should not have returned error, got %v", i, err)
-               }
+       for _, test := range []struct {
+               name        string
+               wantErr     string
+               contentType Header
+       }{
+               {"text", "", Header{"Content-Type": {"text/plain"}}},
+               // Empty content type is legal - may be treated as
+               // application/octet-stream (RFC 7231, section 3.1.1.5)
+               {"empty", "", Header{}},
+               {"boundary", "mime: invalid media parameter", Header{"Content-Type": {"text/plain; boundary="}}},
+               {"unknown", "", Header{"Content-Type": {"application/unknown"}}},
+       } {
+               t.Run(test.name,
+                       func(t *testing.T) {
+                               req := &Request{
+                                       Method: "POST",
+                                       Header: test.contentType,
+                                       Body:   ioutil.NopCloser(strings.NewReader("body")),
+                               }
+                               err := req.ParseForm()
+                               switch {
+                               case err == nil && test.wantErr != "":
+                                       t.Errorf("unexpected success; want error %q", test.wantErr)
+                               case err != nil && test.wantErr == "":
+                                       t.Errorf("want success, got error: %v", err)
+                               case test.wantErr != "" && test.wantErr != fmt.Sprint(err):
+                                       t.Errorf("got error %q; want %q", err, test.wantErr)
+                               }
+                       },
+               )
        }
 }