$node = new ArrayNode('foo');
$node->getDefaultValue();
}
+
+ public function testSetDeprecated()
+ {
+ $childNode = new ArrayNode('foo');
+ $childNode->setDeprecated('"%node%" is deprecated');
+
+ $this->assertTrue($childNode->isDeprecated());
+ $this->assertSame('"foo" is deprecated', $childNode->getDeprecationMessage($childNode->getName(), $childNode->getPath()));
+
+ $node = new ArrayNode('root');
+ $node->addChild($childNode);
+
+ $deprecationTriggered = false;
+ $deprecationHandler = function ($level, $message, $file, $line) use (&$prevErrorHandler, &$deprecationTriggered) {
+ if (E_USER_DEPRECATED === $level) {
+ return $deprecationTriggered = true;
+ }
+
+ return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
+ };
+
+ $prevErrorHandler = set_error_handler($deprecationHandler);
+ $node->finalize(array());
+ restore_error_handler();
+
+ $this->assertFalse($deprecationTriggered, '->finalize() should not trigger if the deprecated node is not set');
+
+ $prevErrorHandler = set_error_handler($deprecationHandler);
+ $node->finalize(array('foo' => array()));
+ restore_error_handler();
+ $this->assertTrue($deprecationTriggered, '->finalize() should trigger if the deprecated node is set');
+ }
}