routergroup_test.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // Copyright 2014 Manu Martinez-Almeida. All rights reserved.
  2. // Use of this source code is governed by a MIT style
  3. // license that can be found in the LICENSE file.
  4. package gin
  5. import (
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func init() {
  10. SetMode(TestMode)
  11. }
  12. func TestRouterGroupBasic(t *testing.T) {
  13. router := New()
  14. group := router.Group("/hola", func(c *Context) {})
  15. group.Use(func(c *Context) {})
  16. assert.Len(t, group.Handlers, 2)
  17. assert.Equal(t, group.BasePath, "/hola")
  18. assert.Equal(t, group.engine, router)
  19. group2 := group.Group("manu")
  20. group2.Use(func(c *Context) {}, func(c *Context) {})
  21. assert.Len(t, group2.Handlers, 4)
  22. assert.Equal(t, group2.BasePath, "/hola/manu")
  23. assert.Equal(t, group2.engine, router)
  24. }
  25. func TestRouterGroupBasicHandle(t *testing.T) {
  26. performRequestInGroup(t, "GET")
  27. performRequestInGroup(t, "POST")
  28. performRequestInGroup(t, "PUT")
  29. performRequestInGroup(t, "PATCH")
  30. performRequestInGroup(t, "DELETE")
  31. performRequestInGroup(t, "HEAD")
  32. performRequestInGroup(t, "OPTIONS")
  33. }
  34. func performRequestInGroup(t *testing.T, method string) {
  35. router := New()
  36. v1 := router.Group("v1", func(c *Context) {})
  37. assert.Equal(t, v1.BasePath, "/v1")
  38. login := v1.Group("/login/", func(c *Context) {}, func(c *Context) {})
  39. assert.Equal(t, login.BasePath, "/v1/login/")
  40. handler := func(c *Context) {
  41. c.String(400, "the method was %s and index %d", c.Request.Method, c.index)
  42. }
  43. switch method {
  44. case "GET":
  45. v1.GET("/test", handler)
  46. login.GET("/test", handler)
  47. case "POST":
  48. v1.POST("/test", handler)
  49. login.POST("/test", handler)
  50. case "PUT":
  51. v1.PUT("/test", handler)
  52. login.PUT("/test", handler)
  53. case "PATCH":
  54. v1.PATCH("/test", handler)
  55. login.PATCH("/test", handler)
  56. case "DELETE":
  57. v1.DELETE("/test", handler)
  58. login.DELETE("/test", handler)
  59. case "HEAD":
  60. v1.HEAD("/test", handler)
  61. login.HEAD("/test", handler)
  62. case "OPTIONS":
  63. v1.OPTIONS("/test", handler)
  64. login.OPTIONS("/test", handler)
  65. default:
  66. panic("unknown method")
  67. }
  68. w := performRequest(router, method, "/v1/login/test")
  69. assert.Equal(t, w.Code, 400)
  70. assert.Equal(t, w.Body.String(), "the method was "+method+" and index 3")
  71. w = performRequest(router, method, "/v1/test")
  72. assert.Equal(t, w.Code, 400)
  73. assert.Equal(t, w.Body.String(), "the method was "+method+" and index 1")
  74. }