github.com/sohaha/zlsgo@v1.7.13-0.20240501141223-10dd1a906f76/zreflect/reflect_test.go (about)

     1  package zreflect
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/sohaha/zlsgo"
     8  )
     9  
    10  var Demo = DemoSt{Name: "test reflect", Remark: "yes", Date2: time.Now(), pri: "is private"}
    11  
    12  func TestGetUnexportedField(t *testing.T) {
    13  	tt := zlsgo.NewTest(t)
    14  
    15  	tt.Run("pub", func(tt *zlsgo.TestUtil) {
    16  		value, err := GetUnexportedField(ValueOf(Demo), "Name")
    17  		tt.Log(value, err)
    18  		tt.NoError(err)
    19  		tt.EqualExit("test reflect", value.(string))
    20  
    21  		value, err = GetUnexportedField(ValueOf(&Demo), "Name")
    22  		tt.NoError(err)
    23  		tt.Log(value, err)
    24  		tt.EqualExit("test reflect", value.(string))
    25  	})
    26  
    27  	tt.Run("pri", func(tt *zlsgo.TestUtil) {
    28  		value, err := GetUnexportedField(ValueOf(Demo), "pri")
    29  		tt.Log(value, err)
    30  		tt.EqualTrue(err != nil)
    31  		tt.EqualExit(nil, value)
    32  
    33  		value, err = GetUnexportedField(ValueOf(&Demo), "pri")
    34  		tt.Log(value, err)
    35  		tt.NoError(err)
    36  		tt.EqualExit("is private", value.(string))
    37  	})
    38  
    39  	tt.Run("not exists", func(tt *zlsgo.TestUtil) {
    40  		value, err := GetUnexportedField(ValueOf(Demo), "pri_not_exists")
    41  		tt.Log(value, err)
    42  		tt.EqualTrue(err != nil)
    43  		tt.EqualExit(nil, value)
    44  
    45  		value, err = GetUnexportedField(ValueOf(&Demo), "pri_not_exists")
    46  		tt.Log(value, err)
    47  		tt.EqualTrue(err != nil)
    48  		tt.EqualExit(nil, value)
    49  	})
    50  }
    51  
    52  func TestSetUnexportedField(t *testing.T) {
    53  	tt := zlsgo.NewTest(t)
    54  
    55  	tt.Run("pub", func(tt *zlsgo.TestUtil) {
    56  		v := Demo
    57  		err := SetUnexportedField(ValueOf(&v), "Name", "new name")
    58  		tt.NoError(err)
    59  		tt.EqualExit("new name", v.Name)
    60  
    61  		v = Demo
    62  		err = SetUnexportedField(ValueOf(v), "Name", "new name")
    63  		tt.Log(err)
    64  		tt.EqualTrue(err != nil)
    65  		tt.EqualExit("test reflect", v.Name)
    66  
    67  		v = Demo
    68  		err = SetUnexportedField(ValueOf(&v), "Name", 1)
    69  		tt.Log(err)
    70  		tt.EqualTrue(err != nil)
    71  
    72  		v = Demo
    73  		err = SetUnexportedField(ValueOf(&v), "Any", 1)
    74  		tt.Log(err)
    75  		tt.NoError(err)
    76  		tt.EqualExit(1, v.Any)
    77  	})
    78  
    79  	tt.Run("pri", func(tt *zlsgo.TestUtil) {
    80  		v := Demo
    81  		err := SetUnexportedField(ValueOf(&v), "pri", "new pri")
    82  		tt.NoError(err)
    83  		tt.EqualExit("new pri", v.pri)
    84  
    85  		v = Demo
    86  		err = SetUnexportedField(ValueOf(v), "pri", "new name")
    87  		tt.Log(err)
    88  		tt.EqualTrue(err != nil)
    89  		tt.EqualExit("is private", v.pri)
    90  
    91  		v = Demo
    92  		err = SetUnexportedField(ValueOf(&v), "pri", 1)
    93  		tt.Log(err)
    94  		tt.EqualTrue(err != nil)
    95  
    96  		v = Demo
    97  		err = SetUnexportedField(ValueOf(&v), "any", 1)
    98  		tt.Log(err)
    99  		tt.NoError(err)
   100  		tt.EqualExit(1, v.any)
   101  	})
   102  
   103  	tt.Run("not exists", func(tt *zlsgo.TestUtil) {
   104  		v := Demo
   105  		err := SetUnexportedField(ValueOf(&v), "pri_not_exists", "new pri")
   106  		tt.Log(err)
   107  		tt.EqualTrue(err != nil)
   108  
   109  		v = Demo
   110  		err = SetUnexportedField(ValueOf(v), "pri", "new name")
   111  		tt.Log(err)
   112  		tt.EqualTrue(err != nil)
   113  	})
   114  }