github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/utils/semver/semver_test.go (about)

     1  package semver_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/lmorg/murex/test/count"
     7  	"github.com/lmorg/murex/utils/json"
     8  	"github.com/lmorg/murex/utils/semver"
     9  )
    10  
    11  func TestParse(t *testing.T) {
    12  	tests := []struct {
    13  		String   string
    14  		Expected semver.Version
    15  		Error    bool
    16  	}{
    17  		{
    18  			String: "1",
    19  			Expected: semver.Version{
    20  				Major: 1,
    21  			},
    22  		},
    23  		{
    24  			String: "1.2",
    25  			Expected: semver.Version{
    26  				Major: 1,
    27  				Minor: 2,
    28  			},
    29  		},
    30  		{
    31  			String: "1.2.3",
    32  			Expected: semver.Version{
    33  				Major: 1,
    34  				Minor: 2,
    35  				Patch: 3,
    36  			},
    37  		},
    38  		{
    39  			String: "1.2.3.4",
    40  			Error:  true,
    41  		},
    42  	}
    43  
    44  	count.Tests(t, len(tests))
    45  
    46  	for i, test := range tests {
    47  		actual, err := semver.Parse(test.String)
    48  		if (err != nil) != test.Error {
    49  			t.Errorf("Unexpected error in test %d:", i)
    50  			t.Logf("  Expected: %v", test.Expected)
    51  			t.Logf("  Actual:   %v", *actual)
    52  			t.Logf("  exp err:  %v", test.Error)
    53  			t.Logf("  act err:  %v", err)
    54  		}
    55  
    56  		if actual == nil {
    57  			continue
    58  		}
    59  
    60  		expS := json.LazyLogging(test.Expected)
    61  		actS := json.LazyLogging(*actual)
    62  
    63  		if expS != actS {
    64  			t.Errorf("Expected doesn't match actual in test %d:", i)
    65  			t.Logf("  Expected: %v", expS)
    66  			t.Logf("  Actual:   %v", actS)
    67  			t.Logf("  exp err:  %v", test.Error)
    68  			t.Logf("  act err:  %v", err)
    69  		}
    70  	}
    71  }
    72  
    73  func TestCompare(t *testing.T) {
    74  	tests := []struct {
    75  		Version    string
    76  		Comparison string
    77  		Expected   bool
    78  		Error      bool
    79  	}{
    80  		{
    81  			Version:    "1.2.3",
    82  			Comparison: "> 0",
    83  			Expected:   true,
    84  		},
    85  		{
    86  			Version:    "1.2.3",
    87  			Comparison: ">= 0",
    88  			Expected:   true,
    89  		},
    90  		{
    91  			Version:    "1.2.3",
    92  			Comparison: "= 0",
    93  			Expected:   false,
    94  		},
    95  		{
    96  			Version:    "1.2.3",
    97  			Comparison: "<= 0",
    98  			Expected:   false,
    99  		},
   100  		{
   101  			Version:    "1.2.3",
   102  			Comparison: "< 0",
   103  			Expected:   false,
   104  		},
   105  		{
   106  			Version:    "1.2.3",
   107  			Comparison: "> 1",
   108  			Expected:   false,
   109  		},
   110  		{
   111  			Version:    "1.2.3",
   112  			Comparison: ">= 1",
   113  			Expected:   true,
   114  		},
   115  		{
   116  			Version:    "1.2.3",
   117  			Comparison: "= 1",
   118  			Expected:   true,
   119  		},
   120  		{
   121  			Version:    "1.2.3",
   122  			Comparison: "<= 1",
   123  			Expected:   true,
   124  		},
   125  		{
   126  			Version:    "1.2.3",
   127  			Comparison: "< 1",
   128  			Expected:   false,
   129  		},
   130  		{
   131  			Version:    "1.2.3",
   132  			Comparison: "> 2",
   133  			Expected:   false,
   134  		},
   135  		{
   136  			Version:    "1.2.3",
   137  			Comparison: ">= 2",
   138  			Expected:   false,
   139  		},
   140  		{
   141  			Version:    "1.2.3",
   142  			Comparison: "= 2",
   143  			Expected:   false,
   144  		},
   145  		{
   146  			Version:    "1.2.3",
   147  			Comparison: "<= 2",
   148  			Expected:   true,
   149  		},
   150  		{
   151  			Version:    "1.2.3",
   152  			Comparison: "< 2",
   153  			Expected:   true,
   154  		},
   155  		///
   156  		{
   157  			Version:    "1.2.3",
   158  			Comparison: "> 1.1",
   159  			Expected:   true,
   160  		},
   161  		{
   162  			Version:    "1.2.3",
   163  			Comparison: ">= 1.1",
   164  			Expected:   true,
   165  		},
   166  		{
   167  			Version:    "1.2.3",
   168  			Comparison: "= 1.1",
   169  			Expected:   false,
   170  		},
   171  		{
   172  			Version:    "1.2.3",
   173  			Comparison: "<= 1.1",
   174  			Expected:   false,
   175  		},
   176  		{
   177  			Version:    "1.2.3",
   178  			Comparison: "< 1.1",
   179  			Expected:   false,
   180  		},
   181  		{
   182  			Version:    "1.2.3",
   183  			Comparison: "> 1.2",
   184  			Expected:   false,
   185  		},
   186  		{
   187  			Version:    "1.2.3",
   188  			Comparison: ">= 1.2",
   189  			Expected:   true,
   190  		},
   191  		{
   192  			Version:    "1.2.3",
   193  			Comparison: "= 1.2",
   194  			Expected:   true,
   195  		},
   196  		{
   197  			Version:    "1.2.3",
   198  			Comparison: "<= 1.2",
   199  			Expected:   true,
   200  		},
   201  		{
   202  			Version:    "1.2.3",
   203  			Comparison: "< 1.2",
   204  			Expected:   false,
   205  		},
   206  		{
   207  			Version:    "1.2.3",
   208  			Comparison: "> 1.3",
   209  			Expected:   false,
   210  		},
   211  		{
   212  			Version:    "1.2.3",
   213  			Comparison: ">= 2.3",
   214  			Expected:   false,
   215  		},
   216  		{
   217  			Version:    "1.2.3",
   218  			Comparison: "= 2.3",
   219  			Expected:   false,
   220  		},
   221  		{
   222  			Version:    "1.2.3",
   223  			Comparison: "<= 2.3",
   224  			Expected:   true,
   225  		},
   226  		{
   227  			Version:    "1.2.3",
   228  			Comparison: "< 2.3",
   229  			Expected:   true,
   230  		},
   231  		///
   232  		{
   233  			Version:    "1.2.3",
   234  			Comparison: "> 1.2.2",
   235  			Expected:   true,
   236  		},
   237  		{
   238  			Version:    "1.2.3",
   239  			Comparison: ">= 1.2.2",
   240  			Expected:   true,
   241  		},
   242  		{
   243  			Version:    "1.2.3",
   244  			Comparison: "= 1.2.2",
   245  			Expected:   false,
   246  		},
   247  		{
   248  			Version:    "1.2.3",
   249  			Comparison: "<= 1.2.2",
   250  			Expected:   false,
   251  		},
   252  		{
   253  			Version:    "1.2.3",
   254  			Comparison: "< 1.2.2",
   255  			Expected:   false,
   256  		},
   257  		{
   258  			Version:    "1.2.3",
   259  			Comparison: "> 1.2.3",
   260  			Expected:   false,
   261  		},
   262  		{
   263  			Version:    "1.2.3",
   264  			Comparison: ">= 1.2.3",
   265  			Expected:   true,
   266  		},
   267  		{
   268  			Version:    "1.2.3",
   269  			Comparison: "= 1.2.3",
   270  			Expected:   true,
   271  		},
   272  		{
   273  			Version:    "1.2.3",
   274  			Comparison: "<= 1.2.3",
   275  			Expected:   true,
   276  		},
   277  		{
   278  			Version:    "1.2.3",
   279  			Comparison: "< 1.2.3",
   280  			Expected:   false,
   281  		},
   282  		{
   283  			Version:    "1.2.3",
   284  			Comparison: "> 1.2.4",
   285  			Expected:   false,
   286  		},
   287  		{
   288  			Version:    "1.2.3",
   289  			Comparison: ">= 1.2.4",
   290  			Expected:   false,
   291  		},
   292  		{
   293  			Version:    "1.2.3",
   294  			Comparison: "= 1.2.4",
   295  			Expected:   false,
   296  		},
   297  		{
   298  			Version:    "1.2.3",
   299  			Comparison: "<= 1.2.4",
   300  			Expected:   true,
   301  		},
   302  		{
   303  			Version:    "1.2.3",
   304  			Comparison: "< 1.2.4",
   305  			Expected:   true,
   306  		},
   307  	}
   308  
   309  	count.Tests(t, len(tests))
   310  
   311  	for i, test := range tests {
   312  		actual, err := semver.Compare(test.Version, test.Comparison)
   313  		if (err != nil) != test.Error || test.Expected != actual {
   314  			t.Errorf("Unexpected result from test %d:", i)
   315  			t.Logf("  Version:    '%s'", test.Version)
   316  			t.Logf("  Comparison: '%s'", test.Comparison)
   317  			t.Logf("  Expected:   %v", test.Expected)
   318  			t.Logf("  Actual:     %v", actual)
   319  			t.Logf("  exp err:    %v", test.Error)
   320  			t.Logf("  act err:    %v", err)
   321  		}
   322  	}
   323  }