github.com/taylorchu/generic@v0.0.0-20171113184323-cd81575befa2/rewrite/helper_test.go (about)

     1  package rewrite
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"io/ioutil"
     7  	"os"
     8  	"path/filepath"
     9  	"testing"
    10  
    11  	"github.com/pmezard/go-difflib/difflib"
    12  )
    13  
    14  func testRewritePackage(t *testing.T, c *Config, expect string) {
    15  	testRewritePackageWithInput(t, c, "", expect)
    16  }
    17  
    18  func testRewritePackageWithInput(t *testing.T, c *Config, input, expect string) {
    19  	const dirname = "tmp"
    20  	err := os.MkdirAll(dirname, 0777)
    21  	if err != nil {
    22  		t.Fatal(err)
    23  	}
    24  	defer os.RemoveAll(dirname)
    25  
    26  	if input != "" {
    27  		err = copyDir(dirname, input)
    28  		if err != nil {
    29  			t.Fatal(err)
    30  		}
    31  	}
    32  
    33  	os.Setenv("GOPACKAGE", "GOPACKAGE")
    34  
    35  	err = os.Chdir(dirname)
    36  	if err != nil {
    37  		t.Fatal(err)
    38  	}
    39  
    40  	err = c.RewritePackage()
    41  	os.Chdir("..")
    42  	if err != nil {
    43  		t.Fatal(err)
    44  	}
    45  
    46  	assertEqualDir(t, expect, dirname)
    47  }
    48  
    49  func copyDir(to, from string) error {
    50  	fi, err := ioutil.ReadDir(from)
    51  	if err != nil {
    52  		return err
    53  	}
    54  	for _, info := range fi {
    55  		if info.IsDir() {
    56  			continue
    57  		}
    58  
    59  		tof, err := os.Create(filepath.Join(to, info.Name()))
    60  		if err != nil {
    61  			return err
    62  		}
    63  		defer tof.Close()
    64  
    65  		fromf, err := os.Open(filepath.Join(from, info.Name()))
    66  		if err != nil {
    67  			return err
    68  		}
    69  		defer fromf.Close()
    70  
    71  		_, err = io.Copy(tof, fromf)
    72  		if err != nil {
    73  			return err
    74  		}
    75  	}
    76  	return nil
    77  }
    78  
    79  func assertEqualDir(t *testing.T, path1, path2 string) {
    80  	fi1, err := ioutil.ReadDir(path1)
    81  	if err != nil {
    82  		t.Fatal(err)
    83  	}
    84  	fi2, err := ioutil.ReadDir(path2)
    85  	if err != nil {
    86  		t.Fatal(err)
    87  	}
    88  	var fn1, fn2 []string
    89  	for _, info := range fi1 {
    90  		fn1 = append(fn1, fmt.Sprintf("%s\n", info.Name()))
    91  	}
    92  	for _, info := range fi2 {
    93  		fn2 = append(fn2, fmt.Sprintf("%s\n", info.Name()))
    94  	}
    95  
    96  	diff := difflib.UnifiedDiff{
    97  		A:        fn1,
    98  		B:        fn2,
    99  		FromFile: fmt.Sprintf("Expect %s", path1),
   100  		ToFile:   fmt.Sprintf("Got %s", path2),
   101  		Context:  3,
   102  	}
   103  	text, _ := difflib.GetUnifiedDiffString(diff)
   104  	if text != "" {
   105  		t.Fatalf("DIR\n%s", text)
   106  	}
   107  
   108  	for _, info := range fi1 {
   109  		p1 := filepath.Join(path1, info.Name())
   110  		p2 := filepath.Join(path2, info.Name())
   111  		if info.IsDir() {
   112  			assertEqualDir(t, p1, p2)
   113  		} else {
   114  			b1, err := ioutil.ReadFile(p1)
   115  			if err != nil {
   116  				t.Fatal(err)
   117  			}
   118  			b2, err := ioutil.ReadFile(p2)
   119  			if err != nil {
   120  				t.Fatal(err)
   121  			}
   122  			diff := difflib.UnifiedDiff{
   123  				A:        difflib.SplitLines(string(b1)),
   124  				B:        difflib.SplitLines(string(b2)),
   125  				FromFile: fmt.Sprintf("Expect %s", p1),
   126  				ToFile:   fmt.Sprintf("Got %s", p2),
   127  				Context:  3,
   128  			}
   129  			text, _ := difflib.GetUnifiedDiffString(diff)
   130  			if text != "" {
   131  				t.Fatalf("FILE\n%s", text)
   132  			}
   133  		}
   134  	}
   135  }