zk/internal/core/fs_test.go
2021-04-17 11:28:38 +02:00

82 lines
1.7 KiB
Go

package core
import (
"os"
"path/filepath"
)
// fileStorageMock implements an in-memory FileStorage for testing purposes.
type fileStorageMock struct {
// Working directory used to calculate relative paths.
workingDir string
// File content indexed by their path in this file storage.
files map[string]string
// Existing directories
dirs []string
}
func newFileStorageMock(workingDir string, dirs []string) *fileStorageMock {
return &fileStorageMock{
workingDir: workingDir,
files: map[string]string{},
dirs: dirs,
}
}
func (fs *fileStorageMock) WorkingDir() string {
return fs.workingDir
}
func (fs *fileStorageMock) Abs(path string) (string, error) {
var err error
if !filepath.IsAbs(path) {
path = filepath.Join(fs.workingDir, path)
path, err = filepath.Abs(path)
if err != nil {
return path, err
}
}
return path, nil
}
func (fs *fileStorageMock) Rel(path string) (string, error) {
return filepath.Rel(fs.workingDir, path)
}
func (fs *fileStorageMock) Canonical(path string) string {
return path
}
func (fs *fileStorageMock) FileExists(path string) (bool, error) {
_, ok := fs.files[path]
return ok, nil
}
func (fs *fileStorageMock) DirExists(path string) (bool, error) {
for _, dir := range fs.dirs {
if dir == path {
return true, nil
}
}
return false, nil
}
func (fs *fileStorageMock) fileInfo(path string) (*os.FileInfo, error) {
panic("not implemented")
}
func (fs *fileStorageMock) IsDescendantOf(dir string, path string) (bool, error) {
panic("not implemented")
}
func (fs *fileStorageMock) Read(path string) ([]byte, error) {
content, _ := fs.files[path]
return []byte(content), nil
}
func (fs *fileStorageMock) Write(path string, content []byte) error {
fs.files[path] = string(content)
return nil
}