Files
kjol/tools/tsgo/internal/testutil/harnessutil/recorderfs.go
2026-07-09 16:50:43 -04:00

46 lines
998 B
Go

package harnessutil
import (
"slices"
"sync"
"github.com/microsoft/typescript-go/internal/vfs"
)
type OutputRecorderFS struct {
vfs.FS
outputsMut sync.Mutex
outputsMap map[string]int
outputs []*TestFile
}
func NewOutputRecorderFS(fs vfs.FS) vfs.FS {
return &OutputRecorderFS{FS: fs}
}
func (fs *OutputRecorderFS) WriteFile(path string, data string) error {
if err := fs.FS.WriteFile(path, data); err != nil {
return err
}
path = fs.Realpath(path)
fs.outputsMut.Lock()
defer fs.outputsMut.Unlock()
if index, ok := fs.outputsMap[path]; ok {
fs.outputs[index] = &TestFile{UnitName: path, Content: data}
} else {
index := len(fs.outputs)
if fs.outputsMap == nil {
fs.outputsMap = make(map[string]int)
}
fs.outputsMap[path] = index
fs.outputs = append(fs.outputs, &TestFile{UnitName: path, Content: data})
}
return nil
}
func (fs *OutputRecorderFS) Outputs() []*TestFile {
fs.outputsMut.Lock()
defer fs.outputsMut.Unlock()
return slices.Clone(fs.outputs)
}