gin_test.go 4.5 KB

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