-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfile_info_callbacks.go
77 lines (61 loc) · 1.51 KB
/
file_info_callbacks.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package aferomock
import (
"io/fs"
"time"
)
var _ fs.FileInfo = (*FileInfoCallbacks)(nil)
// FileInfoCallbacks is a callback-based mock for fs.FileInfo.
type FileInfoCallbacks struct {
NameFunc func() string
SizeFunc func() int64
ModeFunc func() fs.FileMode
ModTimeFunc func() time.Time
IsDirFunc func() bool
SysFunc func() interface{}
}
// Name satisfies the fs.FileInfo interface.
func (f FileInfoCallbacks) Name() string {
return f.NameFunc()
}
// Size satisfies the fs.FileInfo interface.
func (f FileInfoCallbacks) Size() int64 {
return f.SizeFunc()
}
// Mode satisfies the fs.FileInfo interface.
func (f FileInfoCallbacks) Mode() fs.FileMode {
return f.ModeFunc()
}
// ModTime satisfies the fs.FileInfo interface.
func (f FileInfoCallbacks) ModTime() time.Time {
return f.ModTimeFunc()
}
// IsDir satisfies the fs.FileInfo interface.
func (f FileInfoCallbacks) IsDir() bool {
return f.IsDirFunc()
}
// Sys satisfies the fs.FileInfo interface.
func (f FileInfoCallbacks) Sys() interface{} {
return f.SysFunc()
}
// OverrideFileInfo overrides the fs.FileInfo methods with the provided callbacks.
func OverrideFileInfo(fi fs.FileInfo, c FileInfoCallbacks) FileInfoCallbacks {
if c.NameFunc == nil {
c.NameFunc = fi.Name
}
if c.SizeFunc == nil {
c.SizeFunc = fi.Size
}
if c.ModeFunc == nil {
c.ModeFunc = fi.Mode
}
if c.ModTimeFunc == nil {
c.ModTimeFunc = fi.ModTime
}
if c.IsDirFunc == nil {
c.IsDirFunc = fi.IsDir
}
if c.SysFunc == nil {
c.SysFunc = fi.Sys
}
return c
}