You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: fs_test.go
    path of file: ./repos/godog/internal/storage
    
    the code of the file until where you have to start completion: package storage_test

import (
	"errors"
	"io/fs"
	"io/ioutil"
	"os"
	"path/filepath"
	"strings"
	"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: 
    
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 %baseDir%/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, strings.ReplaceAll(test.expError.Error(), "%baseDir%", baseDir))
				return
			}

			assert.NoError(t, err)

			bb := make([]byte, len(test.expData))
			_, _ = f.Read(bb)
			assert.Equal(t, test.expData, bb)
		})
	}
}