github.com/saucelabs/saucectl@v0.175.1/internal/jsonio/file_test.go (about) 1 package jsonio 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "os" 7 "reflect" 8 "testing" 9 10 "gotest.tools/v3/fs" 11 ) 12 13 func TestWriteFile(t *testing.T) { 14 tmpDir := fs.NewDir(t, "jsonio-filedump") 15 defer tmpDir.Remove() 16 17 type TestDTO struct { 18 S string 19 } 20 21 type args struct { 22 name string 23 v interface{} 24 } 25 tests := []struct { 26 name string 27 args args 28 wantErr bool 29 }{ 30 { 31 name: "write it out", 32 args: args{ 33 name: tmpDir.Join("hello.json"), 34 v: TestDTO{S: "world"}, 35 }, 36 wantErr: false, 37 }, 38 } 39 for _, tt := range tests { 40 t.Run(tt.name, func(t *testing.T) { 41 if err := WriteFile(tt.args.name, tt.args.v); (err != nil) != tt.wantErr { 42 t.Errorf("WriteFile() error = %v, wantErr %v", err, tt.wantErr) 43 } 44 45 if !tt.wantErr { 46 // Read back what was written out and compare against original object 47 var dto TestDTO 48 fromFile(t, tt.args.name, &dto) 49 if !reflect.DeepEqual(dto, tt.args.v) { 50 t.Errorf("WriteFile() got = %+v, want %+v", dto, tt.args.v) 51 } 52 } 53 }) 54 } 55 } 56 57 func fromFile(t *testing.T, filename string, v interface{}) { 58 b, err := os.ReadFile(filename) 59 if err != nil { 60 t.Error(err) 61 } 62 r := bytes.NewReader(b) 63 if err := json.NewDecoder(r).Decode(v); err != nil { 64 t.Error(err) 65 } 66 }