github.com/hairyhenderson/gomplate/v3@v3.11.7/internal/tests/integration/plugins_windows_test.go (about) 1 //go:build windows 2 // +build windows 3 4 package integration 5 6 import ( 7 "strings" 8 "testing" 9 10 "gotest.tools/v3/assert" 11 "gotest.tools/v3/fs" 12 ) 13 14 func setupPluginsTest(t *testing.T) *fs.Dir { 15 tmpDir := fs.NewDir(t, "gomplate-inttests", 16 fs.WithFile("foo.ps1", "echo $args\r\nexit 0\r\n", fs.WithMode(0o644)), 17 fs.WithFile("foo.bat", "@ECHO OFF\r\nECHO %1\r\n", fs.WithMode(0o644)), 18 fs.WithFile("fail.bat", `@ECHO OFF 19 ECHO %1 1>&2 20 EXIT /B %2 21 `, fs.WithMode(0o755)), 22 fs.WithFile("fail.ps1", `param ( 23 [Parameter(Position=0)] 24 [string]$msg, 25 26 [Parameter(Position=1)] 27 [int]$code 28 ) 29 $host.ui.WriteErrorLine($msg) 30 $host.SetShouldExit($code) 31 `, fs.WithMode(0o755)), 32 ) 33 t.Cleanup(tmpDir.Remove) 34 35 return tmpDir 36 } 37 38 func TestPlugins(t *testing.T) { 39 tmpDir := setupPluginsTest(t) 40 o, e, err := cmd(t, 41 "--plugin", "foo="+tmpDir.Join("foo.bat"), 42 "-i", `{{ foo "hello world" }}`, 43 ).run() 44 assertSuccess(t, strings.TrimSpace(o), e, err, `"hello world"`) 45 } 46 47 func TestPlugins_Errors(t *testing.T) { 48 tmpDir := setupPluginsTest(t) 49 _, _, err := cmd(t, "--plugin", "f=false", 50 "-i", `{{ f }}`).run() 51 assert.ErrorContains(t, err, "exit status 1") 52 53 _, _, err = cmd(t, "--plugin", "f="+tmpDir.Join("fail.bat"), 54 "-i", `{{ f "bat failed" 42 }}`).run() 55 assert.ErrorContains(t, err, "bat failed") 56 assert.ErrorContains(t, err, "error calling f: exit status 42") 57 }