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  }