diff options
author | John Molakvoæ <skjnldsv@users.noreply.github.com> | 2024-03-19 09:14:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-19 09:14:16 +0100 |
commit | 2b6affcd56d69f7125a0b209f7a278e407c999e1 (patch) | |
tree | 45679d2bddb2cdc903495740fe45d205aaf0410c | |
parent | 836af3c1793ae776554213c5e4023f4cfd1dc45c (diff) | |
parent | 354387b135270fb1dc096576804d4e14fb7af23a (diff) | |
download | nextcloud-server-2b6affcd56d69f7125a0b209f7a278e407c999e1.tar.gz nextcloud-server-2b6affcd56d69f7125a0b209f7a278e407c999e1.zip |
Merge pull request #44265 from nextcloud/backport/30417/stable28
-rw-r--r-- | lib/private/AppFramework/OCS/BaseResponse.php | 4 | ||||
-rw-r--r-- | tests/lib/AppFramework/OCS/BaseResponseTest.php | 39 |
2 files changed, 43 insertions, 0 deletions
diff --git a/lib/private/AppFramework/OCS/BaseResponse.php b/lib/private/AppFramework/OCS/BaseResponse.php index 3cfe8177ae7..78bcc5586d3 100644 --- a/lib/private/AppFramework/OCS/BaseResponse.php +++ b/lib/private/AppFramework/OCS/BaseResponse.php @@ -159,6 +159,10 @@ abstract class BaseResponse extends Response { $writer->startElement($k); $this->toXML($v, $writer); $writer->endElement(); + } elseif ($v instanceof \JsonSerializable) { + $writer->startElement($k); + $this->toXML($v->jsonSerialize(), $writer); + $writer->endElement(); } else { $writer->writeElement($k, $v); } diff --git a/tests/lib/AppFramework/OCS/BaseResponseTest.php b/tests/lib/AppFramework/OCS/BaseResponseTest.php index a1e0c620574..4857b573802 100644 --- a/tests/lib/AppFramework/OCS/BaseResponseTest.php +++ b/tests/lib/AppFramework/OCS/BaseResponseTest.php @@ -28,6 +28,17 @@ namespace Test\AppFramework\Middleware; use OC\AppFramework\OCS\BaseResponse; +class ArrayValue implements \JsonSerializable { + private $array; + public function __construct(array $array) { + $this->array = $array; + } + + public function jsonSerialize(): mixed { + return $this->array; + } +} + class BaseResponseTest extends \Test\TestCase { public function testToXml(): void { /** @var BaseResponse $response */ @@ -56,4 +67,32 @@ class BaseResponseTest extends \Test\TestCase { $writer->outputMemory(true) ); } + + public function testToXmlJsonSerializable(): void { + /** @var BaseResponse $response */ + $response = $this->createMock(BaseResponse::class); + + $writer = new \XMLWriter(); + $writer->openMemory(); + $writer->setIndent(false); + $writer->startDocument(); + + $data = [ + 'hello' => 'hello', + 'information' => new ArrayValue([ + '@test' => 'some data', + 'someElement' => 'withAttribute', + ]), + 'value without key', + 'object' => new \stdClass(), + ]; + + $this->invokePrivate($response, 'toXml', [$data, $writer]); + $writer->endDocument(); + + $this->assertEquals( + "<?xml version=\"1.0\"?>\n<hello>hello</hello><information test=\"some data\"><someElement>withAttribute</someElement></information><element>value without key</element><object/>\n", + $writer->outputMemory(true) + ); + } } |