github.com/suntong/cascadia@v1.3.0/prop_test.go (about)

     1  package main_test
     2  
     3  import (
     4  	"bytes"
     5  	"os"
     6  	"os/exec"
     7  	"strings"
     8  	"testing"
     9  )
    10  
    11  const (
    12  	dirTest = "test/"
    13  	cmdTest = "../cascadia"
    14  	extRef  = ".ref" // extension for reference file
    15  	extGot  = ".got" // extension for generated file
    16  )
    17  
    18  // testIt runs @cmdTest with @argv and compares the generated
    19  // output for @name with the corresponding @extRef
    20  func testIt(t *testing.T, name string, argv ...string) {
    21  	var (
    22  		diffOut         bytes.Buffer
    23  		generatedOutput = name + extGot
    24  		cmd             = exec.Command(cmdTest, argv...)
    25  	)
    26  
    27  	t.Logf("Testing %s:\n\t%s %s\n", name, cmdTest, strings.Join(argv, " "))
    28  
    29  	// open the out file for writing
    30  	outfile, err := os.Create(generatedOutput)
    31  	if err != nil {
    32  		t.Errorf("write error [%s: %s] %s.", name, argv, err)
    33  	}
    34  	defer outfile.Close()
    35  	cmd.Stdout = outfile
    36  
    37  	err = cmd.Start()
    38  	if err != nil {
    39  		t.Errorf("start error [%s: %s] %s.", name, argv, err)
    40  	}
    41  	err = cmd.Wait()
    42  	if err != nil {
    43  		t.Errorf("exit error [%s: %s] %s.", name, argv, err)
    44  	}
    45  
    46  	cmd = exec.Command("diff", "-U1", name+extRef, generatedOutput)
    47  	cmd.Stdout = &diffOut
    48  
    49  	err = cmd.Start()
    50  	if err != nil {
    51  		t.Errorf("start error %s [%s: %s]", err, name, argv)
    52  	}
    53  	err = cmd.Wait()
    54  	if err != nil {
    55  		t.Errorf("cmp error %s [%s: %s]\n%s", err, name, argv, diffOut.String())
    56  	}
    57  	//os.Remove(generatedOutput)
    58  }
    59  
    60  type testCase struct {
    61  	name string
    62  	args []string
    63  }
    64  
    65  func testCases(t *testing.T, name string, testData []testCase) {
    66  	t.Logf("\n\n== Testing %s\n\n", name)
    67  	os.Chdir(dirTest)
    68  
    69  	for _, tc := range testData {
    70  		testIt(t, tc.name, tc.args...)
    71  	}
    72  
    73  }