...

Source file src/github.com/lestrrat-go/blackmagic/blackmagic_test.go

Documentation: github.com/lestrrat-go/blackmagic

     1  package blackmagic_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/lestrrat-go/blackmagic"
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func TestAssignment(t *testing.T) {
    12  	testcases := []struct {
    13  		Name        string
    14  		Error       bool
    15  		Value       interface{}
    16  		Destination func() interface{}
    17  	}{
    18  		{
    19  			Name:  `empty struct`,
    20  			Error: false,
    21  			Value: struct{}{},
    22  			Destination: func() interface{} {
    23  				var v interface{}
    24  				return &v
    25  			},
    26  		},
    27  		{
    28  			Name:  `non pointer destination`,
    29  			Error: true,
    30  			Value: &struct{}{},
    31  		},
    32  		{
    33  			Name:  `assign empty struct to int`,
    34  			Error: true,
    35  			Value: &struct{}{},
    36  			Destination: func() interface{} {
    37  				var v int
    38  				return &v
    39  			},
    40  		},
    41  	}
    42  
    43  	for _, tc := range testcases {
    44  		tc := tc
    45  		t.Run(tc.Name, func(t *testing.T) {
    46  			var dst interface{}
    47  			if dstFunc := tc.Destination; dstFunc != nil {
    48  				dst = dstFunc()
    49  			}
    50  			err := blackmagic.AssignIfCompatible(dst, tc.Value)
    51  			if tc.Error {
    52  				if !assert.Error(t, err, `blackmagic.AssignIfCompatible should fail`) {
    53  					return
    54  				}
    55  			} else {
    56  				if !assert.NoError(t, err, `blackmagic.AssignIfCompatible should succeed`) {
    57  					return
    58  				}
    59  			}
    60  		})
    61  	}
    62  }
    63  
    64  func TestAssignOptionalField(t *testing.T) {
    65  	var f struct {
    66  		Foo *string
    67  		Bar *int
    68  	}
    69  
    70  	require.NoError(t, blackmagic.AssignOptionalField(&f.Foo, "Hello"), `blackmagic.AssignOptionalField should succeed`)
    71  	require.Equal(t, *(f.Foo), "Hello")
    72  	require.NoError(t, blackmagic.AssignOptionalField(&f.Bar, 1), `blackmagic.AssignOptionalField should succeed`)
    73  	require.Equal(t, *(f.Bar), 1)
    74  }
    75  

View as plain text