github.com/jakewarren/define@v1.0.1-0.20230216022724-0146b4213218/integration/cli_test.go (about) 1 // nolint:scopelint,gosec 2 package integration 3 4 import ( 5 "flag" 6 "fmt" 7 "io/ioutil" 8 "os" 9 "os/exec" 10 "path" 11 "path/filepath" 12 "reflect" 13 "runtime" 14 "testing" 15 ) 16 17 var update = flag.Bool("update", false, "update golden files") 18 19 var binaryName = "define" 20 21 func fixturePath(t *testing.T, fixture string) string { 22 _, filename, _, ok := runtime.Caller(0) 23 if !ok { 24 t.Fatalf("problems recovering caller information") 25 } 26 27 return filepath.Join(filepath.Dir(filename), fixture) 28 } 29 30 func writeFixture(t *testing.T, fixture string, content []byte) { 31 err := ioutil.WriteFile(fixturePath(t, fixture), content, 0644) 32 if err != nil { 33 t.Fatal(err) 34 } 35 } 36 37 func loadFixture(t *testing.T, fixture string) string { 38 content, err := ioutil.ReadFile(fixturePath(t, fixture)) 39 if err != nil { 40 t.Fatal(err) 41 } 42 43 return string(content) 44 } 45 46 func TestCliArgs(t *testing.T) { 47 tests := []struct { 48 name string 49 args []string 50 fixture string 51 }{ 52 {"one argument", []string{"definition"}, "one-argument.golden"}, 53 } 54 55 for _, tt := range tests { 56 t.Run(tt.name, func(t *testing.T) { 57 dir, err := os.Getwd() 58 if err != nil { 59 t.Fatal(err) 60 } 61 62 cmd := exec.Command(path.Join(dir, "bin", binaryName), tt.args...) 63 output, err := cmd.CombinedOutput() 64 if err != nil { 65 fmt.Printf("debug: dir: %s\n", dir) 66 fmt.Printf("debug: cmd: %s\n", path.Join(dir, "bin", binaryName)) 67 fmt.Printf("debug: args: %v\n", tt.args) 68 fmt.Printf("debug: output: %s\n", output) 69 fmt.Printf("debug: error: %s\n", err) 70 t.Fatal(err) 71 } 72 73 if *update { 74 writeFixture(t, tt.fixture, output) 75 } 76 77 actual := string(output) 78 79 expected := loadFixture(t, tt.fixture) 80 81 if !reflect.DeepEqual(actual, expected) { 82 t.Fatalf("actual = %s, expected = %s", actual, expected) 83 } 84 }) 85 } 86 } 87 88 func TestMain(m *testing.M) { 89 err := os.Chdir("..") 90 if err != nil { 91 fmt.Printf("could not change dir: %v", err) 92 os.Exit(1) 93 } 94 makeCmd := exec.Command("make", "build") 95 err = makeCmd.Run() 96 if err != nil { 97 fmt.Printf("could not make binary for %s: %v", binaryName, err) 98 os.Exit(1) 99 } 100 101 os.Exit(m.Run()) 102 }