123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package exe
- import (
- "context"
- "fmt"
- "os/exec"
- "sync"
- "github.com/Jguer/yay/v12/pkg/settings/parser"
- )
- type Call struct {
- Res []interface{}
- Args []interface{}
- Dir string
- }
- func (c *Call) String() string {
- return fmt.Sprintf("%+v", c.Args)
- }
- type MockBuilder struct {
- Runner Runner
- BuildMakepkgCmdCallsMu sync.Mutex
- BuildMakepkgCmdCalls []Call
- BuildMakepkgCmdFn func(ctx context.Context, dir string, extraArgs ...string) *exec.Cmd
- BuildPacmanCmdFn func(ctx context.Context, args *parser.Arguments, mode parser.TargetMode, noConfirm bool) *exec.Cmd
- }
- type MockRunner struct {
- ShowCallsMu sync.Mutex
- ShowCalls []Call
- CaptureCallsMu sync.Mutex
- CaptureCalls []Call
- ShowFn func(cmd *exec.Cmd) error
- CaptureFn func(cmd *exec.Cmd) (stdout string, stderr string, err error)
- }
- func (m *MockBuilder) BuildGPGCmd(ctx context.Context, extraArgs ...string) *exec.Cmd {
- return exec.CommandContext(ctx, "gpg", extraArgs...)
- }
- func (m *MockBuilder) BuildMakepkgCmd(ctx context.Context, dir string, extraArgs ...string) *exec.Cmd {
- var res *exec.Cmd
- if m.BuildMakepkgCmdFn != nil {
- res = m.BuildMakepkgCmdFn(ctx, dir, extraArgs...)
- } else {
- res = exec.CommandContext(ctx, "makepkg", extraArgs...)
- }
- m.BuildMakepkgCmdCallsMu.Lock()
- m.BuildMakepkgCmdCalls = append(m.BuildMakepkgCmdCalls, Call{
- Res: []interface{}{res},
- Args: []interface{}{
- ctx,
- dir,
- extraArgs,
- },
- })
- m.BuildMakepkgCmdCallsMu.Unlock()
- return res
- }
- func (m *MockBuilder) AddMakepkgFlag(flag string) {
- }
- func (m *MockBuilder) BuildGitCmd(ctx context.Context, dir string, extraArgs ...string) *exec.Cmd {
- return exec.CommandContext(ctx, "git", extraArgs...)
- }
- func (m *MockBuilder) BuildPacmanCmd(ctx context.Context, args *parser.Arguments, mode parser.TargetMode, noConfirm bool) *exec.Cmd {
- var res *exec.Cmd
- if m.BuildPacmanCmdFn != nil {
- res = m.BuildPacmanCmdFn(ctx, args, mode, noConfirm)
- } else {
- res = exec.CommandContext(ctx, "pacman")
- }
- return res
- }
- func (m *MockBuilder) SetPacmanDBPath(path string) {
- }
- func (m *MockBuilder) SudoLoop() {
- }
- func (m *MockBuilder) Capture(cmd *exec.Cmd) (stdout, stderr string, err error) {
- return m.Runner.Capture(cmd)
- }
- func (m *MockBuilder) Show(cmd *exec.Cmd) error {
- return m.Runner.Show(cmd)
- }
- func (m *MockRunner) Capture(cmd *exec.Cmd) (stdout, stderr string, err error) {
- m.CaptureCallsMu.Lock()
- m.CaptureCalls = append(m.CaptureCalls, Call{
- Args: []interface{}{
- cmd,
- },
- Dir: cmd.Dir,
- })
- m.CaptureCallsMu.Unlock()
- if m.CaptureFn != nil {
- return m.CaptureFn(cmd)
- }
- return "", "", nil
- }
- func (m *MockRunner) Show(cmd *exec.Cmd) error {
- var err error
- if m.ShowFn != nil {
- err = m.ShowFn(cmd)
- }
- m.ShowCallsMu.Lock()
- m.ShowCalls = append(m.ShowCalls, Call{
- Args: []interface{}{
- cmd,
- },
- Dir: cmd.Dir,
- })
- m.ShowCallsMu.Unlock()
- return err
- }
|