github.com/alexanderthaller/godep@v0.0.0-20141231210904-0baa7ea46402/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 var cases = []struct { 11 path string 12 want string 13 }{ 14 {"C", "C"}, 15 {"D/Godeps/_workspace/src/T", "T"}, 16 {"C/Godeps/_workspace/src/D/Godeps/_workspace/src/T", "T"}, 17 } 18 for _, test := range cases { 19 g := unqualify(test.path) 20 if g != test.want { 21 t.Errorf("qualify(%s) = %s want %s", test.path, g, test.want) 22 } 23 } 24 } 25 26 func TestQualify(t *testing.T) { 27 var cases = []struct { 28 path string 29 want string 30 }{ 31 {"C", "C"}, 32 {"C/P", "C/P"}, 33 {"fmt", "fmt"}, 34 {"DP", "DP"}, 35 {"D", "C/Godeps/_workspace/src/D"}, 36 {"D/P", "C/Godeps/_workspace/src/D/P"}, 37 } 38 for _, test := range cases { 39 g := qualify(test.path, "C", []string{"D"}) 40 if g != test.want { 41 t.Errorf("qualify({C}, %s) = %s want %s", test.path, g, test.want) 42 } 43 } 44 } 45 46 const ( 47 whitespace = `package main 48 49 import "D" 50 51 var ( 52 x int 53 abc int 54 ) 55 ` 56 whitespaceRewritten = `package main 57 58 import "C/Godeps/_workspace/src/D" 59 60 var ( 61 x int 62 abc int 63 ) 64 ` 65 sortOrder = `package main 66 67 import ( 68 "E" 69 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 ) 81 82 func TestRewrite(t *testing.T) { 83 var cases = []struct { 84 cwd string 85 paths []string 86 start []*node 87 want []*node 88 werr bool 89 }{ 90 { // simple case, one dependency 91 cwd: "C", 92 paths: []string{"D"}, 93 start: []*node{ 94 {"C/main.go", pkg("main", "D"), nil}, 95 {"C/Godeps/_workspace/src/D/main.go", pkg("D"), nil}, 96 }, 97 want: []*node{ 98 {"C/main.go", pkg("main", "C/Godeps/_workspace/src/D"), nil}, 99 {"C/Godeps/_workspace/src/D/main.go", pkg("D"), nil}, 100 }, 101 }, 102 { // transitive dep 103 cwd: "C", 104 paths: []string{"D", "T"}, 105 start: []*node{ 106 {"C/main.go", pkg("main", "D"), nil}, 107 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "T"), nil}, 108 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 109 }, 110 want: []*node{ 111 {"C/main.go", pkg("main", "C/Godeps/_workspace/src/D"), nil}, 112 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "C/Godeps/_workspace/src/T"), nil}, 113 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 114 }, 115 }, 116 { // intermediate dep that uses godep save -r 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", "D/Godeps/_workspace/src/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 { // don't qualify standard library and local imports 131 cwd: "C", 132 start: []*node{ 133 {"C/main.go", pkg("main", "fmt", "C/D"), nil}, 134 {"C/D/main.go", pkg("D"), nil}, 135 }, 136 want: []*node{ 137 {"C/main.go", pkg("main", "fmt", "C/D"), nil}, 138 {"C/D/main.go", pkg("D"), nil}, 139 }, 140 }, 141 { // simple case, one dependency, -r=false 142 cwd: "C", 143 start: []*node{ 144 {"C/main.go", pkg("main", "D"), nil}, 145 {"C/Godeps/_workspace/src/D/main.go", pkg("D"), nil}, 146 }, 147 want: []*node{ 148 {"C/main.go", pkg("main", "D"), nil}, 149 {"C/Godeps/_workspace/src/D/main.go", pkg("D"), nil}, 150 }, 151 }, 152 { // transitive dep, -r=false 153 cwd: "C", 154 start: []*node{ 155 {"C/main.go", pkg("main", "D"), nil}, 156 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "T"), nil}, 157 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 158 }, 159 want: []*node{ 160 {"C/main.go", pkg("main", "D"), nil}, 161 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "T"), nil}, 162 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 163 }, 164 }, 165 { // intermediate dep that uses godep save -r, -r=false 166 cwd: "C", 167 start: []*node{ 168 {"C/main.go", pkg("main", "D"), nil}, 169 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "D/Godeps/_workspace/src/T"), nil}, 170 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 171 }, 172 want: []*node{ 173 {"C/main.go", pkg("main", "D"), nil}, 174 {"C/Godeps/_workspace/src/D/main.go", pkg("D", "T"), nil}, 175 {"C/Godeps/_workspace/src/T/main.go", pkg("T"), nil}, 176 }, 177 }, 178 { // whitespace 179 cwd: "C", 180 paths: []string{"D"}, 181 start: []*node{ 182 {"C/main.go", whitespace, nil}, 183 }, 184 want: []*node{ 185 {"C/main.go", whitespaceRewritten, nil}, 186 }, 187 }, 188 { // sort after rewrite 189 cwd: "C", 190 paths: []string{"D", "E"}, 191 start: []*node{ 192 {"C/main.go", sortOrder, nil}, 193 }, 194 want: []*node{ 195 {"C/main.go", sortOrderRewritten, nil}, 196 }, 197 }, 198 } 199 200 const gopath = "godeptest" 201 defer os.RemoveAll(gopath) 202 for _, test := range cases { 203 err := os.RemoveAll(gopath) 204 if err != nil { 205 t.Fatal(err) 206 } 207 src := filepath.Join(gopath, "src") 208 makeTree(t, &node{src, "", test.start}, "") 209 err = rewriteTree(filepath.Join(src, test.cwd), test.cwd, test.paths) 210 if g := err != nil; g != test.werr { 211 t.Errorf("save err = %v (%v) want %v", g, err, test.werr) 212 } 213 214 checkTree(t, &node{src, "", test.want}) 215 } 216 }