This repository has been archived by the owner on Mar 12, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 54
/
Copy pathvar.go
168 lines (132 loc) · 3.84 KB
/
var.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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
package httptest
import (
"fmt"
"io"
"strings"
"github.com/qiniu/dyn/jsonext"
"github.com/qiniu/dyn/vars"
"github.com/qiniu/x/log"
. "github.com/qiniu/dyn/cmdarg"
)
const (
Fmttype_Json = vars.Fmttype_Json
Fmttype_Form = vars.Fmttype_Form
Fmttype_Text = vars.Fmttype_Text
Fmttype_Jsonstr = vars.Fmttype_Jsonstr // 在json的字符串内
)
// ---------------------------------------------------------------------------
func PrettyPrintln(fprintln func(...interface{}) (int, error), values ...interface{}) {
texts := make([]interface{}, len(values))
for i, val := range values {
if str, ok := val.(string); ok {
texts[i] = str
continue
}
text, err := jsonext.MarshalIndentToString(val, "", " ")
if err != nil {
log.Warn("Fprintln: MarshalToString failed -", err, "val:", val)
}
texts[i] = text
}
fprintln(texts...)
}
func Fprintln(writer io.Writer, values ...interface{}) {
fprintln := func(v ...interface{}) (int, error) {
return fmt.Fprintln(writer, v...)
}
PrettyPrintln(fprintln, values...)
}
func Println(values ...interface{}) {
PrettyPrintln(fmt.Println, values...)
}
// ---------------------------------------------------------------------------
type varsMgr struct {
*vars.Context
}
func (p *varsMgr) initVarsMgr() {
p.Context = vars.New()
}
// ---------------------------------------------------------------------------
func (p *Context) GetVar(key string) Var {
v1, ok := p.varsMgr.GetVar(key)
return Var{v1, ok}
}
func (p *Context) Requestv(method, urlWithVar string) *Request {
url, err := p.SubstText(urlWithVar, Fmttype_Form)
if err != nil {
p.Fatal("invalid request url:", err)
}
return NewRequest(p, method, url)
}
// ---------------------------------------------------------------------------
func (p *Request) WithHeaderv(key string, valuesVar ...string) (resp *Request) {
if len(valuesVar) == 1 {
valVar := valuesVar[0]
if strings.HasPrefix(valVar, "$(") && strings.HasSuffix(valVar, ")") {
valKey := valVar[2 : len(valVar)-1]
if val, ok := p.ctx.varsMgr.GetVar(valKey); ok {
if varr, ok := val.([]string); ok {
return p.WithHeader(key, varr...)
}
}
}
}
values := make([]string, len(valuesVar))
for i, valVar := range valuesVar {
val, err := p.ctx.SubstText(valVar, Fmttype_Text)
if err != nil {
p.ctx.Fatal("invalid request header:", err, "key:", key, "value:", valVar)
return p
}
values[i] = val
}
return p.WithHeader(key, values...)
}
func (p *Request) WithBodyv(bodyType, bodyWithVar string) *Request {
var ft int
bodyType = mimeType(bodyType)
switch bodyType {
case "application/json":
ft = Fmttype_Json
case "application/x-www-form-urlencoded":
ft = Fmttype_Form
default:
ft = Fmttype_Text
}
body, err := p.ctx.SubstText(bodyWithVar, ft)
if err != nil {
p.ctx.Fatal("invalid request body:", err)
return p
}
return p.WithBody(bodyType, body)
}
// ---------------------------------------------------------------------------
func (p *Response) WithHeaderv(key string, valuesVar ...string) (resp *Response) {
values := make([]interface{}, len(valuesVar))
for i, valVar := range valuesVar {
val, err := UnmarshalText(valVar)
if err != nil {
p.matchRespError("unmarshal failed: " + err.Error() + " - text: " + valVar)
return p
}
values[i] = val
}
err := p.ctx.Match(values, p.Header[key])
if err != nil {
p.matchRespError("match header failed: " + err.Error())
}
return p
}
func (p *Response) WithBodyv(bodyType, bodyVar string) (resp *Response) {
bodyExpected, err := Unmarshal(bodyVar)
if err != nil {
p.matchRespError("unmarshal failed: " + err.Error() + " - json text: " + bodyVar)
return p
}
err = p.ctx.Match(bodyExpected, p.BodyObj)
if err != nil {
p.matchRespError("match response body failed: " + err.Error())
}
return p
}
// ---------------------------------------------------------------------------