github.com/sohaha/zlsgo@v1.7.13-0.20240501141223-10dd1a906f76/zdi/inject_test.go (about) 1 package zdi_test 2 3 import ( 4 "errors" 5 "testing" 6 "time" 7 8 "github.com/sohaha/zlsgo" 9 "github.com/sohaha/zlsgo/zdi" 10 "github.com/sohaha/zlsgo/ztime" 11 ) 12 13 type testSt2 struct { 14 Name string 15 } 16 17 func (t *testSt2) String() string { 18 return t.Name 19 } 20 21 type Itest interface { 22 String() string 23 } 24 25 func TestInterfaceOf(t *testing.T) { 26 tt := zlsgo.NewTest(t) 27 di := zdi.New() 28 29 val := time.Now() 30 _ = di.Map(val) 31 32 ok := "is ok" 33 invoke, err := di.Invoke(func(s Itest) string { 34 tt.Equal(s.String(), val.String()) 35 return ok 36 }) 37 tt.NoError(err) 38 tt.Equal(ok, invoke[0].String()) 39 40 val2 := &testSt2{Name: "val"} 41 o := di.Map(val2, zdi.WithInterface((*Itest)(nil))) 42 tt.EqualNil(o) 43 44 invoke, err = di.Invoke(func(s Itest) string { 45 tt.Equal(s.String(), "val") 46 return ok 47 }) 48 tt.NoError(err) 49 tt.Equal(ok, invoke[0].String()) 50 51 _, err = di.Invoke(func(s Itest, t time.Time) string { 52 tt.Equal(s.String(), "val") 53 tt.Equal(t.String(), val.String()) 54 return ok 55 }) 56 tt.NoError(err) 57 58 invoke, err = di.Invoke(func(t time.Time) string { 59 return ok 60 }) 61 tt.NoError(err) 62 tt.Equal(ok, invoke[0].String()) 63 } 64 65 func TestInvoke(t *testing.T) { 66 tt := zlsgo.NewTest(t) 67 di := zdi.New() 68 69 test := &testSt{Msg: ztime.Now(), Num: 666} 70 _ = di.Map(test) 71 72 ok := "is ok" 73 invoke, err := di.Invoke(func(s *testSt) string { 74 tt.Equal(s, test) 75 return ok 76 }) 77 tt.NoError(err) 78 tt.Equal(ok, invoke[0].String()) 79 80 invoke, err = di.Invoke(func(s testSt) string { 81 tt.Equal(s, test) 82 return ok 83 }) 84 tt.EqualTrue(err != nil) 85 t.Log(err, invoke) 86 87 test2 := testSt{Msg: ztime.Now(), Num: 666} 88 _ = di.Map(test2) 89 invoke, err = di.Invoke(func(s testSt, rs *testSt) int64 { 90 tt.Equal(s, test2) 91 tt.Equal(rs, test) 92 return 18 93 }) 94 tt.NoError(err) 95 tt.Equal(int64(18), int64(invoke[0].Int())) 96 } 97 98 func TestInvokeWithErrorOnly(t *testing.T) { 99 tt := zlsgo.NewTest(t) 100 di := zdi.New() 101 102 test := &testSt{Msg: ztime.Now(), Num: 666} 103 _ = di.Map(test) 104 105 { 106 err := di.InvokeWithErrorOnly(func(s *testSt) {}) 107 tt.NoError(err) 108 } 109 110 { 111 err := di.InvokeWithErrorOnly(func(s *testSt) error { 112 return nil 113 }) 114 tt.NoError(err) 115 } 116 117 { 118 err := di.InvokeWithErrorOnly(func(s *testSt) error { 119 return errors.New("test error") 120 }) 121 tt.Equal("test error", err.Error()) 122 } 123 124 { 125 err := di.InvokeWithErrorOnly(func(s *testSt) error { 126 panic("test panic") 127 return nil 128 }) 129 tt.Equal("test panic", err.Error()) 130 } 131 132 { 133 err := di.InvokeWithErrorOnly(func(s *testSt) (int, error) { 134 return 0, errors.New("test error") 135 }) 136 tt.Equal("test error", err.Error()) 137 } 138 }