fuzzyworld

template / windows / files / monkey-patch.go

Branch windows · default branch · all branches

monkey-patch.go

Blame: the commit that last changed each line · file · history

c3fc7a22 2022-10-30 Pavel Safronov1package main
2
3import (
4 "os"
5 "os/exec"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9)
10
11type monkeyPatch struct {
12 ExecCommand func(name string, arg ...string) *exec.Cmd
13 OSWriteFile func(filename string, data []byte, perm os.FileMode) error
14 OSGetwd func() (string, error)
15 OSChdir func(dir string) error
16 OSMkdir func(path string, perm os.FileMode) error
17 OSReadDir func(dirname string) ([]os.DirEntry, error)
5e424f1b 2022-11-12 Pavel Safronov18 OSStat func(name string) (os.FileInfo, error)
c3fc7a22 2022-10-30 Pavel Safronov19}
20type monkeyPatchCalls struct {
21 ExecCommandCalls []struct {
22 name string
23 arg []string
24 }
25 OSWriteFileCalls []struct {
26 filename string
27 data []byte
28 perm os.FileMode
29 }
30 OSGetwdCalls []struct{}
31 OSChdirCalls []struct{ dir string }
32 OSMkdirCalls []struct {
33 path string
34 perm os.FileMode
35 }
36 OSReadDirCalls []struct{ dirname string }
37}
38
b1ded4b4 2022-10-30 Pavel Safronov39var monkey = defaultMonkeyPatch()
c3fc7a22 2022-10-30 Pavel Safronov40
41func applyTestMonkeyPatch(t *testing.T, monkeyImpl monkeyPatch) *monkeyPatchCalls {
42 t.Cleanup(undoMonkeyPatch)
43 results := monkeyPatchCalls{
44 ExecCommandCalls: []struct {
45 name string
46 arg []string
47 }{},
48 OSWriteFileCalls: []struct {
49 filename string
50 data []byte
51 perm os.FileMode
52 }{},
53 OSGetwdCalls: []struct{}{},
54 OSChdirCalls: []struct{ dir string }{},
55 OSMkdirCalls: []struct {
56 path string
57 perm os.FileMode
58 }{},
59 OSReadDirCalls: []struct{ dirname string }{},
60 }
61 monkey = monkeyPatch{
62 ExecCommand: func(name string, arg ...string) *exec.Cmd {
63 assert.NotNil(t, monkeyImpl.ExecCommand, "ExecCommand is not implemented")
64 results.ExecCommandCalls = append(results.ExecCommandCalls, struct {
65 name string
66 arg []string
67 }{name, arg})
68 return monkeyImpl.ExecCommand(name, arg...)
69 },
70 OSWriteFile: func(filename string, data []byte, perm os.FileMode) error {
71 assert.NotNil(t, monkeyImpl.OSWriteFile, "OSWriteFile is not implemented")
72 results.OSWriteFileCalls = append(results.OSWriteFileCalls, struct {
73 filename string
74 data []byte
75 perm os.FileMode
76 }{filename, data, perm})
77 return monkeyImpl.OSWriteFile(filename, data, perm)
78 },
79 OSGetwd: func() (string, error) {
80 assert.NotNil(t, monkeyImpl.OSGetwd, "OSGetwd is not implemented")
81 results.OSGetwdCalls = append(results.OSGetwdCalls, struct{}{})
82 return monkeyImpl.OSGetwd()
83 },
84 OSChdir: func(dir string) error {
85 assert.NotNil(t, monkeyImpl.OSChdir, "OSChdir is not implemented")
86 results.OSChdirCalls = append(results.OSChdirCalls, struct{ dir string }{dir})
87 return monkeyImpl.OSChdir(dir)
88 },
89 OSMkdir: func(path string, perm os.FileMode) error {
90 assert.NotNil(t, monkeyImpl.OSMkdir, "OSMkdir is not implemented")
91 results.OSMkdirCalls = append(results.OSMkdirCalls, struct {
92 path string
93 perm os.FileMode
94 }{path, perm})
95 return monkeyImpl.OSMkdir(path, perm)
96 },
97 OSReadDir: func(dirname string) ([]os.DirEntry, error) {
98 assert.NotNil(t, monkeyImpl.OSReadDir, "OSReadDir is not implemented")
99 results.OSReadDirCalls = append(results.OSReadDirCalls, struct{ dirname string }{dirname})
100 return monkeyImpl.OSReadDir(dirname)
101 },
102 }
103 return &results
104}
105
b1ded4b4 2022-10-30 Pavel Safronov106func defaultMonkeyPatch() monkeyPatch {
107 return monkeyPatch{
c3fc7a22 2022-10-30 Pavel Safronov108 ExecCommand: exec.Command,
109 OSWriteFile: os.WriteFile,
110 OSGetwd: os.Getwd,
111 OSChdir: os.Chdir,
112 OSMkdir: os.Mkdir,
113 OSReadDir: os.ReadDir,
114 }
115}
b1ded4b4 2022-10-30 Pavel Safronov116
117func undoMonkeyPatch() {
118 monkey = defaultMonkeyPatch()
119}