mock.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package exe
  2. import (
  3. "context"
  4. "fmt"
  5. "os/exec"
  6. "github.com/Jguer/yay/v12/pkg/settings/parser"
  7. )
  8. type Call struct {
  9. Res []interface{}
  10. Args []interface{}
  11. Dir string
  12. }
  13. func (c *Call) String() string {
  14. return fmt.Sprintf("%+v", c.Args)
  15. }
  16. type MockBuilder struct {
  17. Runner Runner
  18. BuildMakepkgCmdCalls []Call
  19. BuildMakepkgCmdFn func(ctx context.Context, dir string, extraArgs ...string) *exec.Cmd
  20. BuildPacmanCmdFn func(ctx context.Context, args *parser.Arguments, mode parser.TargetMode, noConfirm bool) *exec.Cmd
  21. }
  22. type MockRunner struct {
  23. ShowCalls []Call
  24. CaptureCalls []Call
  25. ShowFn func(cmd *exec.Cmd) error
  26. CaptureFn func(cmd *exec.Cmd) (stdout string, stderr string, err error)
  27. }
  28. func (m *MockBuilder) BuildMakepkgCmd(ctx context.Context, dir string, extraArgs ...string) *exec.Cmd {
  29. var res *exec.Cmd
  30. if m.BuildMakepkgCmdFn != nil {
  31. res = m.BuildMakepkgCmdFn(ctx, dir, extraArgs...)
  32. } else {
  33. res = exec.CommandContext(ctx, "makepkg", extraArgs...)
  34. }
  35. m.BuildMakepkgCmdCalls = append(m.BuildMakepkgCmdCalls, Call{
  36. Res: []interface{}{res},
  37. Args: []interface{}{
  38. ctx,
  39. dir,
  40. extraArgs,
  41. },
  42. })
  43. return res
  44. }
  45. func (m *MockBuilder) AddMakepkgFlag(flag string) {
  46. }
  47. func (m *MockBuilder) BuildGitCmd(ctx context.Context, dir string, extraArgs ...string) *exec.Cmd {
  48. return exec.CommandContext(ctx, "git", extraArgs...)
  49. }
  50. func (m *MockBuilder) BuildPacmanCmd(ctx context.Context, args *parser.Arguments, mode parser.TargetMode, noConfirm bool) *exec.Cmd {
  51. var res *exec.Cmd
  52. if m.BuildPacmanCmdFn != nil {
  53. res = m.BuildPacmanCmdFn(ctx, args, mode, noConfirm)
  54. } else {
  55. res = exec.CommandContext(ctx, "pacman")
  56. }
  57. return res
  58. }
  59. func (m *MockBuilder) SetPacmanDBPath(path string) {
  60. }
  61. func (m *MockBuilder) SudoLoop() {
  62. }
  63. func (m *MockBuilder) Capture(cmd *exec.Cmd) (stdout, stderr string, err error) {
  64. return m.Runner.Capture(cmd)
  65. }
  66. func (m *MockBuilder) Show(cmd *exec.Cmd) error {
  67. return m.Runner.Show(cmd)
  68. }
  69. func (m *MockRunner) Capture(cmd *exec.Cmd) (stdout, stderr string, err error) {
  70. m.CaptureCalls = append(m.CaptureCalls, Call{
  71. Args: []interface{}{
  72. cmd,
  73. },
  74. Dir: cmd.Dir,
  75. })
  76. if m.CaptureFn != nil {
  77. return m.CaptureFn(cmd)
  78. }
  79. return "", "", nil
  80. }
  81. func (m *MockRunner) Show(cmd *exec.Cmd) error {
  82. var err error
  83. if m.ShowFn != nil {
  84. err = m.ShowFn(cmd)
  85. }
  86. m.ShowCalls = append(m.ShowCalls, Call{
  87. Args: []interface{}{
  88. cmd,
  89. },
  90. Dir: cmd.Dir,
  91. })
  92. return err
  93. }