-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstackfmt_test.go
119 lines (111 loc) · 2.34 KB
/
stackfmt_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
108
109
110
111
112
113
114
115
116
117
118
119
package stackfmt
import (
"fmt"
"testing"
)
// This comment helps to maintain original line numbers
// Perhaps this test is too fragile :)
func stackTrace() StackTrace {
return NewStackSkip(0).StackTrace()
// This comment helps to maintain original line numbers
// Perhaps this test is too fragile :)
}
func TestStackTraceFormat(t *testing.T) {
tests := []struct {
StackTrace
format string
want string
}{{
nil,
"%s",
`[]`,
}, {
nil,
"%v",
`[]`,
}, {
nil,
"%+v",
"",
}, {
nil,
"%#v",
`[]stackfmt.Frame(nil)`,
}, {
make(StackTrace, 0),
"%s",
`[]`,
}, {
make(StackTrace, 0),
"%v",
`[]`,
}, {
make(StackTrace, 0),
"%+v",
"",
}, {
make(StackTrace, 0),
"%#v",
`[]stackfmt.Frame{}`,
}, {
stackTrace()[:2],
"%s",
`[stackfmt_test.go stackfmt_test.go]`,
}, {
stackTrace()[:2],
"%v",
`[stackfmt_test.go:11 stackfmt_test.go:58]`,
}, {
stackTrace()[:2],
"%+v",
"\n" +
"github.com/gregwebs/stackfmt.stackTrace\n" +
"\tgithub.com/gregwebs/stackfmt/stackfmt_test.go:11\n" +
"github.com/gregwebs/stackfmt.TestStackTraceFormat\n" +
"\tgithub.com/gregwebs/stackfmt/stackfmt_test.go:62",
}, {
stackTrace()[:2],
"%#v",
`[]stackfmt.Frame{stackfmt_test.go:11, stackfmt_test.go:70}`,
}}
for i, tt := range tests {
testFormatString(t, i, tt.StackTrace, tt.format, tt.want)
}
}
func TestNewStackLocation(t *testing.T) {
got := NewStack().StackTrace()
want := NewStack().StackTrace()
if got[0] == want[0] {
t.Errorf("NewStack: lines are the same. want: %v, got: %v", want, got)
}
}
func TestNewStack(t *testing.T) {
got := NewStackSkip(1).StackTrace()
want := NewStackSkip(1).StackTrace()
if got[0] != want[0] {
t.Errorf("NewStack(remove NewStack): want: %v, got: %v", want, got)
}
gotFirst := fmt.Sprintf("%+v", got[0])[0:15]
if gotFirst != "testing.tRunner" {
t.Errorf("NewStack(): want: %v, got: %+v", "testing.tRunner", gotFirst)
}
}
func TestFuncname(t *testing.T) {
tests := []struct {
name, want string
}{
{"", ""},
{"runtime.main", "main"},
{"github.com/gregwebs/stackfmt.funcname", "funcname"},
{"funcname", "funcname"},
{"io.copyBuffer", "copyBuffer"},
{"main.(*R).Write", "(*R).Write"},
}
for _, tt := range tests {
got := funcname(tt.name)
want := tt.want
if got != want {
t.Errorf("funcname(%q): want: %q, got %q", tt.name, want, got)
}
}
}