-
Notifications
You must be signed in to change notification settings - Fork 141
Expand file tree
/
Copy pathrun_test.go
More file actions
162 lines (138 loc) · 3.46 KB
/
Copy pathrun_test.go
File metadata and controls
162 lines (138 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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
package commands
import (
"bufio"
"strings"
"testing"
"github.com/spf13/cobra"
)
func TestReadMultilineInput(t *testing.T) {
tests := []struct {
name string
input string
expected string
wantErr bool
}{
{
name: "single line input",
input: "hello world",
expected: "hello world",
wantErr: false,
},
{
name: "single line with triple quotes",
input: `"""hello world"""`,
expected: `"""hello world"""`,
wantErr: false,
},
{
name: "multiline input with double quotes",
input: `"""tell
me
a
joke"""`,
expected: `"""tell
me
a
joke"""`,
wantErr: false,
},
{
name: "multiline input with single quotes",
input: `'''tell
me
a
joke'''`,
expected: `'''tell
me
a
joke'''`,
wantErr: false,
},
{
name: "empty input",
input: "",
expected: "",
wantErr: true, // EOF should be treated as an error
},
{
name: "multiline with empty lines",
input: `"""first line
third line"""`,
expected: `"""first line
third line"""`,
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Create a mock command for testing
cmd := &cobra.Command{}
// Create a scanner from the test input
scanner := bufio.NewScanner(strings.NewReader(tt.input))
// Capture output to avoid printing during tests
var output strings.Builder
cmd.SetOut(&output)
result, err := readMultilineInput(cmd, scanner)
if (err != nil) != tt.wantErr {
t.Errorf("readMultilineInput() error = %v, wantErr %v", err, tt.wantErr)
return
}
if result != tt.expected {
t.Errorf("readMultilineInput() = %q, want %q", result, tt.expected)
}
})
}
}
func TestReadMultilineInputUnclosed(t *testing.T) {
// Test unclosed multiline input (should return error)
input := `"""unclosed multiline`
cmd := &cobra.Command{}
var output strings.Builder
cmd.SetOut(&output)
scanner := bufio.NewScanner(strings.NewReader(input))
_, err := readMultilineInput(cmd, scanner)
if err == nil {
t.Error("readMultilineInput() should return error for unclosed multiline input")
}
if !strings.Contains(err.Error(), "unclosed multiline input") {
t.Errorf("readMultilineInput() error should mention unclosed multiline input, got: %v", err)
}
}
func TestRunCmdDetachFlag(t *testing.T) {
// Create the run command
cmd := newRunCmd()
// Verify the --detach flag exists
detachFlag := cmd.Flags().Lookup("detach")
if detachFlag == nil {
t.Fatal("--detach flag not found")
return // unreachable but satisfies staticcheck SA5011
}
// Verify the shorthand flag exists
detachFlagShort := cmd.Flags().ShorthandLookup("d")
if detachFlagShort == nil {
t.Fatal("-d shorthand flag not found")
}
// Get values to avoid potential nil dereference flagged by linter
defValue := detachFlag.DefValue
// Verify the default value is false
if defValue != "false" {
t.Errorf("Expected default detach value to be 'false', got '%s'", defValue)
}
// Verify the flag type
if detachFlag.Value.Type() != "bool" {
t.Errorf("Expected detach flag type to be 'bool', got '%s'", detachFlag.Value.Type())
}
// Test setting the flag value
err := cmd.Flags().Set("detach", "true")
if err != nil {
t.Errorf("Failed to set detach flag: %v", err)
}
// Verify the value was set
detachValue, err := cmd.Flags().GetBool("detach")
if err != nil {
t.Errorf("Failed to get detach flag value: %v", err)
}
if !detachValue {
t.Errorf("Expected detach flag value to be true, got false")
}
}