25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

74 lines
1.7 KiB

  1. package handlers
  2. import (
  3. "bytes"
  4. "net/http"
  5. "testing"
  6. )
  7. func TestChaining(t *testing.T) {
  8. var buf bytes.Buffer
  9. a := func(w http.ResponseWriter, r *http.Request) {
  10. buf.WriteRune('a')
  11. }
  12. b := func(w http.ResponseWriter, r *http.Request) {
  13. buf.WriteRune('b')
  14. }
  15. c := func(w http.ResponseWriter, r *http.Request) {
  16. buf.WriteRune('c')
  17. }
  18. f := NewChainableHandler(http.HandlerFunc(a)).Chain(http.HandlerFunc(b)).Chain(http.HandlerFunc(c))
  19. f.ServeHTTP(nil, nil)
  20. if buf.String() != "abc" {
  21. t.Errorf("expected 'abc', got %s", buf.String())
  22. }
  23. }
  24. func TestChainingWithHelperFunc(t *testing.T) {
  25. var buf bytes.Buffer
  26. a := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  27. buf.WriteRune('a')
  28. })
  29. b := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  30. buf.WriteRune('b')
  31. })
  32. c := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  33. buf.WriteRune('c')
  34. })
  35. d := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  36. buf.WriteRune('d')
  37. })
  38. f := ChainHandlers(a, b, c, d)
  39. f.ServeHTTP(nil, nil)
  40. if buf.String() != "abcd" {
  41. t.Errorf("expected 'abcd', got %s", buf.String())
  42. }
  43. }
  44. func TestChainingMixed(t *testing.T) {
  45. var buf bytes.Buffer
  46. a := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  47. buf.WriteRune('a')
  48. })
  49. b := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  50. buf.WriteRune('b')
  51. })
  52. c := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  53. buf.WriteRune('c')
  54. })
  55. d := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  56. buf.WriteRune('d')
  57. })
  58. f := NewChainableHandler(a).Chain(ChainHandlers(b, c)).Chain(d)
  59. f.ServeHTTP(nil, nil)
  60. if buf.String() != "abcd" {
  61. t.Errorf("expected 'abcd', got %s", buf.String())
  62. }
  63. }