@@ -205,3 +205,61 @@ func TestHomedir(t *testing.T) {
205205 require .NotEmpty (t , home .AsString ())
206206 require .True (t , filepath .IsAbs (home .AsString ()))
207207}
208+
209+ func TestSemverCmp (t * testing.T ) {
210+ type testCase struct {
211+ version cty.Value
212+ constraint cty.Value
213+ want cty.Value
214+ wantErr bool
215+ }
216+ tests := map [string ]testCase {
217+ "valid constraint satisfied" : {
218+ version : cty .StringVal ("1.2.3" ),
219+ constraint : cty .StringVal (">= 1.0.0" ),
220+ want : cty .BoolVal (true ),
221+ },
222+ "valid constraint not satisfied" : {
223+ version : cty .StringVal ("2.1.0" ),
224+ constraint : cty .StringVal ("< 2.0.0" ),
225+ want : cty .BoolVal (false ),
226+ },
227+ "valid constraint satisfied without patch" : {
228+ version : cty .StringVal ("3.22" ),
229+ constraint : cty .StringVal (">= 3.20" ),
230+ want : cty .BoolVal (true ),
231+ },
232+ "invalid version" : {
233+ version : cty .StringVal ("not-a-version" ),
234+ constraint : cty .StringVal (">= 1.0.0" ),
235+ wantErr : true ,
236+ },
237+ "invalid constraint" : {
238+ version : cty .StringVal ("1.2.3" ),
239+ constraint : cty .StringVal ("not-a-constraint" ),
240+ wantErr : true ,
241+ },
242+ "empty version" : {
243+ version : cty .StringVal ("" ),
244+ constraint : cty .StringVal (">= 1.0.0" ),
245+ wantErr : true ,
246+ },
247+ "empty constraint" : {
248+ version : cty .StringVal ("1.2.3" ),
249+ constraint : cty .StringVal ("" ),
250+ wantErr : true ,
251+ },
252+ }
253+ for name , test := range tests {
254+ name , test := name , test
255+ t .Run (name , func (t * testing.T ) {
256+ got , err := semvercmpFunc ().Call ([]cty.Value {test .version , test .constraint })
257+ if test .wantErr {
258+ require .Error (t , err )
259+ } else {
260+ require .NoError (t , err )
261+ require .Equal (t , test .want , got )
262+ }
263+ })
264+ }
265+ }
0 commit comments