@@ -2,6 +2,7 @@ package cli
22
33import (
44 "bytes"
5+ "runtime/debug"
56 "testing"
67
78 "github.com/stretchr/testify/assert"
@@ -36,6 +37,115 @@ func TestVersionCommand_JSON(t *testing.T) {
3637 require .NoError (t , err )
3738}
3839
40+ func TestInitVersionFromBuildInfo (t * testing.T ) {
41+ tests := []struct {
42+ name string
43+ initialVersion string
44+ buildInfo * debug.BuildInfo
45+ buildInfoOk bool
46+ expectedVersion string
47+ expectedCommit string
48+ expectedDate string
49+ }{
50+ {
51+ name : "ldflags already set" ,
52+ initialVersion : "v1.0.0" ,
53+ buildInfo : & debug.BuildInfo {Main : debug.Module {Version : "v2.0.0" }},
54+ buildInfoOk : true ,
55+ expectedVersion : "v1.0.0" ,
56+ expectedCommit : "none" ,
57+ expectedDate : "unknown" ,
58+ },
59+ {
60+ name : "build info unavailable" ,
61+ initialVersion : "dev" ,
62+ buildInfo : nil ,
63+ buildInfoOk : false ,
64+ expectedVersion : "dev" ,
65+ expectedCommit : "none" ,
66+ expectedDate : "unknown" ,
67+ },
68+ {
69+ name : "go install with version and vcs info" ,
70+ initialVersion : "dev" ,
71+ buildInfo : & debug.BuildInfo {
72+ Main : debug.Module {Version : "v0.1.1" },
73+ Settings : []debug.BuildSetting {
74+ {Key : "vcs.revision" , Value : "abc123def456" },
75+ {Key : "vcs.time" , Value : "2026-01-15T10:30:00Z" },
76+ },
77+ },
78+ buildInfoOk : true ,
79+ expectedVersion : "v0.1.1" ,
80+ expectedCommit : "abc123def456" ,
81+ expectedDate : "2026-01-15T10:30:00Z" ,
82+ },
83+ {
84+ name : "devel version is ignored" ,
85+ initialVersion : "dev" ,
86+ buildInfo : & debug.BuildInfo {
87+ Main : debug.Module {Version : "(devel)" },
88+ Settings : []debug.BuildSetting {
89+ {Key : "vcs.revision" , Value : "abc123" },
90+ },
91+ },
92+ buildInfoOk : true ,
93+ expectedVersion : "dev" ,
94+ expectedCommit : "abc123" ,
95+ expectedDate : "unknown" ,
96+ },
97+ {
98+ name : "version set but no vcs info" ,
99+ initialVersion : "dev" ,
100+ buildInfo : & debug.BuildInfo {
101+ Main : debug.Module {Version : "v0.2.0" },
102+ },
103+ buildInfoOk : true ,
104+ expectedVersion : "v0.2.0" ,
105+ expectedCommit : "none" ,
106+ expectedDate : "unknown" ,
107+ },
108+ {
109+ name : "empty vcs values are ignored" ,
110+ initialVersion : "dev" ,
111+ buildInfo : & debug.BuildInfo {
112+ Main : debug.Module {Version : "v0.3.0" },
113+ Settings : []debug.BuildSetting {
114+ {Key : "vcs.revision" , Value : "" },
115+ {Key : "vcs.time" , Value : "" },
116+ },
117+ },
118+ buildInfoOk : true ,
119+ expectedVersion : "v0.3.0" ,
120+ expectedCommit : "none" ,
121+ expectedDate : "unknown" ,
122+ },
123+ }
124+
125+ for _ , tt := range tests {
126+ t .Run (tt .name , func (t * testing.T ) {
127+ // Save and restore globals
128+ origVersion , origCommit , origDate := Version , Commit , Date
129+ t .Cleanup (func () {
130+ Version , Commit , Date = origVersion , origCommit , origDate
131+ })
132+
133+ Version = tt .initialVersion
134+ Commit = "none"
135+ Date = "unknown"
136+
137+ reader := func () (* debug.BuildInfo , bool ) {
138+ return tt .buildInfo , tt .buildInfoOk
139+ }
140+ initVersionFromBuildInfo (reader )
141+
142+ assert .Equal (t , tt .expectedVersion , Version )
143+ assert .Equal (t , tt .expectedCommit , Commit )
144+ assert .Equal (t , tt .expectedDate , Date )
145+ })
146+ }
147+ }
148+
39149func TestRootCommand_Help (t * testing.T ) {
40150 cmd := NewRootCmd ()
41151 buf := new (bytes.Buffer )
0 commit comments