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 }