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 }