mock.go 2.3 KB

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