File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 99
1010class JsonDocument {
1111 private bool $ hasError = false ;
12+ /** @var callable */
13+ private $ errorCallback ;
1214
1315 public function __construct (
1416 private ?JsonObject $ jsonObject = null ,
@@ -77,6 +79,13 @@ public function error(
7779 }
7880
7981 $ this ->hasError = true ;
82+ if (isset ($ this ->errorCallback )) {
83+ call_user_func ($ this ->errorCallback , $ message , $ context );
84+ }
85+ }
86+
87+ public function setErrorCallback (callable $ callback ):void {
88+ $ this ->errorCallback = $ callback ;
8089 }
8190
8291 /**
Original file line number Diff line number Diff line change @@ -163,4 +163,33 @@ public function testError_disallowsSetAfterError():void {
163163 $ sut ->error ("This is an error " );
164164 $ sut ->set ("one " , "example " );
165165 }
166+
167+ public function testSetErrorCallback ():void {
168+ $ calls = [];
169+ $ callback = function (string $ message , ?array $ context = null )use (&$ calls ):void {
170+ array_push ($ calls , [$ message , $ context ]);
171+ };
172+
173+ $ sut = new JsonDocument ();
174+ $ sut ->setErrorCallback ($ callback );
175+
176+ $ sut ->error ("Test " );
177+ self ::assertCount (1 , $ calls );
178+ self ::assertSame ("Test " , $ calls [0 ][0 ]);
179+ self ::assertNull ($ calls [0 ][1 ]);
180+ }
181+
182+ public function testSetErrorCallback_context ():void {
183+ $ calls = [];
184+ $ callback = function (string $ message , ?array $ context = null )use (&$ calls ):void {
185+ array_push ($ calls , [$ message , $ context ]);
186+ };
187+
188+ $ sut = new JsonDocument ();
189+ $ sut ->setErrorCallback ($ callback );
190+
191+ $ sut ->error ("Test " , ["example " => "message " ]);
192+ self ::assertCount (1 , $ calls );
193+ self ::assertSame (["example " => "message " ], $ calls [0 ][1 ]);
194+ }
166195}
You can’t perform that action at this time.
0 commit comments