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  }