gin_test.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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. }
  24. func TestAddRoute(t *testing.T) {
  25. router := New()
  26. router.addRoute("GET", "/", HandlersChain{func(_ *Context) {}})
  27. assert.Len(t, router.trees, 1)
  28. assert.NotNil(t, router.trees.get("GET"))
  29. assert.Nil(t, router.trees.get("POST"))
  30. router.addRoute("POST", "/", HandlersChain{func(_ *Context) {}})
  31. assert.Len(t, router.trees, 2)
  32. assert.NotNil(t, router.trees.get("GET"))
  33. assert.NotNil(t, router.trees.get("POST"))
  34. router.addRoute("POST", "/post", HandlersChain{func(_ *Context) {}})
  35. assert.Len(t, router.trees, 2)
  36. }
  37. func TestAddRouteFails(t *testing.T) {
  38. router := New()
  39. assert.Panics(t, func() { router.addRoute("", "/", HandlersChain{func(_ *Context) {}}) })
  40. assert.Panics(t, func() { router.addRoute("GET", "a", HandlersChain{func(_ *Context) {}}) })
  41. assert.Panics(t, func() { router.addRoute("GET", "/", HandlersChain{}) })
  42. router.addRoute("POST", "/post", HandlersChain{func(_ *Context) {}})
  43. assert.Panics(t, func() {
  44. router.addRoute("POST", "/post", HandlersChain{func(_ *Context) {}})
  45. })
  46. }
  47. func TestCreateDefaultRouter(t *testing.T) {
  48. router := Default()
  49. assert.Len(t, router.Handlers, 2)
  50. }
  51. func TestNoRouteWithoutGlobalHandlers(t *testing.T) {
  52. var middleware0 HandlerFunc = func(c *Context) {}
  53. var middleware1 HandlerFunc = func(c *Context) {}
  54. router := New()
  55. router.NoRoute(middleware0)
  56. assert.Nil(t, router.Handlers)
  57. assert.Len(t, router.noRoute, 1)
  58. assert.Len(t, router.allNoRoute, 1)
  59. compareFunc(t, router.noRoute[0], middleware0)
  60. compareFunc(t, router.allNoRoute[0], middleware0)
  61. router.NoRoute(middleware1, middleware0)
  62. assert.Len(t, router.noRoute, 2)
  63. assert.Len(t, router.allNoRoute, 2)
  64. compareFunc(t, router.noRoute[0], middleware1)
  65. compareFunc(t, router.allNoRoute[0], middleware1)
  66. compareFunc(t, router.noRoute[1], middleware0)
  67. compareFunc(t, router.allNoRoute[1], middleware0)
  68. }
  69. func TestNoRouteWithGlobalHandlers(t *testing.T) {
  70. var middleware0 HandlerFunc = func(c *Context) {}
  71. var middleware1 HandlerFunc = func(c *Context) {}
  72. var middleware2 HandlerFunc = func(c *Context) {}
  73. router := New()
  74. router.Use(middleware2)
  75. router.NoRoute(middleware0)
  76. assert.Len(t, router.allNoRoute, 2)
  77. assert.Len(t, router.Handlers, 1)
  78. assert.Len(t, router.noRoute, 1)
  79. compareFunc(t, router.Handlers[0], middleware2)
  80. compareFunc(t, router.noRoute[0], middleware0)
  81. compareFunc(t, router.allNoRoute[0], middleware2)
  82. compareFunc(t, router.allNoRoute[1], middleware0)
  83. router.Use(middleware1)
  84. assert.Len(t, router.allNoRoute, 3)
  85. assert.Len(t, router.Handlers, 2)
  86. assert.Len(t, router.noRoute, 1)
  87. compareFunc(t, router.Handlers[0], middleware2)
  88. compareFunc(t, router.Handlers[1], middleware1)
  89. compareFunc(t, router.noRoute[0], middleware0)
  90. compareFunc(t, router.allNoRoute[0], middleware2)
  91. compareFunc(t, router.allNoRoute[1], middleware1)
  92. compareFunc(t, router.allNoRoute[2], middleware0)
  93. }
  94. func TestNoMethodWithoutGlobalHandlers(t *testing.T) {
  95. var middleware0 HandlerFunc = func(c *Context) {}
  96. var middleware1 HandlerFunc = func(c *Context) {}
  97. router := New()
  98. router.NoMethod(middleware0)
  99. assert.Empty(t, router.Handlers)
  100. assert.Len(t, router.noMethod, 1)
  101. assert.Len(t, router.allNoMethod, 1)
  102. compareFunc(t, router.noMethod[0], middleware0)
  103. compareFunc(t, router.allNoMethod[0], middleware0)
  104. router.NoMethod(middleware1, middleware0)
  105. assert.Len(t, router.noMethod, 2)
  106. assert.Len(t, router.allNoMethod, 2)
  107. compareFunc(t, router.noMethod[0], middleware1)
  108. compareFunc(t, router.allNoMethod[0], middleware1)
  109. compareFunc(t, router.noMethod[1], middleware0)
  110. compareFunc(t, router.allNoMethod[1], middleware0)
  111. }
  112. func TestRebuild404Handlers(t *testing.T) {
  113. }
  114. func TestNoMethodWithGlobalHandlers(t *testing.T) {
  115. var middleware0 HandlerFunc = func(c *Context) {}
  116. var middleware1 HandlerFunc = func(c *Context) {}
  117. var middleware2 HandlerFunc = func(c *Context) {}
  118. router := New()
  119. router.Use(middleware2)
  120. router.NoMethod(middleware0)
  121. assert.Len(t, router.allNoMethod, 2)
  122. assert.Len(t, router.Handlers, 1)
  123. assert.Len(t, router.noMethod, 1)
  124. compareFunc(t, router.Handlers[0], middleware2)
  125. compareFunc(t, router.noMethod[0], middleware0)
  126. compareFunc(t, router.allNoMethod[0], middleware2)
  127. compareFunc(t, router.allNoMethod[1], middleware0)
  128. router.Use(middleware1)
  129. assert.Len(t, router.allNoMethod, 3)
  130. assert.Len(t, router.Handlers, 2)
  131. assert.Len(t, router.noMethod, 1)
  132. compareFunc(t, router.Handlers[0], middleware2)
  133. compareFunc(t, router.Handlers[1], middleware1)
  134. compareFunc(t, router.noMethod[0], middleware0)
  135. compareFunc(t, router.allNoMethod[0], middleware2)
  136. compareFunc(t, router.allNoMethod[1], middleware1)
  137. compareFunc(t, router.allNoMethod[2], middleware0)
  138. }
  139. func compareFunc(t *testing.T, a, b interface{}) {
  140. sf1 := reflect.ValueOf(a)
  141. sf2 := reflect.ValueOf(b)
  142. if sf1.Pointer() != sf2.Pointer() {
  143. t.Error("different functions")
  144. }
  145. }