assertEquals('foo', (new TestAuditHook())->formatMessage('{{test}}', ['test' => 'foo'])); } public function testFormatMessageResolvesNestedLevelParameters() { $this->assertEquals('foo', (new TestAuditHook())->formatMessage('{{te.st}}', ['te' => ['st' => 'foo']])); } public function testFormatMessageResolvesParametersWithSingleBraces() { $this->assertEquals('foo', (new TestAuditHook())->formatMessage('{{t{e}st}}', ['t{e}st' => 'foo'])); $this->assertEquals('foo', (new TestAuditHook())->formatMessage('{{te{.}st}}', ['te{' => ['}st' => 'foo']])); } public function testFormatMessageComplainsAboutUnresolvedParameters() { $this->expectException(\InvalidArgumentException::class); (new TestAuditHook())->formatMessage('{{missing}}', []); } public function testFormatMessageComplainsAboutNonScalarParameters() { $this->expectException(\InvalidArgumentException::class); (new TestAuditHook())->formatMessage('{{test}}', ['test' => ['foo' => 'bar']]); } public function testFormatMessageComplainsAboutNonArrayParameters() { $this->expectException(\InvalidArgumentException::class); (new TestAuditHook())->formatMessage('{{test.foo}}', ['test' => 'foo']); } }