Skip to content

Commit eb04fa8

Browse files
committed
More tests
1 parent 2be0094 commit eb04fa8

7 files changed

Lines changed: 576 additions & 8 deletions

File tree

cmd/version_test.go

Lines changed: 131 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package cmd
22

3-
import "testing"
3+
import (
4+
"strings"
5+
"testing"
6+
)
47

58
func TestGetVersionDisplay(t *testing.T) {
69
var expectedVersion = ProductName + " (https://github.com/mikefarah/yq/) version " + Version
@@ -25,6 +28,18 @@ func TestGetVersionDisplay(t *testing.T) {
2528
}
2629

2730
func Test_getHumanVersion(t *testing.T) {
31+
// Save original values
32+
origGitDescribe := GitDescribe
33+
origGitCommit := GitCommit
34+
origVersionPrerelease := VersionPrerelease
35+
36+
// Restore after test
37+
defer func() {
38+
GitDescribe = origGitDescribe
39+
GitCommit = origGitCommit
40+
VersionPrerelease = origVersionPrerelease
41+
}()
42+
2843
GitDescribe = "e42813d"
2944
GitCommit = "e42813d+CHANGES"
3045
var wanted string
@@ -49,3 +64,118 @@ func Test_getHumanVersion(t *testing.T) {
4964
}
5065
}
5166
}
67+
68+
func Test_getHumanVersion_NoGitDescribe(t *testing.T) {
69+
// Save original values
70+
origGitDescribe := GitDescribe
71+
origGitCommit := GitCommit
72+
origVersionPrerelease := VersionPrerelease
73+
74+
// Restore after test
75+
defer func() {
76+
GitDescribe = origGitDescribe
77+
GitCommit = origGitCommit
78+
VersionPrerelease = origVersionPrerelease
79+
}()
80+
81+
GitDescribe = ""
82+
GitCommit = ""
83+
VersionPrerelease = ""
84+
85+
got := getHumanVersion()
86+
if got != Version {
87+
t.Errorf("getHumanVersion() = %v, want %v", got, Version)
88+
}
89+
}
90+
91+
func Test_getHumanVersion_WithPrerelease(t *testing.T) {
92+
// Save original values
93+
origGitDescribe := GitDescribe
94+
origGitCommit := GitCommit
95+
origVersionPrerelease := VersionPrerelease
96+
97+
// Restore after test
98+
defer func() {
99+
GitDescribe = origGitDescribe
100+
GitCommit = origGitCommit
101+
VersionPrerelease = origVersionPrerelease
102+
}()
103+
104+
GitDescribe = ""
105+
GitCommit = "abc123"
106+
VersionPrerelease = "beta"
107+
108+
got := getHumanVersion()
109+
expected := Version + "-beta (abc123)"
110+
if got != expected {
111+
t.Errorf("getHumanVersion() = %v, want %v", got, expected)
112+
}
113+
}
114+
115+
func Test_getHumanVersion_PrereleaseInVersion(t *testing.T) {
116+
// Save original values
117+
origGitDescribe := GitDescribe
118+
origGitCommit := GitCommit
119+
origVersionPrerelease := VersionPrerelease
120+
121+
// Restore after test
122+
defer func() {
123+
GitDescribe = origGitDescribe
124+
GitCommit = origGitCommit
125+
VersionPrerelease = origVersionPrerelease
126+
}()
127+
128+
GitDescribe = "v1.2.3-rc1"
129+
GitCommit = "xyz789"
130+
VersionPrerelease = "rc1"
131+
132+
got := getHumanVersion()
133+
// Should not duplicate "rc1" since it's already in GitDescribe
134+
expected := "v1.2.3-rc1 (xyz789)"
135+
if got != expected {
136+
t.Errorf("getHumanVersion() = %v, want %v", got, expected)
137+
}
138+
}
139+
140+
func Test_getHumanVersion_StripSingleQuotes(t *testing.T) {
141+
// Save original values
142+
origGitDescribe := GitDescribe
143+
origGitCommit := GitCommit
144+
origVersionPrerelease := VersionPrerelease
145+
146+
// Restore after test
147+
defer func() {
148+
GitDescribe = origGitDescribe
149+
GitCommit = origGitCommit
150+
VersionPrerelease = origVersionPrerelease
151+
}()
152+
153+
GitDescribe = "'v1.2.3'"
154+
GitCommit = "'commit123'"
155+
VersionPrerelease = ""
156+
157+
got := getHumanVersion()
158+
// Should strip single quotes
159+
if strings.Contains(got, "'") {
160+
t.Errorf("getHumanVersion() = %v, should not contain single quotes", got)
161+
}
162+
expected := "v1.2.3"
163+
if got != expected {
164+
t.Errorf("getHumanVersion() = %v, want %v", got, expected)
165+
}
166+
}
167+
168+
func TestProductName(t *testing.T) {
169+
if ProductName != "yq" {
170+
t.Errorf("ProductName = %v, want yq", ProductName)
171+
}
172+
}
173+
174+
func TestVersionIsSet(t *testing.T) {
175+
if Version == "" {
176+
t.Error("Version should not be empty")
177+
}
178+
if !strings.HasPrefix(Version, "v") {
179+
t.Errorf("Version %v should start with 'v'", Version)
180+
}
181+
}

