testdata_builder.go (1636B)
1 // Copyright 2018 The Hugo Authors. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package htesting 15 16 import ( 17 "path/filepath" 18 "testing" 19 20 "github.com/spf13/afero" 21 ) 22 23 type testFile struct { 24 name string 25 content string 26 } 27 28 type testdataBuilder struct { 29 t testing.TB 30 fs afero.Fs 31 workingDir string 32 33 files []testFile 34 } 35 36 func NewTestdataBuilder(fs afero.Fs, workingDir string, t testing.TB) *testdataBuilder { 37 workingDir = filepath.Clean(workingDir) 38 return &testdataBuilder{fs: fs, workingDir: workingDir, t: t} 39 } 40 41 func (b *testdataBuilder) Add(filename, content string) *testdataBuilder { 42 b.files = append(b.files, testFile{name: filename, content: content}) 43 return b 44 } 45 46 func (b *testdataBuilder) Build() *testdataBuilder { 47 for _, f := range b.files { 48 if err := afero.WriteFile(b.fs, filepath.Join(b.workingDir, f.name), []byte(f.content), 0666); err != nil { 49 b.t.Fatalf("failed to add %q: %s", f.name, err) 50 } 51 } 52 return b 53 } 54 55 func (b testdataBuilder) WithWorkingDir(dir string) *testdataBuilder { 56 b.workingDir = filepath.Clean(dir) 57 b.files = make([]testFile, 0) 58 return &b 59 }