Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / symfony / config / Tests / Definition / ArrayNodeTest.php
index 0b5565e0b379bf08b30608dc90f578149bb70cd5..58d2939300f718378f7b6274b9a529450b194a07 100644 (file)
@@ -216,4 +216,36 @@ class ArrayNodeTest extends TestCase
         $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');
+    }
 }