Skip to content

Commit 13c5f25

Browse files
authored
Merge pull request #65 from phpgt/64-error-callback
feature: error callback
2 parents 21b1b38 + 7ee4b45 commit 13c5f25

2 files changed

Lines changed: 38 additions & 0 deletions

File tree

src/Schema/JsonDocument.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
class 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
/**

test/phpunit/Schema/JsonDocumentTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff 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
}

0 commit comments

Comments
 (0)