gin_test.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. "reflect"
  7. "testing"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. //TODO
  11. // func (engine *Engine) LoadHTMLGlob(pattern string) {
  12. // func (engine *Engine) LoadHTMLFiles(files ...string) {
  13. // func (engine *Engine) Run(addr string) error {
  14. // func (engine *Engine) RunTLS(addr string, cert string, key string) error {
  15. func init() {
  16. SetMode(TestMode)
  17. }
  18. func TestCreateEngine(t *testing.T) {
  19. router := New()
  20. assert.Equal(t, "/", router.BasePath)
  21. assert.Equal(t, router.engine, router)
  22. assert.Empty(t, router.Handlers)
  23. assert.Panics(t, func() { router.addRoute("", "/", HandlersChain{func(_ *Context) {}}) })
  24. assert.Panics(t, func() { router.addRoute("GET", "a", HandlersChain{func(_ *Context) {}}) })
  25. assert.Panics(t, func() { router.addRoute("GET", "/", HandlersChain{}) })
  26. }
  27. func TestCreateDefaultRouter(t *testing.T) {
  28. router := Default()
  29. assert.Len(t, router.Handlers, 2)
  30. }
  31. func TestNoRouteWithoutGlobalHandlers(t *testing.T) {
  32. var middleware0 HandlerFunc = func(c *Context) {}
  33. var middleware1 HandlerFunc = func(c *Context) {}
  34. router := New()
  35. router.NoRoute(middleware0)
  36. assert.Nil(t, router.Handlers)
  37. assert.Len(t, router.noRoute, 1)
  38. assert.Len(t, router.allNoRoute, 1)
  39. compareFunc(t, router.noRoute[0], middleware0)
  40. compareFunc(t, router.allNoRoute[0], middleware0)
  41. router.NoRoute(middleware1, middleware0)
  42. assert.Len(t, router.noRoute, 2)
  43. assert.Len(t, router.allNoRoute, 2)
  44. compareFunc(t, router.noRoute[0], middleware1)
  45. compareFunc(t, router.allNoRoute[0], middleware1)
  46. compareFunc(t, router.noRoute[1], middleware0)
  47. compareFunc(t, router.allNoRoute[1], middleware0)
  48. }
  49. func TestNoRouteWithGlobalHandlers(t *testing.T) {
  50. var middleware0 HandlerFunc = func(c *Context) {}
  51. var middleware1 HandlerFunc = func(c *Context) {}
  52. var middleware2 HandlerFunc = func(c *Context) {}
  53. router := New()
  54. router.Use(middleware2)
  55. router.NoRoute(middleware0)
  56. assert.Len(t, router.allNoRoute, 2)
  57. assert.Len(t, router.Handlers, 1)
  58. assert.Len(t, router.noRoute, 1)
  59. compareFunc(t, router.Handlers[0], middleware2)
  60. compareFunc(t, router.noRoute[0], middleware0)
  61. compareFunc(t, router.allNoRoute[0], middleware2)
  62. compareFunc(t, router.allNoRoute[1], middleware0)
  63. router.Use(middleware1)
  64. assert.Len(t, router.allNoRoute, 3)
  65. assert.Len(t, router.Handlers, 2)
  66. assert.Len(t, router.noRoute, 1)
  67. compareFunc(t, router.Handlers[0], middleware2)
  68. compareFunc(t, router.Handlers[1], middleware1)
  69. compareFunc(t, router.noRoute[0], middleware0)
  70. compareFunc(t, router.allNoRoute[0], middleware2)
  71. compareFunc(t, router.allNoRoute[1], middleware1)
  72. compareFunc(t, router.allNoRoute[2], middleware0)
  73. }
  74. func TestNoMethodWithoutGlobalHandlers(t *testing.T) {
  75. var middleware0 HandlerFunc = func(c *Context) {}
  76. var middleware1 HandlerFunc = func(c *Context) {}
  77. router := New()
  78. router.NoMethod(middleware0)
  79. assert.Empty(t, router.Handlers)
  80. assert.Len(t, router.noMethod, 1)
  81. assert.Len(t, router.allNoMethod, 1)
  82. compareFunc(t, router.noMethod[0], middleware0)
  83. compareFunc(t, router.allNoMethod[0], middleware0)
  84. router.NoMethod(middleware1, middleware0)
  85. assert.Len(t, router.noMethod, 2)
  86. assert.Len(t, router.allNoMethod, 2)
  87. compareFunc(t, router.noMethod[0], middleware1)
  88. compareFunc(t, router.allNoMethod[0], middleware1)
  89. compareFunc(t, router.noMethod[1], middleware0)
  90. compareFunc(t, router.allNoMethod[1], middleware0)
  91. }
  92. func TestRebuild404Handlers(t *testing.T) {
  93. }
  94. func TestNoMethodWithGlobalHandlers(t *testing.T) {
  95. var middleware0 HandlerFunc = func(c *Context) {}
  96. var middleware1 HandlerFunc = func(c *Context) {}
  97. var middleware2 HandlerFunc = func(c *Context) {}
  98. router := New()
  99. router.Use(middleware2)
  100. router.NoMethod(middleware0)
  101. assert.Len(t, router.allNoMethod, 2)
  102. assert.Len(t, router.Handlers, 1)
  103. assert.Len(t, router.noMethod, 1)
  104. compareFunc(t, router.Handlers[0], middleware2)
  105. compareFunc(t, router.noMethod[0], middleware0)
  106. compareFunc(t, router.allNoMethod[0], middleware2)
  107. compareFunc(t, router.allNoMethod[1], middleware0)
  108. router.Use(middleware1)
  109. assert.Len(t, router.allNoMethod, 3)
  110. assert.Len(t, router.Handlers, 2)
  111. assert.Len(t, router.noMethod, 1)
  112. compareFunc(t, router.Handlers[0], middleware2)
  113. compareFunc(t, router.Handlers[1], middleware1)
  114. compareFunc(t, router.noMethod[0], middleware0)
  115. compareFunc(t, router.allNoMethod[0], middleware2)
  116. compareFunc(t, router.allNoMethod[1], middleware1)
  117. compareFunc(t, router.allNoMethod[2], middleware0)
  118. }
  119. func compareFunc(t *testing.T, a, b interface{}) {
  120. sf1 := reflect.ValueOf(a)
  121. sf2 := reflect.ValueOf(b)
  122. if sf1.Pointer() != sf2.Pointer() {
  123. t.Error("different functions")
  124. }
  125. }