@@ -72,6 +72,41 @@ func TestErrorMessages(t *testing.T) {
7272 })
7373}
7474
75+ func TestImmutableError (t * testing.T ) {
76+ t .Run ("Property" , func (t * testing.T ) {
77+ err := testType .NewWithNoMessage ()
78+ err1 := err .WithProperty (PropertyPayload (), 1 )
79+ err2 := err1 .WithProperty (PropertyPayload (), 2 )
80+
81+ require .True (t , err .errorType .IsOfType (err2 .errorType ))
82+ require .Equal (t , err .message , err2 .message )
83+
84+ payload , ok := ExtractPayload (err )
85+ require .False (t , ok )
86+
87+ payload , ok = ExtractPayload (err1 )
88+ require .True (t , ok )
89+ require .EqualValues (t , 1 , payload )
90+
91+ payload , ok = ExtractPayload (err2 )
92+ require .True (t , ok )
93+ require .EqualValues (t , 2 , payload )
94+ })
95+
96+ t .Run ("Underlying" , func (t * testing.T ) {
97+ err := testType .NewWithNoMessage ()
98+ err1 := err .WithUnderlyingErrors (testSubtype0 .NewWithNoMessage ())
99+ err2 := err1 .WithUnderlyingErrors (testSubtype1 .NewWithNoMessage ())
100+
101+ require .True (t , err .errorType .IsOfType (err2 .errorType ))
102+ require .Equal (t , err .message , err2 .message )
103+
104+ require .Len (t , err .underlying , 0 )
105+ require .Len (t , err1 .underlying , 1 )
106+ require .Len (t , err2 .underlying , 2 )
107+ })
108+ }
109+
75110func TestErrorStackTrace (t * testing.T ) {
76111 err := createErrorFuncInStackTrace (testType )
77112 output := fmt .Sprintf ("%+v" , err )
0 commit comments