3 namespace Drupal\Tests\Core\Form;
5 use Drupal\Core\Form\FormStateValuesTrait;
6 use Drupal\Tests\UnitTestCase;
9 * @coversDefaultClass \Drupal\Core\Form\FormStateValuesTrait
13 class FormStateValuesTraitTest extends UnitTestCase {
16 * Tests that setting the value for an element adds to the values.
18 * @covers ::setValueForElement
20 public function testSetValueForElement() {
27 $value = $this->randomMachineName();
29 $form_state = new FormStateValuesTraitStub();
30 $form_state->setValueForElement($element, $value);
36 $this->assertSame($expected, $form_state->getValues());
42 * @dataProvider providerGetValue
44 public function testGetValue($key, $expected, $default = NULL) {
45 $form_state = (new FormStateValuesTraitStub())->setValues([
51 $this->assertSame($expected, $form_state->getValue($key, $default));
55 * Provides data to self::testGetValue().
58 * Items are arrays of two items:
59 * - The key for which to get the value (string)
60 * - The expected value (mixed).
61 * - The default value (mixed).
63 public function providerGetValue() {
69 ['bar', 'baz'], 'two',
72 ['foo', 'bar', 'baz'], NULL,
92 public function testGetValueModifyReturn() {
93 $initial_values = $values = [
99 $form_state = (new FormStateValuesTraitStub())->setValues($values);
101 $value = &$form_state->getValue(NULL);
102 $this->assertSame($initial_values, $value);
103 $value = ['bing' => 'bang'];
104 $this->assertSame(['bing' => 'bang'], $form_state->getValues());
105 $this->assertSame('bang', $form_state->getValue('bing'));
106 $this->assertSame(['bing' => 'bang'], $form_state->getValue(NULL));
112 * @dataProvider providerSetValue
114 public function testSetValue($key, $value, $expected) {
115 $form_state = (new FormStateValuesTraitStub())->setValues([
118 $form_state->setValue($key, $value);
119 $this->assertSame($expected, $form_state->getValues());
123 * Provides data to self::testSetValue().
126 * Items are arrays of two items:
127 * - The key for which to set a new value (string)
128 * - The new value to set (mixed).
129 * - The expected form state values after setting the new value (mixed[]).
131 public function providerSetValue() {
134 'foo', 'one', ['bar' => 'wrong', 'foo' => 'one'],
137 ['bar', 'baz'], 'two', ['bar' => ['baz' => 'two']],
140 ['foo', 'bar', 'baz'], NULL, ['bar' => 'wrong', 'foo' => ['bar' => ['baz' => NULL]]],
148 * @dataProvider providerHasValue
150 public function testHasValue($key, $expected) {
151 $form_state = (new FormStateValuesTraitStub())->setValues([
160 $this->assertSame($expected, $form_state->hasValue($key));
164 * Provides data to self::testHasValue().
167 * Items are arrays of two items:
168 * - The key to check for in the form state (string)
169 * - Whether the form state has an item with that key (bool).
171 public function providerHasValue() {
177 ['bar', 'baz'], TRUE,
180 ['foo', 'bar', 'baz'], FALSE,
195 * @covers ::isValueEmpty
197 * @dataProvider providerIsValueEmpty
199 public function testIsValueEmpty($key, $expected) {
200 $form_state = (new FormStateValuesTraitStub())->setValues([
209 $this->assertSame($expected, $form_state->isValueEmpty($key));
213 * Provides data to self::testIsValueEmpty().
216 * Items are arrays of two items:
217 * - The key to check for in the form state (string)
218 * - Whether the value is empty or not (bool).
220 public function providerIsValueEmpty() {
226 ['bar', 'baz'], FALSE,
229 ['foo', 'bar', 'baz'], TRUE,
245 class FormStateValuesTraitStub {
247 use FormStateValuesTrait;
250 * The submitted form values.
254 protected $values = [];
259 public function &getValues() {
260 return $this->values;