github.com/golang/dep@v0.5.4/gps/version_test.go (about)

     1  // Copyright 2017 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package gps
     6  
     7  import "testing"
     8  
     9  func TestVersionSorts(t *testing.T) {
    10  	rev := Revision("flooboofoobooo")
    11  	v1 := NewBranch("master").Pair(rev)
    12  	v2 := NewBranch("test").Pair(rev)
    13  	v3 := NewVersion("1.0.0").Pair(rev)
    14  	v4 := NewVersion("1.0.1").Pair(rev)
    15  	v5 := NewVersion("v2.0.5").Pair(rev)
    16  	v6 := NewVersion("2.0.5.2").Pair(rev)
    17  	v7 := newDefaultBranch("unwrapped").Pair(rev)
    18  	v8 := NewVersion("20.0.5.2").Pair(rev)
    19  	v9 := NewVersion("v1.5.5-beta.4").Pair(rev)
    20  	v10 := NewVersion("v3.0.1-alpha.1").Pair(rev)
    21  
    22  	start := []Version{
    23  		v1,
    24  		v2,
    25  		v3,
    26  		v4,
    27  		v5,
    28  		v6,
    29  		v7,
    30  		v8,
    31  		v9,
    32  		v10,
    33  		rev,
    34  	}
    35  
    36  	down := make([]Version, len(start))
    37  	copy(down, start)
    38  	up := make([]Version, len(start))
    39  	copy(up, start)
    40  
    41  	edown := []Version{
    42  		v3, v4, v5, // semvers
    43  		v9, v10, // prerelease semver
    44  		v7, v1, v2, // floating/branches
    45  		v6, v8, // plain versions
    46  		rev, // revs
    47  	}
    48  
    49  	eup := []Version{
    50  		v5, v4, v3, // semvers
    51  		v10, v9, // prerelease semver
    52  		v7, v1, v2, // floating/branches
    53  		v6, v8, // plain versions
    54  		rev, // revs
    55  	}
    56  
    57  	SortForUpgrade(up)
    58  	var wrong []int
    59  	for k, v := range up {
    60  		if eup[k] != v {
    61  			wrong = append(wrong, k)
    62  			t.Errorf("Expected version %s in position %v on upgrade sort, but got %s", eup[k], k, v)
    63  		}
    64  	}
    65  	if len(wrong) > 0 {
    66  		// Just helps with readability a bit
    67  		t.Errorf("Upgrade sort positions with wrong versions: %v", wrong)
    68  	}
    69  
    70  	SortForDowngrade(down)
    71  	wrong = wrong[:0]
    72  	for k, v := range down {
    73  		if edown[k] != v {
    74  			wrong = append(wrong, k)
    75  			t.Errorf("Expected version %s in position %v on downgrade sort, but got %s", edown[k], k, v)
    76  		}
    77  	}
    78  	if len(wrong) > 0 {
    79  		// Just helps with readability a bit
    80  		t.Errorf("Downgrade sort positions with wrong versions: %v", wrong)
    81  	}
    82  
    83  	// Now make sure we sort back the other way correctly...just because
    84  	SortForUpgrade(down)
    85  	wrong = wrong[:0]
    86  	for k, v := range down {
    87  		if eup[k] != v {
    88  			wrong = append(wrong, k)
    89  			t.Errorf("Expected version %s in position %v on down-then-upgrade sort, but got %s", eup[k], k, v)
    90  		}
    91  	}
    92  	if len(wrong) > 0 {
    93  		// Just helps with readability a bit
    94  		t.Errorf("Down-then-upgrade sort positions with wrong versions: %v", wrong)
    95  	}
    96  
    97  	// Now make sure we sort back the other way correctly...just because
    98  	SortForDowngrade(up)
    99  	wrong = wrong[:0]
   100  	for k, v := range up {
   101  		if edown[k] != v {
   102  			wrong = append(wrong, k)
   103  			t.Errorf("Expected version %s in position %v on up-then-downgrade sort, but got %s", edown[k], k, v)
   104  		}
   105  	}
   106  	if len(wrong) > 0 {
   107  		// Just helps with readability a bit
   108  		t.Fatalf("Up-then-downgrade sort positions with wrong versions: %v", wrong)
   109  	}
   110  
   111  	///////////
   112  	// Repeat for PairedVersion slices & sorts
   113  
   114  	pdown, pup := make([]PairedVersion, 0, len(start)), make([]PairedVersion, 0, len(start))
   115  	for _, v := range start {
   116  		if _, ok := v.(Revision); ok {
   117  			continue
   118  		}
   119  		pdown = append(pdown, v.(PairedVersion))
   120  		pup = append(pup, v.(PairedVersion))
   121  	}
   122  
   123  	pedown, peup := make([]PairedVersion, 0, len(edown)), make([]PairedVersion, 0, len(eup))
   124  	for _, v := range edown {
   125  		if _, ok := v.(Revision); ok {
   126  			continue
   127  		}
   128  		pedown = append(pedown, v.(PairedVersion))
   129  	}
   130  	for _, v := range eup {
   131  		if _, ok := v.(Revision); ok {
   132  			continue
   133  		}
   134  		peup = append(peup, v.(PairedVersion))
   135  	}
   136  
   137  	SortPairedForUpgrade(pup)
   138  	for k, v := range pup {
   139  		if peup[k] != v {
   140  			wrong = append(wrong, k)
   141  			t.Errorf("Expected version %s in position %v on upgrade sort, but got %s", peup[k], k, v)
   142  		}
   143  	}
   144  	if len(wrong) > 0 {
   145  		// Just helps with readability a bit
   146  		t.Errorf("Upgrade sort positions with wrong versions: %v", wrong)
   147  	}
   148  
   149  	SortPairedForDowngrade(pdown)
   150  	wrong = wrong[:0]
   151  	for k, v := range pdown {
   152  		if pedown[k] != v {
   153  			wrong = append(wrong, k)
   154  			t.Errorf("Expected version %s in position %v on downgrade sort, but got %s", pedown[k], k, v)
   155  		}
   156  	}
   157  	if len(wrong) > 0 {
   158  		// Just helps with readability a bit
   159  		t.Errorf("Downgrade sort positions with wrong versions: %v", wrong)
   160  	}
   161  
   162  	// Now make sure we sort back the other way correctly...just because
   163  	SortPairedForUpgrade(pdown)
   164  	wrong = wrong[:0]
   165  	for k, v := range pdown {
   166  		if peup[k] != v {
   167  			wrong = append(wrong, k)
   168  			t.Errorf("Expected version %s in position %v on down-then-upgrade sort, but got %s", peup[k], k, v)
   169  		}
   170  	}
   171  	if len(wrong) > 0 {
   172  		// Just helps with readability a bit
   173  		t.Errorf("Down-then-upgrade sort positions with wrong versions: %v", wrong)
   174  	}
   175  
   176  	// Now make sure we sort back the other way correctly...just because
   177  	SortPairedForDowngrade(pup)
   178  	wrong = wrong[:0]
   179  	for k, v := range pup {
   180  		if pedown[k] != v {
   181  			wrong = append(wrong, k)
   182  			t.Errorf("Expected version %s in position %v on up-then-downgrade sort, but got %s", pedown[k], k, v)
   183  		}
   184  	}
   185  	if len(wrong) > 0 {
   186  		// Just helps with readability a bit
   187  		t.Errorf("Up-then-downgrade sort positions with wrong versions: %v", wrong)
   188  	}
   189  }