pkg/yqlib/decoder_uri_test.go

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
//go:build !yq_nouri
2+
3+
package yqlib
4+
5+
import (
6+
"io"
7+
"strings"
8+
"testing"
9+
10+
"github.com/mikefarah/yq/v4/test"
11+
)
12+
13+
func TestUriDecoder_Init(t *testing.T) {
14+
decoder := NewUriDecoder()
15+
reader := strings.NewReader("test")
16+
err := decoder.Init(reader)
17+
test.AssertResult(t, nil, err)
18+
}
19+
20+
func TestUriDecoder_DecodeSimpleString(t *testing.T) {
21+
decoder := NewUriDecoder()
22+
reader := strings.NewReader("hello%20world")
23+
err := decoder.Init(reader)
24+
test.AssertResult(t, nil, err)
25+
26+
node, err := decoder.Decode()
27+
test.AssertResult(t, nil, err)
28+
test.AssertResult(t, "!!str", node.Tag)
29+
test.AssertResult(t, "hello world", node.Value)
30+
}
31+
32+
func TestUriDecoder_DecodeSpecialCharacters(t *testing.T) {
33+
decoder := NewUriDecoder()
34+
reader := strings.NewReader("hello%21%40%23%24%25")
35+
err := decoder.Init(reader)
36+
test.AssertResult(t, nil, err)
37+
38+
node, err := decoder.Decode()
39+
test.AssertResult(t, nil, err)
40+
test.AssertResult(t, "hello!@#$%", node.Value)
41+
}
42+
43+
func TestUriDecoder_DecodeUTF8(t *testing.T) {
44+
decoder := NewUriDecoder()
45+
reader := strings.NewReader("%E2%9C%93%20check")
46+
err := decoder.Init(reader)
47+
test.AssertResult(t, nil, err)
48+
49+
node, err := decoder.Decode()
50+
test.AssertResult(t, nil, err)
51+
test.AssertResult(t, "✓ check", node.Value)
52+
}
53+
54+
func TestUriDecoder_DecodePlusSign(t *testing.T) {
55+
decoder := NewUriDecoder()
56+
reader := strings.NewReader("a+b")
57+
err := decoder.Init(reader)
58+
test.AssertResult(t, nil, err)
59+
60+
node, err := decoder.Decode()
61+
test.AssertResult(t, nil, err)
62+
// Note: url.QueryUnescape does NOT convert + to space
63+
// That's only for form encoding (url.ParseQuery)
64+
test.AssertResult(t, "a b", node.Value)
65+
}
66+
67+
func TestUriDecoder_DecodeEmptyString(t *testing.T) {
68+
decoder := NewUriDecoder()
69+
reader := strings.NewReader("")
70+
err := decoder.Init(reader)
71+
test.AssertResult(t, nil, err)
72+
73+
node, err := decoder.Decode()
74+
test.AssertResult(t, nil, err)
75+
test.AssertResult(t, "", node.Value)
76+
77+
// Second decode should return EOF
78+
node, err = decoder.Decode()
79+
test.AssertResult(t, io.EOF, err)
80+
test.AssertResult(t, (*CandidateNode)(nil), node)
81+
}
82+
83+
func TestUriDecoder_DecodeMultipleCalls(t *testing.T) {
84+
decoder := NewUriDecoder()
85+
reader := strings.NewReader("test")
86+
err := decoder.Init(reader)
87+
test.AssertResult(t, nil, err)
88+
89+
// First decode
90+
node, err := decoder.Decode()
91+
test.AssertResult(t, nil, err)
92+
test.AssertResult(t, "test", node.Value)
93+
94+
// Second decode should return EOF since we've consumed all input
95+
node, err = decoder.Decode()
96+
test.AssertResult(t, io.EOF, err)
97+
test.AssertResult(t, (*CandidateNode)(nil), node)
98+
}
99+
100+
func TestUriDecoder_DecodeInvalidEscape(t *testing.T) {
101+
decoder := NewUriDecoder()
102+
reader := strings.NewReader("test%ZZ")
103+
err := decoder.Init(reader)
104+
test.AssertResult(t, nil, err)
105+
106+
_, err = decoder.Decode()
107+
// Should return an error for invalid escape sequence
108+
if err == nil {
109+
t.Error("Expected error for invalid escape sequence, got nil")
110+
}
111+
}
112+
113+
func TestUriDecoder_DecodeSlashAndQuery(t *testing.T) {
114+
decoder := NewUriDecoder()
115+
reader := strings.NewReader("path%2Fto%2Ffile%3Fquery%3Dvalue")
116+
err := decoder.Init(reader)
117+
test.AssertResult(t, nil, err)
118+
119+
node, err := decoder.Decode()
120+
test.AssertResult(t, nil, err)
121+
test.AssertResult(t, "path/to/file?query=value", node.Value)
122+
}
123+
124+
func TestUriDecoder_DecodePercent(t *testing.T) {
125+
decoder := NewUriDecoder()
126+
reader := strings.NewReader("100%25")
127+
err := decoder.Init(reader)
128+
test.AssertResult(t, nil, err)
129+
130+
node, err := decoder.Decode()
131+
test.AssertResult(t, nil, err)
132+
test.AssertResult(t, "100%", node.Value)
133+
}
134+
135+
func TestUriDecoder_DecodeNoEscaping(t *testing.T) {
136+
decoder := NewUriDecoder()
137+
reader := strings.NewReader("simple_text-123")
138+
err := decoder.Init(reader)
139+
test.AssertResult(t, nil, err)
140+
141+
node, err := decoder.Decode()
142+
test.AssertResult(t, nil, err)
143+
test.AssertResult(t, "simple_text-123", node.Value)
144+
}
145+
146+
// Mock reader that returns an error
147+
type errorReader struct{}
148+
149+
func (e *errorReader) Read(_ []byte) (n int, err error) {
150+
return 0, io.ErrUnexpectedEOF
151+
}
152+
153+
func TestUriDecoder_DecodeReadError(t *testing.T) {
154+
decoder := NewUriDecoder()
155+
err := decoder.Init(&errorReader{})
156+
test.AssertResult(t, nil, err)
157+
158+
_, err = decoder.Decode()
159+
test.AssertResult(t, io.ErrUnexpectedEOF, err)
160+
}

