@@ -121,6 +121,57 @@ func TestRegisterExtras(t *testing.T) {
121
121
}
122
122
}
123
123
124
+ func TestZeroExtrasAndPointers (t * testing.T ) {
125
+ type (
126
+ ccExtra struct {
127
+ X int
128
+ NOOPHooks
129
+ }
130
+ rulesExtra struct {
131
+ X int
132
+ NOOPHooks
133
+ }
134
+ )
135
+
136
+ TestOnlyClearRegisteredExtras ()
137
+ t .Cleanup (TestOnlyClearRegisteredExtras )
138
+ getter := RegisterExtras (Extras [ccExtra , rulesExtra ]{})
139
+
140
+ var (
141
+ config ChainConfig
142
+ rules Rules
143
+ )
144
+ // These assertion helpers are defined before any modifications so that the
145
+ // closure is demonstrably over the original zero values.
146
+ assertChainConfigExtra := func (t * testing.T , want ccExtra , msg string ) {
147
+ t .Helper ()
148
+ assert .Equalf (t , want , getter .FromChainConfig (& config ), "%T: " + msg , & config )
149
+ }
150
+ assertRulesExtra := func (t * testing.T , want rulesExtra , msg string ) {
151
+ t .Helper ()
152
+ assert .Equalf (t , want , getter .FromRules (& rules ), "%T: " + msg , & rules )
153
+ }
154
+
155
+ assertChainConfigExtra (t , ccExtra {}, "zero value" )
156
+ assertRulesExtra (t , rulesExtra {}, "zero value" )
157
+
158
+ const answer = 42
159
+ getter .PointerFromChainConfig (& config ).X = answer
160
+ assertChainConfigExtra (t , ccExtra {X : answer }, "after setting via pointer field" )
161
+
162
+ const pi = 314159
163
+ getter .PointerFromRules (& rules ).X = pi
164
+ assertRulesExtra (t , rulesExtra {X : pi }, "after setting via pointer field" )
165
+
166
+ ccReplace := ccExtra {X : 142857 }
167
+ * getter .PointerFromChainConfig (& config ) = ccReplace
168
+ assertChainConfigExtra (t , ccReplace , "after replacement of entire extra via `*pointer = x`" )
169
+
170
+ rulesReplace := rulesExtra {X : 18101986 }
171
+ * getter .PointerFromRules (& rules ) = rulesReplace
172
+ assertRulesExtra (t , rulesReplace , "after replacement of entire extra via `*pointer = x`" )
173
+ }
174
+
124
175
func TestExtrasPanic (t * testing.T ) {
125
176
TestOnlyClearRegisteredExtras ()
126
177
defer TestOnlyClearRegisteredExtras ()
0 commit comments