-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathtestutil_test.go
More file actions
144 lines (128 loc) · 3.46 KB
/
testutil_test.go
File metadata and controls
144 lines (128 loc) · 3.46 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
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
package testutil
import (
"bytes"
"io"
"net/http"
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
type nopCloser struct {
io.Reader
}
func (nopCloser) Close() error { return nil }
// TestStripProgress ensures StripProgress strips what is expected.
func TestStripProgress(t *testing.T) {
testInput := "Lorem ipsum dolar sit amet"
expectedOutput := "Lorem ipsum dolar sit amet"
assert.Equal(t, StripProgress(testInput), expectedOutput, "output")
testInput = "Lorem ipsum dolar sit amet...\b\b\b"
assert.Equal(t, StripProgress(testInput), expectedOutput, "output")
}
// TestAssertBody ensures AssertBody correctly marshals into the interface.
func TestAssertBody(t *testing.T) {
b := nopCloser{bytes.NewBufferString(`{"data":{"lorem":"ipsum"},"dolar":["sit","amet"]}`)}
sampleRequest := http.Request{
Body: b,
}
expected := map[string]any{
"data": map[string]any{
"lorem": "ipsum",
},
"dolar": []string{
"sit",
"amet",
},
}
AssertBody(t, expected, &sampleRequest)
}
// TestAssertOutput tests the AssertOutput method with various scenarios
func TestAssertOutput(t *testing.T) {
tests := []struct {
name string
expected string
actual string
shouldPass bool
}{
{
name: "identical strings",
expected: "line1\nline2\nline3",
actual: "line1\nline2\nline3",
shouldPass: true,
},
{
name: "trailing spaces should be ignored",
expected: "line1\nline2 \nline3",
actual: "line1\nline2\nline3",
shouldPass: true,
},
{
name: "leading spaces should be ignored",
expected: "line1\n line2\nline3",
actual: "line1\nline2\nline3",
shouldPass: true,
},
{
name: "tabs should be ignored",
expected: "line1\n\tline2\t\nline3",
actual: "line1\nline2\nline3",
shouldPass: true,
},
{
name: "mixed whitespace should be ignored",
expected: "line1\n \t line2 \t \nline3",
actual: "line1\nline2\nline3",
shouldPass: true,
},
{
name: "different content should fail",
expected: "line1\nline2\nline3",
actual: "line1\nline2\nline4",
shouldPass: false,
},
{
name: "different number of lines should fail",
expected: "line1\nline2",
actual: "line1\nline2\nline3",
shouldPass: false,
},
{
name: "empty strings",
expected: "",
actual: "",
shouldPass: true,
},
{
name: "single line with spaces",
expected: " hello world ",
actual: "hello world",
shouldPass: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Test by comparing processed results directly
expectedLines := strings.Split(tt.expected, "\n")
actualLines := strings.Split(tt.actual, "\n")
// Trim spaces and tabs from each line
for i, line := range expectedLines {
expectedLines[i] = strings.Trim(line, " \t")
}
for i, line := range actualLines {
actualLines[i] = strings.Trim(line, " \t")
}
// Join lines back with newlines
expectedProcessed := strings.Join(expectedLines, "\n")
actualProcessed := strings.Join(actualLines, "\n")
if tt.shouldPass {
if expectedProcessed != actualProcessed {
t.Errorf("Expected processed output to match, but they don't:\nExpected: %q\nActual: %q", expectedProcessed, actualProcessed)
}
} else {
if expectedProcessed == actualProcessed {
t.Errorf("Expected processed output to differ, but they match: %q", expectedProcessed)
}
}
})
}
}