From 5424935fd9fb44a43d6565000f38e27f8454641f Mon Sep 17 00:00:00 2001 From: John Date: Thu, 19 Sep 2019 20:19:07 +0800 Subject: [PATCH] rename AddMiddleware to BindMiddleWareDefault for ghttp.Server; add more unit test cases fpr gstr --- net/ghttp/ghttp_unit_middleware_test.go | 44 ++++++++++++------------- net/ghttp/ghttp_unit_param_test.go | 12 +++++++ text/gstr/gstr_parse.go | 20 +++++------ text/gstr/gstr_z_unit_parse_test.go | 23 +++++++++++++ 4 files changed, 67 insertions(+), 32 deletions(-) diff --git a/net/ghttp/ghttp_unit_middleware_test.go b/net/ghttp/ghttp_unit_middleware_test.go index 34618f49b..ddf07e883 100644 --- a/net/ghttp/ghttp_unit_middleware_test.go +++ b/net/ghttp/ghttp_unit_middleware_test.go @@ -130,18 +130,18 @@ func Test_BindMiddleware_Status(t *testing.T) { }) } -func Test_AddMiddleware_Basic1(t *testing.T) { +func Test_BindMiddlewareDefault_Basic1(t *testing.T) { p := ports.PopRand() s := g.Server(p) s.BindHandler("/test/test", func(r *ghttp.Request) { r.Response.Write("test") }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Response.Write("1") r.Middleware.Next() r.Response.Write("2") }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Response.Write("3") r.Middleware.Next() r.Response.Write("4") @@ -162,18 +162,18 @@ func Test_AddMiddleware_Basic1(t *testing.T) { }) } -func Test_AddMiddleware_Basic2(t *testing.T) { +func Test_BindMiddlewareDefault_Basic2(t *testing.T) { p := ports.PopRand() s := g.Server(p) s.BindHandler("PUT:/test/test", func(r *ghttp.Request) { r.Response.Write("test") }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Response.Write("1") r.Middleware.Next() r.Response.Write("2") }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Response.Write("3") r.Middleware.Next() r.Response.Write("4") @@ -196,17 +196,17 @@ func Test_AddMiddleware_Basic2(t *testing.T) { }) } -func Test_AddMiddleware_Basic3(t *testing.T) { +func Test_BindMiddlewareDefault_Basic3(t *testing.T) { p := ports.PopRand() s := g.Server(p) s.BindHandler("/test/test", func(r *ghttp.Request) { r.Response.Write("test") }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Response.Write("1") r.Middleware.Next() }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Middleware.Next() r.Response.Write("2") }) @@ -226,17 +226,17 @@ func Test_AddMiddleware_Basic3(t *testing.T) { }) } -func Test_AddMiddleware_Basic4(t *testing.T) { +func Test_BindMiddlewareDefault_Basic4(t *testing.T) { p := ports.PopRand() s := g.Server(p) s.BindHandler("/test/test", func(r *ghttp.Request) { r.Response.Write("test") }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Middleware.Next() r.Response.Write("1") }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Response.Write("2") r.Middleware.Next() }) @@ -256,17 +256,17 @@ func Test_AddMiddleware_Basic4(t *testing.T) { }) } -func Test_AddMiddleware_Basic5(t *testing.T) { +func Test_BindMiddlewareDefault_Basic5(t *testing.T) { p := ports.PopRand() s := g.Server(p) s.BindHandler("/test/test", func(r *ghttp.Request) { r.Response.Write("test") }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Response.Write("1") r.Middleware.Next() }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Response.Write("2") r.Middleware.Next() }) @@ -286,13 +286,13 @@ func Test_AddMiddleware_Basic5(t *testing.T) { }) } -func Test_AddMiddleware_Status(t *testing.T) { +func Test_BindMiddlewareDefault_Status(t *testing.T) { p := ports.PopRand() s := g.Server(p) s.BindHandler("/test/test", func(r *ghttp.Request) { r.Response.Write("test") }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Middleware.Next() }) s.SetPort(p) @@ -333,16 +333,16 @@ func (o *ObjectMiddleware) Info(r *ghttp.Request) { r.Response.Write("Object Info") } -func Test_AddMiddleware_Basic6(t *testing.T) { +func Test_BindMiddlewareDefault_Basic6(t *testing.T) { p := ports.PopRand() s := g.Server(p) s.BindObject("/", new(ObjectMiddleware)) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Response.Write("1") r.Middleware.Next() r.Response.Write("2") }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Response.Write("3") r.Middleware.Next() r.Response.Write("4") @@ -385,12 +385,12 @@ func Test_Hook_Middleware_Basic1(t *testing.T) { s.BindHookHandler("/*", ghttp.HOOK_AFTER_SERVE, func(r *ghttp.Request) { r.Response.Write("d") }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Response.Write("1") r.Middleware.Next() r.Response.Write("2") }) - s.AddMiddleware(func(r *ghttp.Request) { + s.BindMiddlewareDefault(func(r *ghttp.Request) { r.Response.Write("3") r.Middleware.Next() r.Response.Write("4") diff --git a/net/ghttp/ghttp_unit_param_test.go b/net/ghttp/ghttp_unit_param_test.go index 191b5a1a3..cf87cf6ad 100644 --- a/net/ghttp/ghttp_unit_param_test.go +++ b/net/ghttp/ghttp_unit_param_test.go @@ -26,6 +26,9 @@ func Test_Params_Basic(t *testing.T) { p := ports.PopRand() s := g.Server(p) s.BindHandler("/get", func(r *ghttp.Request) { + if r.GetQuery("array") != nil { + r.Response.Write(r.GetQuery("array")) + } if r.GetQuery("slice") != nil { r.Response.Write(r.GetQuery("slice")) } @@ -49,6 +52,9 @@ func Test_Params_Basic(t *testing.T) { } }) s.BindHandler("/put", func(r *ghttp.Request) { + if r.Get("array") != nil { + r.Response.Write(r.Get("array")) + } if r.Get("slice") != nil { r.Response.Write(r.Get("slice")) } @@ -75,6 +81,9 @@ func Test_Params_Basic(t *testing.T) { } }) s.BindHandler("/post", func(r *ghttp.Request) { + if r.GetPost("array") != nil { + r.Response.Write(r.GetPost("array")) + } if r.GetPost("slice") != nil { r.Response.Write(r.GetPost("slice")) } @@ -161,6 +170,7 @@ func Test_Params_Basic(t *testing.T) { client := ghttp.NewClient() client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) // GET + gtest.Assert(client.GetContent("/get", "array[]=1&array[]=2"), `["1","2"]`) gtest.Assert(client.GetContent("/get", "slice=1&slice=2"), `2`) gtest.Assert(client.GetContent("/get", "bool=1"), `true`) gtest.Assert(client.GetContent("/get", "bool=0"), `false`) @@ -173,6 +183,7 @@ func Test_Params_Basic(t *testing.T) { gtest.Assert(client.GetContent("/get", "string=key"), `key`) // PUT + gtest.Assert(client.PutContent("/put", "array[]=1&array[]=2"), `["1","2"]`) gtest.Assert(client.PutContent("/put", "slice=1&slice=2"), `2`) gtest.Assert(client.PutContent("/put", "bool=1"), `true`) gtest.Assert(client.PutContent("/put", "bool=0"), `false`) @@ -186,6 +197,7 @@ func Test_Params_Basic(t *testing.T) { gtest.Assert(client.PutContent("/put", "map[a]=1&map[b]=2"), `2`) // POST + gtest.Assert(client.PostContent("/post", "array[]=1&array[]=2"), `["1","2"]`) gtest.Assert(client.PostContent("/post", "slice=1&slice=2"), `2`) gtest.Assert(client.PostContent("/post", "bool=1"), `true`) gtest.Assert(client.PostContent("/post", "bool=0"), `false`) diff --git a/text/gstr/gstr_parse.go b/text/gstr/gstr_parse.go index 1481b103e..14c88c39d 100644 --- a/text/gstr/gstr_parse.go +++ b/text/gstr/gstr_parse.go @@ -14,13 +14,13 @@ import ( // Parse parses the string into map[string]interface{}. // -// f1=m&f2=n -> map[f1:m f2:n] -// f[a]=m&f[b]=n -> map[f:map[a:m b:n]] -// f[a][a]=m&f[a][b]=n -> map[f:map[a:map[a:m b:n]]] -// f[]=m&f[]=n -> map[f:[m n]] -// f[a][]=m&f[a][]=n -> map[f:map[a:[m n]]] -// f[][]=m&f[][]=n -> map[f:[map[]]] // Currently does not support nested slice. -// f=m&f[a]=n -> error +// v1=m&v2=n -> map[v1:m v2:n] +// v[a]=m&v[b]=n -> map[v:map[a:m b:n]] +// v[a][a]=m&v[a][b]=n -> map[v:map[a:map[a:m b:n]]] +// v[]=m&v[]=n -> map[v:[m n]] +// v[a][]=m&v[a][]=n -> map[v:map[a:[m n]]] +// v[][]=m&v[][]=n -> map[v:[map[]]] // Currently does not support nested slice. +// v=m&v[a]=n -> error // a .[[b=c -> map[a___[b:c] // func Parse(s string) (result map[string]interface{}, err error) { @@ -102,7 +102,7 @@ func build(result map[string]interface{}, keys []string, value interface{}) erro // The end is slice. like f[], f[a][] if keys[1] == "" && length == 2 { - // todo nested slice + // TODO nested slice if key == "" { return nil } @@ -119,7 +119,7 @@ func build(result map[string]interface{}, keys []string, value interface{}) erro return nil } - // The end is slice + map. like f[][a] + // The end is slice + map. like v[][a] if keys[1] == "" && length > 2 && keys[2] != "" { val, ok := result[key] if !ok { @@ -144,7 +144,7 @@ func build(result map[string]interface{}, keys []string, value interface{}) erro return nil } - // map. like f[a], f[a][b] + // map, like v[a], v[a][b] val, ok := result[key] if !ok { result[key] = map[string]interface{}{} diff --git a/text/gstr/gstr_z_unit_parse_test.go b/text/gstr/gstr_z_unit_parse_test.go index af0fe0aab..ad78493ff 100644 --- a/text/gstr/gstr_z_unit_parse_test.go +++ b/text/gstr/gstr_z_unit_parse_test.go @@ -38,6 +38,12 @@ func Test_Parse(t *testing.T) { "b": "2", "c": "3", }) + m, err = gstr.Parse("a=1&a=2&c=3") + gtest.Assert(err, nil) + gtest.Assert(m, g.Map{ + "a": "2", + "c": "3", + }) // map m, err = gstr.Parse("m[a]=1&m[b]=2&m[c]=3") gtest.Assert(err, nil) @@ -48,6 +54,14 @@ func Test_Parse(t *testing.T) { "c": "3", }, }) + m, err = gstr.Parse("m[a]=1&m[a]=2&m[b]=3") + gtest.Assert(err, nil) + gtest.Assert(m, g.Map{ + "m": g.Map{ + "a": "2", + "b": "3", + }, + }) // map - slice m, err = gstr.Parse("m[a][]=1&m[a][]=2") gtest.Assert(err, nil) @@ -56,6 +70,15 @@ func Test_Parse(t *testing.T) { "a": g.Slice{"1", "2"}, }, }) + m, err = gstr.Parse("m[a][b][]=1&m[a][b][]=2") + gtest.Assert(err, nil) + gtest.Assert(m, g.Map{ + "m": g.Map{ + "a": g.Map{ + "b": g.Slice{"1", "2"}, + }, + }, + }) // map - complicated m, err = gstr.Parse("m[a1][b1][c1][d1]=1&m[a2][b2]=2&m[a3][b3][c3]=3") gtest.Assert(err, nil)