-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathrender_test.go
More file actions
106 lines (93 loc) · 2.86 KB
/
render_test.go
File metadata and controls
106 lines (93 loc) · 2.86 KB
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
package pyfmt
import (
"reflect"
"regexp"
"strings"
"testing"
)
const flagRegex = `\A((?:.[<>=^])|(?:[<>=^])?)([\+\- ]?)(#?)(0?)(\d*)(\.\d*)?([bdoxXeEfFgGrts%]?)\z`
func TestSplitFlags(t *testing.T) {
var flagPattern = regexp.MustCompile(flagRegex)
tests := []string{"", "4<", "+=", "^10.3", ":> #010.4X",
"<0%", "10.10E", "#x", "<<", "==", "💩<"}
for _, test := range tests {
align, sign, radix, zeroPad, minWidth, precision, verb, err := splitFlags(test)
if err != nil {
t.Error(Must("splitFlags({}) errored: {}!", test, err))
}
if !flagPattern.MatchString(test) {
t.Error(Must("Could not match with regex!: {}", test))
}
got := []string{test, align, sign, radix, zeroPad, minWidth, precision, verb}
want := flagPattern.FindStringSubmatch(test)
if !reflect.DeepEqual(got, want) {
t.Error(Must("splitFlags({}) = \n{:r} Want: \n{:r}", test, got, want))
}
}
}
func TestSplitFlagsError(t *testing.T) {
tests := []string{"<><>", "asdf", "^^^", "^#xx", ":> #010.4x"}
for _, test := range tests {
_, _, _, _, _, _, _, err := splitFlags(test)
if err == nil {
t.Error(Must("splitFlags({}) did not error!", test))
}
}
}
func TestParseFlags(t *testing.T) {
tests := []struct {
flagStr string
want flags
}{
{"", flags{renderVerb: "v", empty: true}},
{">>", flags{fillChar: '>', align: right, renderVerb: "v"}},
{">10.10", flags{align: right, minWidth: "10", precision: ".10", renderVerb: "v"}},
{"#x", flags{showRadix: true, renderVerb: "x"}},
{"#X", flags{showRadix: true, renderVerb: "X"}},
// Neg sign doesn't get picked up.
{"-.4o", flags{precision: ".4", sign: "", renderVerb: "o"}},
{"+.4o", flags{precision: ".4", sign: "+", renderVerb: "o"}},
{"r", flags{renderVerb: "#v"}},
{"#010X", flags{showRadix: true, align: padSign, fillChar: '0', minWidth: "10", renderVerb: "X"}},
}
for _, test := range tests {
defer func() {
if r := recover(); r != nil {
t.Error(Must("parseFlags({flagStr}) paniced: {1}", test, r))
}
}()
r := render{}
err := r.parseFlags(test.flagStr)
if err != nil {
t.Error(Must("parseFlags({flagStr}) Errored: {1}", test, err))
}
if !reflect.DeepEqual(test.want, r.flags) {
t.Error(Must("parseFlags({flagStr}) Got: \n{1:s} Want \n{want:s}", test, r.flags))
}
}
}
func TestParseFlagsError(t *testing.T) {
tests := []struct {
flagStr string
want string
}{
{"asdf", "Invalid"},
{":::", "Invalid"},
{">10.10.", "Invalid"},
}
for _, test := range tests {
defer func() {
if r := recover(); r != nil {
t.Error(Must("parseFlags({flagStr}) paniced: {1}", test, r))
}
}()
r := render{}
err := r.parseFlags(test.flagStr)
if err == nil {
t.Error(Must("parseFlags({flagStr}) did not raise an error", test))
}
if !strings.Contains(err.Error(), test.want) {
t.Error(Must("parseFlags({flagStr}) raised {1}, missing want string {want}", test, err))
}
}
}