mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
ee359df172
The template packages are based on go1.20.5 with the patch in befec5ddbbfbd81ec84e74e15a38044d67f8785b added. This also includes a security fix that now disallows Go template actions in JS literals (inside backticks). This will throw an error saying "... appears in a JS template literal". If you're really sure this isn't a security risk in your case, you can revert to the old behaviour: ```toml [security] [security.gotemplates] allowActionJSTmpl = true ``` See https://github.com/golang/go/issues/59234 Fixes #11112
93 lines
2.9 KiB
Go
93 lines
2.9 KiB
Go
// Copyright 2015 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package testenv
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"os/exec"
|
|
"runtime"
|
|
"strings"
|
|
"sync"
|
|
"testing"
|
|
)
|
|
|
|
// HasExec reports whether the current system can start new processes
|
|
// using os.StartProcess or (more commonly) exec.Command.
|
|
func HasExec() bool {
|
|
switch runtime.GOOS {
|
|
case "js", "ios":
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
// MustHaveExec checks that the current system can start new processes
|
|
// using os.StartProcess or (more commonly) exec.Command.
|
|
// If not, MustHaveExec calls t.Skip with an explanation.
|
|
func MustHaveExec(t testing.TB) {
|
|
if !HasExec() {
|
|
t.Skipf("skipping test: cannot exec subprocess on %s/%s", runtime.GOOS, runtime.GOARCH)
|
|
}
|
|
}
|
|
|
|
var execPaths sync.Map // path -> error
|
|
|
|
// MustHaveExecPath checks that the current system can start the named executable
|
|
// using os.StartProcess or (more commonly) exec.Command.
|
|
// If not, MustHaveExecPath calls t.Skip with an explanation.
|
|
func MustHaveExecPath(t testing.TB, path string) {
|
|
MustHaveExec(t)
|
|
|
|
err, found := execPaths.Load(path)
|
|
if !found {
|
|
_, err = exec.LookPath(path)
|
|
err, _ = execPaths.LoadOrStore(path, err)
|
|
}
|
|
if err != nil {
|
|
t.Skipf("skipping test: %s: %s", path, err)
|
|
}
|
|
}
|
|
|
|
// CleanCmdEnv will fill cmd.Env with the environment, excluding certain
|
|
// variables that could modify the behavior of the Go tools such as
|
|
// GODEBUG and GOTRACEBACK.
|
|
func CleanCmdEnv(cmd *exec.Cmd) *exec.Cmd {
|
|
if cmd.Env != nil {
|
|
panic("environment already set")
|
|
}
|
|
for _, env := range os.Environ() {
|
|
// Exclude GODEBUG from the environment to prevent its output
|
|
// from breaking tests that are trying to parse other command output.
|
|
if strings.HasPrefix(env, "GODEBUG=") {
|
|
continue
|
|
}
|
|
// Exclude GOTRACEBACK for the same reason.
|
|
if strings.HasPrefix(env, "GOTRACEBACK=") {
|
|
continue
|
|
}
|
|
cmd.Env = append(cmd.Env, env)
|
|
}
|
|
return cmd
|
|
}
|
|
|
|
// CommandContext is like exec.CommandContext, but:
|
|
// - skips t if the platform does not support os/exec,
|
|
// - sends SIGQUIT (if supported by the platform) instead of SIGKILL
|
|
// in its Cancel function
|
|
// - if the test has a deadline, adds a Context timeout and WaitDelay
|
|
// for an arbitrary grace period before the test's deadline expires,
|
|
// - fails the test if the command does not complete before the test's deadline, and
|
|
// - sets a Cleanup function that verifies that the test did not leak a subprocess.
|
|
func CommandContext(t testing.TB, ctx context.Context, name string, args ...string) *exec.Cmd {
|
|
panic("Not implemented, Hugo is not using this")
|
|
}
|
|
|
|
// Command is like exec.Command, but applies the same changes as
|
|
// testenv.CommandContext (with a default Context).
|
|
func Command(t testing.TB, name string, args ...string) *exec.Cmd {
|
|
t.Helper()
|
|
return CommandContext(t, context.Background(), name, args...)
|
|
}
|