github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/strutil/api_test.go (about)

     1  package strutil_test
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/johnnyeven/libtools/strutil"
     9  )
    10  
    11  type Stringer struct {
    12  }
    13  
    14  func (Stringer) String() string {
    15  	return "test"
    16  }
    17  
    18  func TestConvertToStr(t *testing.T) {
    19  	type args struct {
    20  		v interface{}
    21  	}
    22  	tests := []struct {
    23  		name    string
    24  		args    args
    25  		want    string
    26  		wantErr bool
    27  	}{
    28  		{
    29  			name: "string",
    30  			args: args{
    31  				v: "abc",
    32  			},
    33  			want:    "abc",
    34  			wantErr: false,
    35  		},
    36  		{
    37  			name: "int",
    38  			args: args{
    39  				v: int(112),
    40  			},
    41  			want:    "112",
    42  			wantErr: false,
    43  		},
    44  		{
    45  			name: "int8",
    46  			args: args{
    47  				v: int8(12),
    48  			},
    49  			want:    "12",
    50  			wantErr: false,
    51  		},
    52  		{
    53  			name: "int16",
    54  			args: args{
    55  				v: int16(123),
    56  			},
    57  			want:    "123",
    58  			wantErr: false,
    59  		},
    60  		{
    61  			name: "int32",
    62  			args: args{
    63  				v: int32(456),
    64  			},
    65  			want:    "456",
    66  			wantErr: false,
    67  		},
    68  		{
    69  			name: "int64",
    70  			args: args{
    71  				v: int64(12390),
    72  			},
    73  			want:    "12390",
    74  			wantErr: false,
    75  		},
    76  		{
    77  			name: "uint",
    78  			args: args{
    79  				v: uint(12390),
    80  			},
    81  			want:    "12390",
    82  			wantErr: false,
    83  		},
    84  		{
    85  			name: "uint8",
    86  			args: args{
    87  				v: uint8(12),
    88  			},
    89  			want:    "12",
    90  			wantErr: false,
    91  		},
    92  		{
    93  			name: "uint16",
    94  			args: args{
    95  				v: uint16(12390),
    96  			},
    97  			want:    "12390",
    98  			wantErr: false,
    99  		},
   100  		{
   101  			name: "uint32",
   102  			args: args{
   103  				v: uint32(12390),
   104  			},
   105  			want:    "12390",
   106  			wantErr: false,
   107  		},
   108  		{
   109  			name: "uint64",
   110  			args: args{
   111  				v: uint64(12390),
   112  			},
   113  			want:    "12390",
   114  			wantErr: false,
   115  		},
   116  		{
   117  			name: "bool",
   118  			args: args{
   119  				v: true,
   120  			},
   121  			want:    "true",
   122  			wantErr: false,
   123  		},
   124  		{
   125  			name: "stringer",
   126  			args: args{
   127  				v: Stringer{},
   128  			},
   129  			want:    "test",
   130  			wantErr: false,
   131  		},
   132  		{
   133  			name: "float32",
   134  			args: args{
   135  				v: float32(1.1),
   136  			},
   137  			want:    "1.1",
   138  			wantErr: false,
   139  		},
   140  		{
   141  			name: "float64",
   142  			args: args{
   143  				v: float64(1.11),
   144  			},
   145  			want:    "1.11",
   146  			wantErr: false,
   147  		},
   148  	}
   149  
   150  	for _, tt := range tests {
   151  		got, err := strutil.ConvertToStr(tt.args.v)
   152  		if (err != nil) != tt.wantErr {
   153  			t.Errorf("%q. ConvertToStr() error = %v, wantErr %v", tt.name, err, tt.wantErr)
   154  			continue
   155  		}
   156  		if got != tt.want {
   157  			t.Errorf("%q. ConvertToStr() = %v, want %v", tt.name, got, tt.want)
   158  		}
   159  	}
   160  }
   161  
   162  func TestConvertFromStr(t *testing.T) {
   163  	var int8V int8
   164  	var uint8V uint8
   165  	var int16V int16
   166  	var uint16V uint16
   167  	var stringV string
   168  	var boolV bool
   169  	var float32V float32
   170  	var duration time.Duration
   171  	type args struct {
   172  		strValue string
   173  		v        reflect.Value
   174  	}
   175  	tests := []struct {
   176  		name    string
   177  		args    args
   178  		wantErr bool
   179  	}{
   180  		{
   181  			name: "int8",
   182  			args: args{
   183  				strValue: "1",
   184  				v:        reflect.ValueOf(&int8V),
   185  			},
   186  			wantErr: false,
   187  		},
   188  		{
   189  			name: "int8",
   190  			args: args{
   191  				strValue: "100000000",
   192  				v:        reflect.ValueOf(&int8V),
   193  			},
   194  			wantErr: true,
   195  		},
   196  		{
   197  			name: "int8",
   198  			args: args{
   199  				strValue: "-1",
   200  				v:        reflect.ValueOf(&int8V),
   201  			},
   202  			wantErr: false,
   203  		},
   204  		{
   205  			name: "int8",
   206  			args: args{
   207  				strValue: "-1000000000",
   208  				v:        reflect.ValueOf(&int8V),
   209  			},
   210  			wantErr: true,
   211  		},
   212  		{
   213  			name: "uint8",
   214  			args: args{
   215  				strValue: "1",
   216  				v:        reflect.ValueOf(&uint8V),
   217  			},
   218  			wantErr: false,
   219  		},
   220  		{
   221  			name: "uint8",
   222  			args: args{
   223  				strValue: "-1",
   224  				v:        reflect.ValueOf(&uint8V),
   225  			},
   226  			wantErr: true,
   227  		},
   228  		{
   229  			name: "uint8",
   230  			args: args{
   231  				strValue: "10000000",
   232  				v:        reflect.ValueOf(&uint8V),
   233  			},
   234  			wantErr: true,
   235  		},
   236  		{
   237  			name: "int16",
   238  			args: args{
   239  				strValue: "32768",
   240  				v:        reflect.ValueOf(&int16V),
   241  			},
   242  			wantErr: true,
   243  		},
   244  		{
   245  			name: "int16",
   246  			args: args{
   247  				strValue: "-32769",
   248  				v:        reflect.ValueOf(&int16V),
   249  			},
   250  			wantErr: true,
   251  		},
   252  		{
   253  			name: "int16",
   254  			args: args{
   255  				strValue: "32767",
   256  				v:        reflect.ValueOf(&int16V),
   257  			},
   258  			wantErr: false,
   259  		},
   260  		{
   261  			name: "uint16",
   262  			args: args{
   263  				strValue: "65536",
   264  				v:        reflect.ValueOf(&uint16V),
   265  			},
   266  			wantErr: true,
   267  		},
   268  		{
   269  			name: "uint16",
   270  			args: args{
   271  				strValue: "-1",
   272  				v:        reflect.ValueOf(&uint16V),
   273  			},
   274  			wantErr: true,
   275  		},
   276  		{
   277  			name: "uint16",
   278  			args: args{
   279  				strValue: "65535",
   280  				v:        reflect.ValueOf(&uint16V),
   281  			},
   282  			wantErr: false,
   283  		},
   284  		{
   285  			name: "string",
   286  			args: args{
   287  				strValue: "abd-)123$123",
   288  				v:        reflect.ValueOf(&stringV),
   289  			},
   290  			wantErr: false,
   291  		},
   292  		{
   293  			name: "bool",
   294  			args: args{
   295  				strValue: "false",
   296  				v:        reflect.ValueOf(&boolV),
   297  			},
   298  			wantErr: false,
   299  		},
   300  		{
   301  			name: "bool",
   302  			args: args{
   303  				strValue: "False",
   304  				v:        reflect.ValueOf(&boolV),
   305  			},
   306  			wantErr: false,
   307  		},
   308  		{
   309  			name: "bool",
   310  			args: args{
   311  				strValue: "true",
   312  				v:        reflect.ValueOf(&boolV),
   313  			},
   314  			wantErr: false,
   315  		},
   316  		{
   317  			name: "bool",
   318  			args: args{
   319  				strValue: "True",
   320  				v:        reflect.ValueOf(&boolV),
   321  			},
   322  			wantErr: false,
   323  		},
   324  		{
   325  			name: "float32",
   326  			args: args{
   327  				strValue: "0.32",
   328  				v:        reflect.ValueOf(&float32V),
   329  			},
   330  			wantErr: false,
   331  		},
   332  		{
   333  			name: "duration",
   334  			args: args{
   335  				strValue: "30s",
   336  				v:        reflect.ValueOf(&duration),
   337  			},
   338  			wantErr: false,
   339  		},
   340  	}
   341  	for _, tt := range tests {
   342  		if err := strutil.ConvertFromStr(tt.args.strValue, tt.args.v); (err != nil) != tt.wantErr {
   343  			t.Errorf("%q. ConvertFromStr() error = %v, wantErr %v", tt.name, err, tt.wantErr)
   344  		}
   345  	}
   346  }