github.com/viant/toolbox@v0.34.5/context_test.go (about) 1 package toolbox_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/viant/toolbox" 8 ) 9 10 type IMessage interface { 11 Message() string 12 } 13 14 type Message struct { 15 message string 16 } 17 18 func (this Message) Message() string { 19 return this.message 20 } 21 22 func TestContext(t *testing.T) { 23 context := toolbox.NewContext() 24 message1 := Message{message: "abc"} 25 26 //operate on pointer test 27 assert.False(t, context.Contains((*Message)(nil)), "Should not have message in context") 28 err := context.Put((*Message)(nil), &message1) 29 assert.Nil(t, err) 30 assert.True(t, context.Contains((*Message)(nil)), "Should have meesage in context") 31 assert.True(t, context.Contains(&Message{}), "Should have meesage in context") 32 33 value, err := context.GetRequired((*Message)(nil)) 34 assert.Nil(t, err) 35 m1 := value.(*Message) 36 assert.Equal(t, "abc", m1.message, "should have the same value field") 37 38 m10 := &Message{} 39 context.GetInto((*Message)(nil), &m10) 40 assert.Equal(t, "abc", m10.message, "should have the same value field") 41 42 m1.message = "xyz" 43 assert.Equal(t, "xyz", message1.message, "should have the same value field") 44 assert.Equal(t, "xyz", m10.message, "should have the same value field") 45 46 err = context.Put((*IMessage)(nil), &message1) 47 assert.Nil(t, err) 48 m2 := context.GetOptional((*IMessage)(nil)).(*IMessage) 49 assert.Equal(t, "xyz", (*m2).Message(), "should have the same value field") 50 51 //operate on struct passing by copy does not enable global changes 52 assert.False(t, context.Contains(Message{}), "Should not have message in context") 53 err = context.Put(Message{}, message1) 54 assert.Nil(t, err) 55 m3 := context.GetOptional(Message{}).(Message) 56 assert.Equal(t, "xyz", m3.message, "should have the same value field") 57 m3.message = "123" 58 assert.Equal(t, "123", m3.message, "should have the same value field") 59 assert.Equal(t, "xyz", m1.message, "should have the same value field") 60 61 err = context.Put(Message{}, message1) 62 assert.NotNil(t, err, "Key is already in context") 63 64 err = context.Replace(1, "abc") 65 assert.NotNil(t, err, "Incompatible type") 66 67 removed := context.Remove((*IMessage)(nil)) 68 assert.NotNil(t, removed) 69 70 _, err = context.GetRequired("abc") 71 assert.NotNil(t, err) 72 73 }