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  }