case "NULL":
return "null";
case "object":
+ if (method_exists($value, '__toString')) {
+ return sprintf('\'%s\'', $value);
+ } elseif ($value instanceof \Serializable) {
+ try {
+ return $value->serialize();
+ } catch (\Exception $e) {
+ throw new \InvalidArgumentException(sprintf('Cannot serialize %s.', gettype($value)), $e);
+ }
+ } else {
+ throw new \InvalidArgumentException(sprintf('%s is an object without stringify.', gettype($value)));
+ }
case "resource":
case "resource (closed)":
throw new \InvalidArgumentException(sprintf('%s in configs are not supported yet.', gettype($value)));
--- /dev/null
+<?php
+/**
+ * @copyright Copyright (C) 2010-2023, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Test\Util;
+
+class SerializableObjectDouble implements \Serializable#
+{
+ public function serialize()
+ {
+ return '\'serialized\'';
+ }
+
+ public function unserialize($data)
+ {
+ return '\'unserialized\'';
+ }
+}
--- /dev/null
+<?php
+
+use Friendica\Test\Util\SerializableObjectDouble;
+use ParagonIE\HiddenString\HiddenString;
+
+return [
+ 'object' => [
+ 'toString' => new HiddenString('test'),
+ 'serializable' => new SerializableObjectDouble(),
+ ],
+];
use Friendica\Core\Config\Util\ConfigFileTransformer;
use Friendica\Test\MockedTest;
+use Friendica\Test\Util\SerializableObjectDouble;
+use ParagonIE\HiddenString\HiddenString;
+use function PHPUnit\Framework\assertEquals;
class ConfigFileTransformerTest extends MockedTest
{
'configFile' => (dirname(__DIR__, 4) . '/datasets/config/transformer/object.node.config.php'),
'assertException' => true,
],
- 'ressource_invalid' => [
+ 'ressource' => [
'configFile' => (dirname(__DIR__, 4) . '/datasets/config/transformer/ressource.node.config.php'),
- 'assertException' => true,
+ 'assertException' => false,
+ 'assertion' => <<<EOF
+<?php
+
+return [
+ 'ressource' => [
+ 'ressources_not_allowed' => '',
+ ],
+];
+
+EOF,
+ ],
+ 'object_valid' => [
+ 'configFile' => (dirname(__DIR__, 4) . '/datasets/config/transformer/object_valid.node.config.php'),
+ 'assertException' => false,
+ 'assertion' => <<<EOF
+<?php
+
+return [
+ 'object' => [
+ 'toString' => 'test',
+ 'serializable' => 'serialized',
+ ],
+];
+
+EOF,
],
'test_types' => [
'configFile' => (dirname(__DIR__, 4) . '/datasets/config/transformer/types.node.config.php'),
*
* @dataProvider dataTests
*/
- public function testConfigFile(string $configFile, bool $assertException = false)
+ public function testConfigFile(string $configFile, bool $assertException = false, $assertion = null)
{
$dataArray = include $configFile;
$newConfig = ConfigFileTransformer::encode($dataArray);
- self::assertEquals(file_get_contents($configFile), $newConfig);
+ if (empty($assertion)) {
+ self::assertEquals(file_get_contents($configFile), $newConfig);
+ } else {
+ self::assertEquals($assertion, $newConfig);
+ }
}
}