-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain_test.go
More file actions
114 lines (105 loc) · 2.63 KB
/
main_test.go
File metadata and controls
114 lines (105 loc) · 2.63 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
package main
import (
"bytes"
"os"
"path/filepath"
"strings"
"testing"
)
func TestCLI(t *testing.T) {
tempDir := t.TempDir()
json1 := filepath.Join(tempDir, "test1.json")
json2 := filepath.Join(tempDir, "test2.json")
yaml1 := filepath.Join(tempDir, "test1.yaml")
if err := os.WriteFile(json1, []byte(`{"name": "test", "value": 42, "enabled": true}`), 0o644); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(json2, []byte(`{"name": "test2", "value": 43, "enabled": true}`), 0o644); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(yaml1, []byte("name: test\nvalue: 42\nenabled: true"), 0o644); err != nil {
t.Fatal(err)
}
tests := []struct {
name string
args []string
wantExit int
wantOut string
wantErr string
}{
{
name: "Help flag",
args: []string{"-h"},
wantExit: 0,
wantErr: "Usage: diffnest",
},
{
name: "Missing files",
args: []string{},
wantExit: 1,
wantErr: "expected 2 files",
},
{
name: "Only one file",
args: []string{json1},
wantExit: 1,
wantErr: "expected 2 files",
},
{
name: "Non-existent file",
args: []string{json1, "nonexistent.json"},
wantExit: 1,
wantErr: "Error opening second file",
},
{
name: "Different files",
args: []string{json1, json2},
wantExit: 1,
wantOut: "- name: test",
},
{
name: "Same content different format",
args: []string{"-show-all", json1, yaml1},
wantExit: 0,
wantOut: "name: test",
},
{
name: "JSON patch format",
args: []string{"-format", "json-patch", json1, json2},
wantExit: 1,
wantOut: `{"op": "replace"`,
},
{
name: "Show all flag",
args: []string{"-show-all", json1, json2},
wantExit: 1,
wantOut: " enabled: true",
},
{
name: "Verbose flag",
args: []string{"-v", json1, json2},
wantExit: 1,
wantOut: "- name: test",
},
{
name: "Force formats",
args: []string{"-show-all", "-format1", "json", "-format2", "yaml", json1, yaml1},
wantExit: 0,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var stdout, stderr bytes.Buffer
exitCode := run(tt.args, &stdout, &stderr)
if exitCode != tt.wantExit {
t.Errorf("Exit code = %d, want %d", exitCode, tt.wantExit)
}
if tt.wantOut != "" && !strings.Contains(stdout.String(), tt.wantOut) {
t.Errorf("stdout missing expected string %q\nGot:\n%s", tt.wantOut, stdout.String())
}
if tt.wantErr != "" && !strings.Contains(stderr.String(), tt.wantErr) {
t.Errorf("stderr missing expected string %q\nGot:\n%s", tt.wantErr, stderr.String())
}
})
}
}