-
Notifications
You must be signed in to change notification settings - Fork 0
/
di_test.go
107 lines (84 loc) · 1.92 KB
/
di_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// Copyright 2022 Sergey Novichkov. All rights reserved.
// For the full copyright and license information, please view the LICENSE
// file that was distributed with this source code.
package di_test
import (
"errors"
"io"
"net/http"
)
type (
Controller interface {
Register(server *http.ServeMux)
}
BarController struct {
_ int
}
BazController struct {
_ int
}
CycledController struct {
_ int
}
FlakyController struct {
_ int
}
Item int
Items []Item
)
func (c *BarController) Register(srv *http.ServeMux) {
srv.HandleFunc("/bar", func(w http.ResponseWriter, _ *http.Request) {
_, _ = io.WriteString(w, "Bar")
})
}
func (c *BazController) Register(srv *http.ServeMux) {
srv.HandleFunc("/baz", func(w http.ResponseWriter, _ *http.Request) {
_, _ = io.WriteString(w, "Baz")
})
}
func (c *CycledController) Register(srv *http.ServeMux) {
srv.HandleFunc("/cycled", func(w http.ResponseWriter, _ *http.Request) {
_, _ = io.WriteString(w, "cycled")
})
}
func (c *FlakyController) Register(srv *http.ServeMux) {
srv.HandleFunc("/flaky", func(w http.ResponseWriter, _ *http.Request) {
_, _ = io.WriteString(w, "flaky")
})
}
func NewServer(mux *http.ServeMux) *http.Server {
return &http.Server{
Addr: ":8080",
Handler: mux,
}
}
func NewServerMux(controllers []Controller) (*http.ServeMux, func() error) {
var s = http.NewServeMux()
for _, c := range controllers {
c.Register(s)
}
return s, func() error {
return nil
}
}
func NewBarController() *BarController {
return &BarController{}
}
func NewBazController() *BazController {
return &BazController{}
}
func NewFlakyController() (*FlakyController, error) {
return nil, errors.New("always fail")
}
func NewCycledController(cycled *CycledController) *CycledController {
return cycled
}
func NewSlice1() []Item {
return []Item{4, 5}
}
func NewSlice2() []Item {
return []Item{6, 7}
}
func NewNamedSlice() Items {
return Items{1, 2, 3}
}