%PDF- %PDF-
Direktori : /home/waritko/go/src/github.com/odeke-em/drive/src/ |
Current File : //home/waritko/go/src/github.com/odeke-em/drive/src/rc_test.go |
package drive_test import ( "bytes" "encoding/json" "testing" drive "github.com/odeke-em/drive/src" ) func TestStructuredRC(t *testing.T) { tests := [...]struct { rcDir string want map[string]map[string]interface{} wantErr bool }{ 0: { rcDir: "./testdata/structured", want: map[string]map[string]interface{}{ "global": {"depth": 10, "verbose": false}, "list": {"long": true}, "push": {"no-prompt": true}, "pull": {"depth": 3, "no-prompt": false, "verbose": true}, }, }, 1: { rcDir: "./testdata/zero-values", want: map[string]map[string]interface{}{ "global": {"force": true, "verbose": true}, "pull": { "desktop-links": false, "force": true, "verbose": false, "export": "pdf,doc,rtf", "same-exports-dir": true, }, "open": {"verbose": true, "file-browser": false, "export": ""}, "push": {"trashed": true, "retry-count": 10, "destination": "/tmp"}, "starred": {"all": true}, }, }, } blobify := func(v interface{}) []byte { blob, _ := json.Marshal(v) return blob } for i, tt := range tests { rcMap, err := drive.ResourceMappings(tt.rcDir) if tt.wantErr { if err == nil { t.Errorf("#%d: err=nil", i) } continue } if err != nil { t.Errorf("#%d: err=%v", i, err) continue } // Not going to use reflect.DeepEqual because // we'll then have trouble comparing any []string. gotBlob := blobify(rcMap) wantBlob := blobify(tt.want) if !bytes.Equal(gotBlob, wantBlob) { t.Errorf("#%d:\n\thave:\n\t%s\n\twant:\n\t%s", i, gotBlob, wantBlob) } } } type cliDefinition struct { Depth *int `json:"depth"` NoPrompt *bool `json:"no-prompt"` Verbose *bool `json:"verbose"` Long *bool `json:"long"` Sort *string `json:"sort"` } func TestStructuredRCJSONSifting(t *testing.T) { tests := [...]struct { rcDir string wantErr bool relevantKeys []string want map[string]interface{} }{ 0: { rcDir: "./testdata/structured", relevantKeys: []string{"push"}, want: map[string]interface{}{ "depth": 10, "verbose": false, "no-prompt": true, }, }, 1: { rcDir: "./testdata/structured", relevantKeys: []string{"pull"}, want: map[string]interface{}{ "depth": 3, "verbose": true, "no-prompt": false, }, }, // Since we aren't passing in any keys to get from, // make sure we can still read from the global scope 2: { rcDir: "./testdata/structured", relevantKeys: nil, want: map[string]interface{}{ "depth": 10, "verbose": false, }, }, // Ensure that we can read from the // old style, non-sectioned .driverc file. 3: { rcDir: "./testdata/non-sectioned", relevantKeys: nil, want: map[string]interface{}{ "depth": 10, "verbose": true, "long": true, "no-prompt": false, "sort": "name,date_r", }, }, } for i, tt := range tests { filler := cliDefinition{} jsonStr, err := drive.JSONStringifySiftedCLITags(filler, tt.rcDir, nil, tt.relevantKeys...) if tt.wantErr { if err == nil { t.Errorf("#%d: err=nil", i) } continue } if err != nil { t.Errorf("#%d: err=%v", i, err) continue } saveMap := make(map[string]interface{}) if err := json.Unmarshal([]byte(jsonStr), &saveMap); err != nil { t.Errorf("#%d: err=%v", i, err) continue } // Not going to use reflect.DeepEqual because // we've have trouble comparing any []string gotBlob, _ := json.MarshalIndent(saveMap, "", " ") wantBlob, _ := json.MarshalIndent(tt.want, "", " ") if !bytes.Equal(gotBlob, wantBlob) { t.Errorf("#%d:\n\thave: %s\n\twant: %s", i, gotBlob, wantBlob) } } }