gopkg.in/easygen.v3@v3.0.0/cmd/easygen/main_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 cmdEasygen = "easygen" 13 dirTest = "../../test/" 14 extRef = ".ref" // extension for reference file 15 extGot = ".got" // extension for generated file 16 ) 17 18 // testEasygen runs @cmdEasyGen with @argv and compares the generated 19 // output for @name with the corresponding @extRef 20 func testEasygen(t *testing.T, name string, argv ...string) { 21 var ( 22 diffOut bytes.Buffer 23 generatedOutput = name + extGot 24 cmd = exec.Command(cmdEasygen, argv...) 25 ) 26 27 t.Logf("Testing %s:\n\t%s %s", name, cmdEasygen, 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 func TestExec(t *testing.T) { 61 os.Chdir(dirTest) 62 63 //Test Basic Functions 64 testEasygen(t, "list0", "list0") 65 // Filename suffixes are optional 66 testEasygen(t, "list0", "list0.yaml") 67 testEasygen(t, "list0", "-tf", "list0", "list0") 68 testEasygen(t, "list0", "-tf", "list0.tmpl", "list0") 69 testEasygen(t, "list0", "-tf", "list0.tmpl", "list0.yaml") 70 testEasygen(t, "list0E", "-tf", "list0E", "list0") 71 72 testEasygen(t, "list1", "list1") 73 testEasygen(t, "listfunc1", "listfunc1") 74 testEasygen(t, "listfunc2", "listfunc2") 75 76 //Test HTML 77 testEasygen(t, "list1HTML", "-tf", "list1HTML", "list1") 78 79 // varcaser string functions 80 testEasygen(t, "var0", "-ts", "{{.Name}}", "var0") 81 testEasygen(t, "var1", "-ts", "{{clk2uc .Name}}", "var0") 82 testEasygen(t, "var2", "-ts", "{{clk2ss .Name}}", "var0") 83 84 //Test Bigger files 85 testEasygen(t, "commandlineCLI-024", "commandlineCLI-024") 86 testEasygen(t, "commandlineCLI-027", "commandlineCLI-027") 87 testEasygen(t, "commandlineCLI-027s", "-tf", "commandlineCLI-027", "commandlineCLI-027s") 88 89 testEasygen(t, "commandlineCVFull", "commandlineCVFull") 90 testEasygen(t, "commandlineCV", "commandlineCV") 91 testEasygen(t, "commandlineFlag", "commandlineFlag") 92 93 // Enum generation: (a) run template with multiple data inputs, 94 // (b) run the same input with multiple template files: 95 testEasygen(t, "enum_multiple_data_files", "-tf", "enum_c-header", "raid_type", "raid_driver") 96 testEasygen(t, "enum_multiple_template_files", "-tf", "enum_c-header,enum_c-source", "raid_type.yaml") 97 testEasygen(t, "enum_multiple_template_and_data", "-tf", "enum_c-header,enum_c-to_str", "raid_type", "raid_driver.yaml") 98 }