vendor tsgo
This commit is contained in:
45
tools/tsgo/internal/testutil/harnessutil/recorderfs.go
Normal file
45
tools/tsgo/internal/testutil/harnessutil/recorderfs.go
Normal file
@@ -0,0 +1,45 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user