gopkg.in/tools/godep.v70@v70.0.0-20160520184947-56b9657fec2f/rewrite_test.go (about) 1 package main 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 ) 8 9 func TestUnqualify(t *testing.T) { 10 setGlobals(false) 11 var cases = []struct { 12 path string 13 want string 14 }{ 15 {"C", "C"}, 16 {"D/Godeps/_workspace/src/T", "T"}, 17 {"C/Godeps/_workspace/src/D/Godeps/_workspace/src/T", "T"}, 18 } 19 for _, test := range cases { 20 g := unqualify(test.path) 21 if g != test.want { 22 t.Errorf("qualify(%s) = %s want %s", test.path, g, test.want) 23 } 24 } 25 } 26 27 func TestQualify(t *testing.T) { 28 var cases = []struct { 29 path string 30 want string 31 }{ 32 {"C", "C"}, 33 {"C/P", "C/P"}, 34 {"fmt", "fmt"}, 35 {"DP", "DP"}, 36 {"D", "C/Godeps/_workspace/src/D"}, 37 {"D/P", "C/Godeps/_workspace/src/D/P"}, 38 } 39 for _, test := range cases { 40 g := qualify(test.path, "C", []string{"D"}) 41 if g != test.want { 42 t.Errorf("qualify({C}, %s) = %s want %s", test.path, g, test.want) 43 } 44 } 45 } 46 47 const ( 48 whitespace = `package main 49 50 import "D" 51 52 var ( 53 x int 54 abc int 55 ) 56 ` 57 whitespaceRewritten = `package main 58 59 import "C/Godeps/_workspace/src/D" 60 61 var ( 62 x int 63 abc int 64 ) 65 ` 66 sortOrder = `package main 67 68 import ( 69 "E" 70 "C/Godeps/_workspace/src/D" 71 ) 72 ` 73 sortOrderRewritten = `package main 74 75 import ( 76 "C/Godeps/_workspace/src/D" 77 "C/Godeps/_workspace/src/E" 78 ) 79 ` 80 sortOrderPreserveComment = `package main 81 82 import ( 83 "C/Godeps/_workspace/src/E" // src E 84 "D" // src D 85 ) 86 ` 87 sortOrderPreserveCommentRewritten = `package main 88 89 import ( 90 "C/Godeps/_workspace/src/D" // src D 91 "C/Godeps/_workspace/src/E" // src E 92 ) 93 ` 94 ) 95 96 func TestRewrite(t *testing.T) { 97 var cases = []struct { 98 cwd string 99 paths []string 100 start []*node 101 want []*node 102 werr bool 103 }{ 104 { // simple case, one dependency 105 cwd: "C", 106 paths: []string{"D"}, 107 start: []*node{ 108 {"C/main.go", pkg("main", "D"), nil}, 109 {"C/Godeps/_workspace/src/D/main.go", pkg("D"), nil}, 110 }, 111 want: []*node{ 112 {"C/main.go", pkg("main", "C/Godeps/_workspace/src/D"), nil}, 113 {"C/Godeps/_workspace/src/D/main.go", pkg("D"), nil}, 114 }, 115 }, 116 { // transitive dep 117 cwd: "C", 118 paths: []string{"D", "T"}, 119 start: []*node{ 120 {"C/main.go", pkg("main", "D"), nil}, 121 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "T"), nil}, 122 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 123 }, 124 want: []*node{ 125 {"C/main.go", pkg("main", "C/Godeps/_workspace/src/D"), nil}, 126 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "C/Godeps/_workspace/src/T"), nil}, 127 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 128 }, 129 }, 130 { // intermediate dep that uses godep save -r 131 cwd: "C", 132 paths: []string{"D", "T"}, 133 start: []*node{ 134 {"C/main.go", pkg("main", "D"), nil}, 135 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "D/Godeps/_workspace/src/T"), nil}, 136 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 137 }, 138 want: []*node{ 139 {"C/main.go", pkg("main", "C/Godeps/_workspace/src/D"), nil}, 140 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "C/Godeps/_workspace/src/T"), nil}, 141 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 142 }, 143 }, 144 { // don't qualify standard library and local imports 145 cwd: "C", 146 start: []*node{ 147 {"C/main.go", pkg("main", "fmt", "C/D"), nil}, 148 {"C/D/main.go", pkg("D"), nil}, 149 }, 150 want: []*node{ 151 {"C/main.go", pkg("main", "fmt", "C/D"), nil}, 152 {"C/D/main.go", pkg("D"), nil}, 153 }, 154 }, 155 { // simple case, one dependency, -r=false 156 cwd: "C", 157 start: []*node{ 158 {"C/main.go", pkg("main", "D"), nil}, 159 {"C/Godeps/_workspace/src/D/main.go", pkg("D"), nil}, 160 }, 161 want: []*node{ 162 {"C/main.go", pkg("main", "D"), nil}, 163 {"C/Godeps/_workspace/src/D/main.go", pkg("D"), nil}, 164 }, 165 }, 166 { // transitive dep, -r=false 167 cwd: "C", 168 start: []*node{ 169 {"C/main.go", pkg("main", "D"), nil}, 170 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "T"), nil}, 171 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 172 }, 173 want: []*node{ 174 {"C/main.go", pkg("main", "D"), nil}, 175 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "T"), nil}, 176 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 177 }, 178 }, 179 { // intermediate dep that uses godep save -r, -r=false 180 cwd: "C", 181 start: []*node{ 182 {"C/main.go", pkg("main", "D"), nil}, 183 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "D/Godeps/_workspace/src/T"), nil}, 184 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 185 }, 186 want: []*node{ 187 {"C/main.go", pkg("main", "D"), nil}, 188 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "T"), nil}, 189 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 190 }, 191 }, 192 { // whitespace 193 cwd: "C", 194 paths: []string{"D"}, 195 start: []*node{ 196 {"C/main.go", whitespace, nil}, 197 }, 198 want: []*node{ 199 {"C/main.go", whitespaceRewritten, nil}, 200 }, 201 }, 202 { // sort after rewrite 203 cwd: "C", 204 paths: []string{"D", "E"}, 205 start: []*node{ 206 {"C/main.go", sortOrder, nil}, 207 }, 208 want: []*node{ 209 {"C/main.go", sortOrderRewritten, nil}, 210 }, 211 }, 212 { // sort after rewrite 213 cwd: "C", 214 paths: []string{"D", "E"}, 215 start: []*node{ 216 {"C/main.go", sortOrderPreserveComment, nil}, 217 }, 218 want: []*node{ 219 {"C/main.go", sortOrderPreserveCommentRewritten, nil}, 220 }, 221 }, 222 { // testdata directory is copied unmodified. 223 cwd: "C", 224 paths: []string{"D"}, 225 start: []*node{ 226 {"C/main.go", pkg("main", "D"), nil}, 227 {"C/testdata", "", 228 []*node{ 229 {"badpkg.go", "//", nil}, 230 }, 231 }, 232 }, 233 want: []*node{ 234 {"C/main.go", pkg("main", "C/Godeps/_workspace/src/D"), nil}, 235 {"C/testdata", "", 236 []*node{ 237 {"badpkg.go", "//", nil}, 238 }, 239 }, 240 }, 241 }, 242 } 243 244 const gopath = "godeptest" 245 defer os.RemoveAll(gopath) 246 for pos, test := range cases { 247 setGlobals(false) 248 err := os.RemoveAll(gopath) 249 if err != nil { 250 t.Fatal(err) 251 } 252 src := filepath.Join(gopath, "src") 253 makeTree(t, &node{src, "", test.start}, "") 254 err = rewriteTree(filepath.Join(src, test.cwd), test.cwd, test.paths) 255 if g := err != nil; g != test.werr { 256 t.Errorf("save err = %v (%v) want %v", g, err, test.werr) 257 } 258 tempFiles, err := filepath.Glob(filepath.Join(src, test.cwd) + "/*.temp") 259 if err != nil { 260 t.Errorf("Error while running glob: %s", err.Error()) 261 } 262 if len(tempFiles) != 0 { 263 t.Errorf("Unexpected tempfiles: %+v", tempFiles) 264 } 265 266 checkTree(t, pos, &node{src, "", test.want}) 267 } 268 }