More updates to stop using dev or alpha or beta versions.
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Form / FormStateValuesTraitTest.php
1 <?php
2
3 namespace Drupal\Tests\Core\Form;
4
5 use Drupal\Core\Form\FormStateValuesTrait;
6 use Drupal\Tests\UnitTestCase;
7
8 /**
9  * @coversDefaultClass \Drupal\Core\Form\FormStateValuesTrait
10  *
11  * @group Form
12  */
13 class FormStateValuesTraitTest extends UnitTestCase {
14
15   /**
16    * Tests that setting the value for an element adds to the values.
17    *
18    * @covers ::setValueForElement
19    */
20   public function testSetValueForElement() {
21     $element = [
22       '#parents' => [
23         'foo',
24         'bar',
25       ],
26     ];
27     $value = $this->randomMachineName();
28
29     $form_state = new FormStateValuesTraitStub();
30     $form_state->setValueForElement($element, $value);
31     $expected = [
32       'foo' => [
33         'bar' => $value,
34       ],
35     ];
36     $this->assertSame($expected, $form_state->getValues());
37   }
38
39   /**
40    * @covers ::getValue
41    *
42    * @dataProvider providerGetValue
43    */
44   public function testGetValue($key, $expected, $default = NULL) {
45     $form_state = (new FormStateValuesTraitStub())->setValues([
46       'foo' => 'one',
47       'bar' => [
48         'baz' => 'two',
49       ],
50     ]);
51     $this->assertSame($expected, $form_state->getValue($key, $default));
52   }
53
54   /**
55    * Provides data to self::testGetValue().
56    *
57    * @return array[]
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).
62    */
63   public function providerGetValue() {
64     $data = [];
65     $data[] = [
66       'foo', 'one',
67     ];
68     $data[] = [
69       ['bar', 'baz'], 'two',
70     ];
71     $data[] = [
72       ['foo', 'bar', 'baz'], NULL,
73     ];
74     $data[] = [
75       'baz', 'baz', 'baz',
76     ];
77     $data[] = [
78       NULL,
79       [
80         'foo' => 'one',
81         'bar' => [
82           'baz' => 'two',
83         ],
84       ],
85     ];
86     return $data;
87   }
88
89   /**
90    * @covers ::getValue
91    */
92   public function testGetValueModifyReturn() {
93     $initial_values = $values = [
94       'foo' => 'one',
95       'bar' => [
96         'baz' => 'two',
97       ],
98     ];
99     $form_state = (new FormStateValuesTraitStub())->setValues($values);
100
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));
107   }
108
109   /**
110    * @covers ::setValue
111    *
112    * @dataProvider providerSetValue
113    */
114   public function testSetValue($key, $value, $expected) {
115     $form_state = (new FormStateValuesTraitStub())->setValues([
116       'bar' => 'wrong',
117     ]);
118     $form_state->setValue($key, $value);
119     $this->assertSame($expected, $form_state->getValues());
120   }
121
122   /**
123    * Provides data to self::testSetValue().
124    *
125    * @return array[]
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[]).
130    */
131   public function providerSetValue() {
132     $data = [];
133     $data[] = [
134       'foo', 'one', ['bar' => 'wrong', 'foo' => 'one'],
135     ];
136     $data[] = [
137       ['bar', 'baz'], 'two', ['bar' => ['baz' => 'two']],
138     ];
139     $data[] = [
140       ['foo', 'bar', 'baz'], NULL, ['bar' => 'wrong', 'foo' => ['bar' => ['baz' => NULL]]],
141     ];
142     return $data;
143   }
144
145   /**
146    * @covers ::hasValue
147    *
148    * @dataProvider providerHasValue
149    */
150   public function testHasValue($key, $expected) {
151     $form_state = (new FormStateValuesTraitStub())->setValues([
152       'foo' => 'one',
153       'bar' => [
154         'baz' => 'two',
155       ],
156       'true' => TRUE,
157       'false' => FALSE,
158       'null' => NULL,
159     ]);
160     $this->assertSame($expected, $form_state->hasValue($key));
161   }
162
163   /**
164    * Provides data to self::testHasValue().
165    *
166    * @return array[]
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).
170    */
171   public function providerHasValue() {
172     $data = [];
173     $data[] = [
174       'foo', TRUE,
175     ];
176     $data[] = [
177       ['bar', 'baz'], TRUE,
178     ];
179     $data[] = [
180       ['foo', 'bar', 'baz'], FALSE,
181     ];
182     $data[] = [
183       'true', TRUE,
184     ];
185     $data[] = [
186       'false', TRUE,
187     ];
188     $data[] = [
189       'null', FALSE,
190     ];
191     return $data;
192   }
193
194   /**
195    * @covers ::isValueEmpty
196    *
197    * @dataProvider providerIsValueEmpty
198    */
199   public function testIsValueEmpty($key, $expected) {
200     $form_state = (new FormStateValuesTraitStub())->setValues([
201       'foo' => 'one',
202       'bar' => [
203         'baz' => 'two',
204       ],
205       'true' => TRUE,
206       'false' => FALSE,
207       'null' => NULL,
208     ]);
209     $this->assertSame($expected, $form_state->isValueEmpty($key));
210   }
211
212   /**
213    * Provides data to self::testIsValueEmpty().
214    *
215    * @return array[]
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).
219    */
220   public function providerIsValueEmpty() {
221     $data = [];
222     $data[] = [
223       'foo', FALSE,
224     ];
225     $data[] = [
226       ['bar', 'baz'], FALSE,
227     ];
228     $data[] = [
229       ['foo', 'bar', 'baz'], TRUE,
230     ];
231     $data[] = [
232       'true', FALSE,
233     ];
234     $data[] = [
235       'false', TRUE,
236     ];
237     $data[] = [
238       'null', TRUE,
239     ];
240     return $data;
241   }
242
243 }
244
245 class FormStateValuesTraitStub {
246
247   use FormStateValuesTrait;
248
249   /**
250    * The submitted form values.
251    *
252    * @var mixed[]
253    */
254   protected $values = [];
255
256   /**
257    * {@inheritdoc}
258    */
259   public function &getValues() {
260     return $this->values;
261   }
262
263 }