router_test.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package tango
  2. import (
  3. "testing"
  4. "bytes"
  5. "net/http"
  6. "net/http/httptest"
  7. )
  8. type RouterNoMethodAction struct {
  9. }
  10. func TestRouter1(t *testing.T) {
  11. buff := bytes.NewBufferString("")
  12. recorder := httptest.NewRecorder()
  13. recorder.Body = buff
  14. o := Classic()
  15. o.Get("/:name", new(RouterNoMethodAction))
  16. req, err := http.NewRequest("GET", "http://localhost:8000/foobar", nil)
  17. if err != nil {
  18. t.Error(err)
  19. }
  20. o.ServeHTTP(recorder, req)
  21. expect(t, recorder.Code, http.StatusNotFound)
  22. refute(t, len(buff.String()), 0)
  23. }
  24. type RouterGetAction struct {
  25. }
  26. func (a *RouterGetAction) Get() string {
  27. return "get"
  28. }
  29. func (a *RouterGetAction) Post() string {
  30. return "post"
  31. }
  32. func TestRouter2(t *testing.T) {
  33. buff := bytes.NewBufferString("")
  34. recorder := httptest.NewRecorder()
  35. recorder.Body = buff
  36. o := Classic()
  37. o.Get("/:name", new(RouterGetAction))
  38. o.Post("/:name", new(RouterGetAction))
  39. req, err := http.NewRequest("GET", "http://localhost:8000/foobar", nil)
  40. if err != nil {
  41. t.Error(err)
  42. }
  43. o.ServeHTTP(recorder, req)
  44. expect(t, recorder.Code, http.StatusOK)
  45. refute(t, len(buff.String()), 0)
  46. expect(t, buff.String(), "get")
  47. buff.Reset()
  48. req, err = http.NewRequest("POST", "http://localhost:8000/foobar", nil)
  49. if err != nil {
  50. t.Error(err)
  51. }
  52. o.ServeHTTP(recorder, req)
  53. expect(t, recorder.Code, http.StatusOK)
  54. refute(t, len(buff.String()), 0)
  55. expect(t, buff.String(), "post")
  56. }
  57. func TestRouterFunc(t *testing.T) {
  58. buff := bytes.NewBufferString("")
  59. recorder := httptest.NewRecorder()
  60. recorder.Body = buff
  61. o := Classic()
  62. o.Get("/", func() string {
  63. return "func"
  64. })
  65. o.Post("/", func(ctx *Context) {
  66. ctx.Write([]byte("func(*Context)"))
  67. })
  68. o.Put("/", func(resp http.ResponseWriter, req *http.Request) {
  69. resp.Write([]byte("func(http.ResponseWriter, *http.Request)"))
  70. })
  71. o.Options("/", func(resp http.ResponseWriter) {
  72. resp.Write([]byte("func(http.ResponseWriter)"))
  73. })
  74. o.Delete("/", func(req *http.Request) string {
  75. return "func(*http.Request)"
  76. })
  77. // plain
  78. req, err := http.NewRequest("GET", "http://localhost:8000/", nil)
  79. if err != nil {
  80. t.Error(err)
  81. }
  82. o.ServeHTTP(recorder, req)
  83. expect(t, recorder.Code, http.StatusOK)
  84. refute(t, len(buff.String()), 0)
  85. expect(t, buff.String(), "func")
  86. // context
  87. buff.Reset()
  88. req, err = http.NewRequest("POST", "http://localhost:8000/", nil)
  89. if err != nil {
  90. t.Error(err)
  91. }
  92. o.ServeHTTP(recorder, req)
  93. expect(t, recorder.Code, http.StatusOK)
  94. refute(t, len(buff.String()), 0)
  95. expect(t, buff.String(), "func(*Context)")
  96. // http
  97. buff.Reset()
  98. req, err = http.NewRequest("PUT", "http://localhost:8000/", nil)
  99. if err != nil {
  100. t.Error(err)
  101. }
  102. o.ServeHTTP(recorder, req)
  103. expect(t, recorder.Code, http.StatusOK)
  104. refute(t, len(buff.String()), 0)
  105. expect(t, buff.String(), "func(http.ResponseWriter, *http.Request)")
  106. // response
  107. buff.Reset()
  108. req, err = http.NewRequest("OPTIONS", "http://localhost:8000/", nil)
  109. if err != nil {
  110. t.Error(err)
  111. }
  112. o.ServeHTTP(recorder, req)
  113. expect(t, recorder.Code, http.StatusOK)
  114. refute(t, len(buff.String()), 0)
  115. expect(t, buff.String(), "func(http.ResponseWriter)")
  116. // req
  117. buff.Reset()
  118. req, err = http.NewRequest("DELETE", "http://localhost:8000/", nil)
  119. if err != nil {
  120. t.Error(err)
  121. }
  122. o.ServeHTTP(recorder, req)
  123. expect(t, recorder.Code, http.StatusOK)
  124. refute(t, len(buff.String()), 0)
  125. expect(t, buff.String(), "func(*http.Request)")
  126. }