forked from Eun/go-hit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelpers_test.go
73 lines (59 loc) · 1.77 KB
/
helpers_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
package hit_test
import (
"encoding/json"
"io"
"net/http"
"net/http/httptest"
"strings"
"testing"
"regexp"
"github.com/Eun/go-hit/internal/minitest"
"github.com/lunixbochs/vtclean"
"github.com/stretchr/testify/require"
)
func EchoServer() *httptest.Server {
mux := http.NewServeMux()
mux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
for k, v := range request.Header {
writer.Header()[k] = v
}
_, _ = io.Copy(writer, request.Body)
})
return httptest.NewServer(mux)
}
func PrintJSONServer(jsn interface{}) *httptest.Server {
mux := http.NewServeMux()
mux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
if err := json.NewEncoder(writer).Encode(jsn); err != nil {
panic(err)
}
})
return httptest.NewServer(mux)
}
var errorRegex = regexp.MustCompile(`(?s)Error:\s*(.*)Error Trace:\s*`)
var whiteSpaceRegex = regexp.MustCompile(`\s+`)
func ExpectError(t *testing.T, err error, equalLines ...*string) {
require.NotNil(t, err)
matches := errorRegex.FindStringSubmatch(vtclean.Clean(err.Error(), false))
require.Len(t, matches, 2, "Invalid format, Error:\n%s", err.Error())
lines := strings.FieldsFunc(matches[1], func(r rune) bool {
return r == '\n'
})
require.Equal(t, len(equalLines), len(lines), "expected: %s\nactual: %s\n", minitest.PrintValue(equalLines), minitest.PrintValue(lines))
for i := 0; i < len(lines); i++ {
if equalLines[i] != nil {
require.Equal(t,
strings.TrimSpace(whiteSpaceRegex.ReplaceAllString(*equalLines[i], " ")),
strings.TrimSpace(whiteSpaceRegex.ReplaceAllString(lines[i], " ")))
}
}
}
type instantErrorReader struct {
Error error
}
func (e instantErrorReader) Read(p []byte) (int, error) {
return 0, e.Error
}
func PtrStr(s string) *string {
return &s
}