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 5package gps 6 7import "testing" 8 9func 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} 190