routergroup_test.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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.absolutePath, "/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.absolutePath, "/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. performRequestInGroup(t, "LINK")
  34. performRequestInGroup(t, "UNLINK")
  35. }
  36. func performRequestInGroup(t *testing.T, method string) {
  37. router := New()
  38. v1 := router.Group("v1", func(c *Context) {})
  39. assert.Equal(t, v1.absolutePath, "/v1")
  40. login := v1.Group("/login/", func(c *Context) {}, func(c *Context) {})
  41. assert.Equal(t, login.absolutePath, "/v1/login/")
  42. handler := func(c *Context) {
  43. c.String(400, "the method was %s and index %d", c.Request.Method, c.index)
  44. }
  45. switch method {
  46. case "GET":
  47. v1.GET("/test", handler)
  48. login.GET("/test", handler)
  49. case "POST":
  50. v1.POST("/test", handler)
  51. login.POST("/test", handler)
  52. case "PUT":
  53. v1.PUT("/test", handler)
  54. login.PUT("/test", handler)
  55. case "PATCH":
  56. v1.PATCH("/test", handler)
  57. login.PATCH("/test", handler)
  58. case "DELETE":
  59. v1.DELETE("/test", handler)
  60. login.DELETE("/test", handler)
  61. case "HEAD":
  62. v1.HEAD("/test", handler)
  63. login.HEAD("/test", handler)
  64. case "OPTIONS":
  65. v1.OPTIONS("/test", handler)
  66. login.OPTIONS("/test", handler)
  67. case "LINK":
  68. v1.LINK("/test", handler)
  69. login.LINK("/test", handler)
  70. case "UNLINK":
  71. v1.UNLINK("/test", handler)
  72. login.UNLINK("/test", handler)
  73. default:
  74. panic("unknown method")
  75. }
  76. w := performRequest(router, method, "/v1/login/test")
  77. assert.Equal(t, w.Code, 400)
  78. assert.Equal(t, w.Body.String(), "the method was "+method+" and index 3")
  79. w = performRequest(router, method, "/v1/test")
  80. assert.Equal(t, w.Code, 400)
  81. assert.Equal(t, w.Body.String(), "the method was "+method+" and index 1")
  82. }