github.com/goonzoid/gcli@v0.2.3-0.20150926213610-155587606ea1/skeleton/executable_test.go (about)

     1  package skeleton
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  )
     7  
     8  func TestOverwrite(t *testing.T) {
     9  	tests := []struct {
    10  		initExecutable, expt *Executable
    11  		success              bool
    12  		inputKey             string
    13  		inputValue           interface{}
    14  	}{
    15  		{
    16  			initExecutable: &Executable{Name: "todo"},
    17  			inputKey:       "Name",
    18  			inputValue:     "todo-ng",
    19  			success:        true,
    20  			expt:           &Executable{Name: "todo-ng"},
    21  		},
    22  		{
    23  			initExecutable: &Executable{Name: "todo"},
    24  			inputKey:       "Name",
    25  			inputValue:     1,
    26  			success:        false,
    27  			expt:           &Executable{},
    28  		},
    29  
    30  		{
    31  			initExecutable: &Executable{
    32  				Name: "todo",
    33  				Commands: []Command{
    34  					{Name: "add"},
    35  				},
    36  			},
    37  			inputKey: "Commands",
    38  			inputValue: []Command{
    39  				{Name: "list"},
    40  			},
    41  			success: true,
    42  			expt: &Executable{
    43  				Name: "todo",
    44  				Commands: []Command{
    45  					{Name: "list"},
    46  				},
    47  			},
    48  		},
    49  		{
    50  			initExecutable: &Executable{
    51  				Name: "todo",
    52  				Flags: []Flag{
    53  					{Name: "add"},
    54  				},
    55  			},
    56  			inputKey: "Flags",
    57  			inputValue: []Flag{
    58  				{Name: "list"},
    59  			},
    60  			success: true,
    61  			expt: &Executable{
    62  				Name: "todo",
    63  				Flags: []Flag{
    64  					{Name: "list"},
    65  				},
    66  			},
    67  		},
    68  	}
    69  
    70  	for i, tt := range tests {
    71  		out := tt.initExecutable
    72  		err := out.Overwrite(tt.inputKey, tt.inputValue)
    73  		if !tt.success && err == nil {
    74  			t.Fatalf("#%d expects to be error", i)
    75  		}
    76  
    77  		if !tt.success {
    78  			continue
    79  		}
    80  
    81  		if err != nil {
    82  			t.Fatal(err)
    83  		}
    84  		if !reflect.DeepEqual(out, tt.expt) {
    85  			t.Errorf("#%d expects %#v to be eq %#v", i, out, tt.expt)
    86  		}
    87  	}
    88  
    89  }