Browse Source

[Form] Changed semantics of "always_empty" option in PasswordField

If the option is true, the password is never written into the input field's value. If it is false, it is only written into the input field's value after submitting a form with errors.

The default value for "always_empty" is true.
Bernhard Schussek 14 years ago
parent
commit
cd64046811

+ 4 - 2
src/Symfony/Component/Form/PasswordField.php

@@ -28,10 +28,12 @@ class PasswordField extends TextField
         parent::configure();
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public function getDisplayedData()
     {
-        // TESTME
-        return $this->getOption('always_empty') && !$this->isBound()
+        return $this->getOption('always_empty') || !$this->isBound()
                 ? ''
                 : parent::getDisplayedData();
     }

+ 41 - 0
tests/Symfony/Tests/Component/Form/PasswordFieldTest.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace Symfony\Tests\Component\Form;
+
+/*
+ * This file is part of the Symfony framework.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+use Symfony\Component\Form\PasswordField;
+
+class PasswordFieldTest extends \PHPUnit_Framework_TestCase
+{
+    public function testGetDisplayedData()
+    {
+        $field = new PasswordField('name');
+        $field->setData('before');
+
+        $this->assertSame('', $field->getDisplayedData());
+
+        $field->bind('after');
+
+        $this->assertSame('', $field->getDisplayedData());
+    }
+
+    public function testGetDisplayedDataWithAlwaysEmptyDisabled()
+    {
+        $field = new PasswordField('name', array('always_empty' => false));
+        $field->setData('before');
+
+        $this->assertSame('', $field->getDisplayedData());
+
+        $field->bind('after');
+
+        $this->assertSame('after', $field->getDisplayedData());
+    }
+}