version_test.go raw

   1  package goenv
   2  
   3  import "testing"
   4  
   5  func TestParse(t *testing.T) {
   6  	tests := []struct {
   7  		v       string
   8  		major   int
   9  		minor   int
  10  		patch   int
  11  		wantErr bool
  12  	}{
  13  		{"", 0, 0, 0, true},
  14  		{"go", 0, 0, 0, true},
  15  		{"go1", 0, 0, 0, true},
  16  		{"go.0", 0, 0, 0, true},
  17  		{"go1.0", 1, 0, 0, false},
  18  		{"go1.1", 1, 1, 0, false},
  19  		{"go1.23", 1, 23, 0, false},
  20  		{"go1.23.5", 1, 23, 5, false},
  21  		{"go1.23.5-rc6", 1, 23, 5, false},
  22  		{"go2.0", 2, 0, 0, false},
  23  		{"go2.0.15", 2, 0, 15, false},
  24  		{"devel go1.24-f99f5da18f Thu Nov 14 22:29:26 2024 +0000 darwin/arm64", 1, 24, 0, false},
  25  	}
  26  	for _, tt := range tests {
  27  		t.Run(tt.v, func(t *testing.T) {
  28  			major, minor, patch, err := Parse(tt.v)
  29  			if err == nil && tt.wantErr {
  30  				t.Errorf("Parse(%q): expected err != nil", tt.v)
  31  			}
  32  			if err != nil && !tt.wantErr {
  33  				t.Errorf("Parse(%q): expected err == nil", tt.v)
  34  			}
  35  			if major != tt.major || minor != tt.minor || patch != tt.patch {
  36  				t.Errorf("Parse(%q): expected %d, %d, %d, nil; got %d, %d, %d, %v",
  37  					tt.v, tt.major, tt.minor, tt.patch, major, minor, patch, err)
  38  			}
  39  		})
  40  	}
  41  }
  42  
  43  func TestCompare(t *testing.T) {
  44  	tests := []struct {
  45  		a    string
  46  		b    string
  47  		want int
  48  	}{
  49  		{"", "", 0},
  50  		{"go0", "go0", 0},
  51  		{"go0", "go1", -1},
  52  		{"go1", "go0", 1},
  53  		{"go1", "go2", -1},
  54  		{"go2", "go1", 1},
  55  		{"go1.1", "go1.2", -1},
  56  		{"go1.2", "go1.1", 1},
  57  		{"go1.1.0", "go1.2.0", -1},
  58  		{"go1.2.0", "go1.1.0", 1},
  59  		{"go1.2.0", "go2.3.0", -1},
  60  		{"go1.23.2", "go1.23.10", -1},
  61  		{"go0.1.22", "go1.23.101", -1},
  62  	}
  63  	for _, tt := range tests {
  64  		t.Run(tt.a+" "+tt.b, func(t *testing.T) {
  65  			got := Compare(tt.a, tt.b)
  66  			if got != tt.want {
  67  				t.Errorf("Compare(%q, %q): expected %d; got %d",
  68  					tt.a, tt.b, tt.want, got)
  69  			}
  70  		})
  71  	}
  72  }
  73