gopkg.in/tools/godep.v45@v45.0.0-20151228215228-7e51f1a9c00c/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  }