godog/internal/storage/fs_test.go
Tighearnán Carroll 6ce2b8696b
Use fs.FS abstraction for filesystem (#550)
* compiles

* mock fs in tests

* fix parser tests

* fix run.go

* rename FeatureFS to FS

* fix docs typos

* remove debug log

* add os.DirFS("./") to default options

* reword docstring

* add fs wrapper

* updated readme and changelog

* added note

* fix changelog

* remove ./ gating from defaults

* add new storage.FS tests

* increase coverage of parser.parsePath

* increase coverage of TestSuite.RetrieveFeatures

* remove another os.Stat

---------

Co-authored-by: Tighearnán Carroll <tighearnan.carroll@gamil.com>
2023-03-27 21:52:51 +02:00

109 строки
2,3 КиБ
Go

package storage_test
import (
"errors"
"io/fs"
"io/ioutil"
"os"
"path/filepath"
"testing"
"testing/fstest"
"github.com/cucumber/godog/internal/storage"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestStorage_Open_FS(t *testing.T) {
tests := map[string]struct {
fs fs.FS
expData []byte
expError error
}{
"normal open": {
fs: fstest.MapFS{
"testfile": {
Data: []byte("hello worlds"),
},
},
expData: []byte("hello worlds"),
},
"file not found": {
fs: fstest.MapFS{},
expError: errors.New("open testfile: file does not exist"),
},
"nil fs falls back on os": {
expError: errors.New("open testfile: no such file or directory"),
},
}
for name, test := range tests {
test := test
t.Run(name, func(t *testing.T) {
t.Parallel()
f, err := (storage.FS{FS: test.fs}).Open("testfile")
if test.expError != nil {
assert.Error(t, err)
assert.EqualError(t, err, test.expError.Error())
return
}
assert.NoError(t, err)
bb := make([]byte, len(test.expData))
_, _ = f.Read(bb)
assert.Equal(t, test.expData, bb)
})
}
}
func TestStorage_Open_OS(t *testing.T) {
tests := map[string]struct {
files map[string][]byte
expData []byte
expError error
}{
"normal open": {
files: map[string][]byte{
"testfile": []byte("hello worlds"),
},
expData: []byte("hello worlds"),
},
"nil fs falls back on os": {
expError: errors.New("open /tmp/TestStorage_Open_OS/nil_fs_falls_back_on_os/godogs/testfile: no such file or directory"),
},
}
for name, test := range tests {
test := test
t.Run(name, func(t *testing.T) {
t.Parallel()
baseDir := filepath.Join(os.TempDir(), t.Name(), "godogs")
err := os.MkdirAll(baseDir+"/a", 0755)
defer os.RemoveAll(baseDir)
require.Nil(t, err)
for name, data := range test.files {
err := ioutil.WriteFile(filepath.Join(baseDir, name), data, 0644)
require.NoError(t, err)
}
f, err := (storage.FS{}).Open(filepath.Join(baseDir, "testfile"))
if test.expError != nil {
assert.Error(t, err)
assert.EqualError(t, err, test.expError.Error())
return
}
assert.NoError(t, err)
bb := make([]byte, len(test.expData))
_, _ = f.Read(bb)
assert.Equal(t, test.expData, bb)
})
}
}