gopkg.in/easygen.v4@v4.1.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", "list0", "list0") 68 testEasygen(t, "list0", "list0.tmpl", "list0") 69 testEasygen(t, "list0", "list0.tmpl", "list0.yaml") 70 testEasygen(t, "list0E", "list0E", "list0") 71 72 testEasygen(t, "list1", "list1") 73 testEasygen(t, "listfunc1", "listfunc1") 74 testEasygen(t, "listfunc2", "listfunc2") 75 76 //Test Basic Json Functions 77 testEasygen(t, "list0j", "list0j") 78 testEasygen(t, "list0j", "list0j", "list0j") 79 testEasygen(t, "list0j", "list0j", "list0j.json") 80 81 // template_name can be a comma-separated list 82 testEasygen(t, "list01", "list0,listfunc1", "list0") 83 84 //Test HTML 85 testEasygen(t, "list1HTML", "list1HTML", "list1") 86 87 // varcaser string functions 88 testEasygen(t, "var0", "-ts", "{{.Name}}", "var0") 89 testEasygen(t, "var1", "-ts", "{{clk2uc .Name}}", "var0") 90 testEasygen(t, "var2", "-ts", "{{clk2ss .Name}}", "var0") 91 92 //Test Bigger files 93 testEasygen(t, "commandlineCLI-024", "commandlineCLI-024") 94 testEasygen(t, "commandlineCLI-027", "commandlineCLI-027") 95 testEasygen(t, "commandlineCLI-027s", "commandlineCLI-027", "commandlineCLI-027s") 96 97 testEasygen(t, "commandlineCVFull", "commandlineCVFull") 98 testEasygen(t, "commandlineCV", "commandlineCV") 99 testEasygen(t, "commandlineFlag", "commandlineFlag") 100 101 // Enum generation: (a) run template with multiple data inputs, 102 // (b) run the same input with multiple template files: 103 testEasygen(t, "enum_multiple_data_files", "enum_c-header", "raid_type", "raid_driver") 104 testEasygen(t, "enum_multiple_template_files", "enum_c-header,enum_c-source", "raid_type.yaml") 105 testEasygen(t, "enum_multiple_template_and_data", "enum_c-header,enum_c-to_str", "raid_type", "raid_driver.yaml") 106 }