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  }