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 }