github.com/cheshirekow/buildtools@v0.0.0-20200224190056-5d637702fe81/testutils/diff.go (about) 1 // Package testutils provides some useful helpers for buildozer/buildifer tests. 2 package testutils 3 4 import ( 5 "io/ioutil" 6 "os" 7 "os/exec" 8 "testing" 9 ) 10 11 // Diff returns the output of running diff on b1 and b2. 12 func Diff(b1, b2 []byte) ([]byte, error) { 13 f1, err := ioutil.TempFile("", "testdiff") 14 if err != nil { 15 return nil, err 16 } 17 defer os.Remove(f1.Name()) 18 defer f1.Close() 19 20 f2, err := ioutil.TempFile("", "testdiff") 21 if err != nil { 22 return nil, err 23 } 24 defer os.Remove(f2.Name()) 25 defer f2.Close() 26 27 f1.Write(b1) 28 f2.Write(b2) 29 30 data, err := exec.Command("diff", "-u", f1.Name(), f2.Name()).CombinedOutput() 31 if len(data) > 0 { 32 // diff exits with a non-zero status when the files don't match. 33 // Ignore that failure as long as we get output. 34 err = nil 35 } 36 return data, err 37 } 38 39 // Tdiff logs the Diff output to t.Error. 40 func Tdiff(t *testing.T, a, b []byte) { 41 data, err := Diff(a, b) 42 if err != nil { 43 t.Error(err) 44 return 45 } 46 t.Error(string(data)) 47 }