pkg/yqlib/hcl_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package yqlib
44

55
import (
66
"bufio"
7+
"bytes"
78
"fmt"
89
"testing"
910

@@ -543,6 +544,35 @@ func documentHclRoundTripScenario(w *bufio.Writer, s formatScenario) {
543544
writeOrPanic(w, fmt.Sprintf("```hcl\n%v```\n\n", mustProcessFormatScenario(s, NewHclDecoder(), NewHclEncoder(ConfiguredHclPreferences))))
544545
}
545546

547+
func TestHclEncoderPrintDocumentSeparator(t *testing.T) {
548+
encoder := NewHclEncoder(ConfiguredHclPreferences)
549+
var buf bytes.Buffer
550+
writer := bufio.NewWriter(&buf)
551+
552+
err := encoder.PrintDocumentSeparator(writer)
553+
writer.Flush()
554+
555+
test.AssertResult(t, nil, err)
556+
test.AssertResult(t, "", buf.String())
557+
}
558+
559+
func TestHclEncoderPrintLeadingContent(t *testing.T) {
560+
encoder := NewHclEncoder(ConfiguredHclPreferences)
561+
var buf bytes.Buffer
562+
writer := bufio.NewWriter(&buf)
563+
564+
err := encoder.PrintLeadingContent(writer, "some content")
565+
writer.Flush()
566+
567+
test.AssertResult(t, nil, err)
568+
test.AssertResult(t, "", buf.String())
569+
}
570+
571+
func TestHclEncoderCanHandleAliases(t *testing.T) {
572+
encoder := NewHclEncoder(ConfiguredHclPreferences)
573+
test.AssertResult(t, false, encoder.CanHandleAliases())
574+
}
575+
546576
func TestHclFormatScenarios(t *testing.T) {
547577
for _, tt := range hclFormatScenarios {
548578
testHclScenario(t, tt)

0 commit comments

Comments
 (0)