Skip to content

Commit

Permalink
Add more rendering tests
Browse files Browse the repository at this point in the history
  • Loading branch information
theseer committed Aug 12, 2023
1 parent 0b003c5 commit 5a801e2
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions tests/formdata/FormDataRendererTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\UsesClass;
use PHPUnit\Framework\TestCase;
use function iterator_to_array;

#[CoversClass(FormDataRenderer::class)]
#[UsesClass(FormData::class)]
Expand Down Expand Up @@ -105,4 +106,76 @@ public function testNoFormByGivenNameThrowsException(): void {
$this->expectException(FormDataRendererException::class);
$renderer->render($contextDOM->documentElement, $formdata);
}

public function testUnsetOptionGetsUnselected(): void {
$dom = new DOMDocument;
$dom->loadXML('<form id="test">
<select name="a[]" multiple="multiple">
<option value="a">a</option>
<option value="b" selected="selected">b</option>
<option value="c">c</option>
</select>
</form>');

(new FormDataRenderer)->render($dom->documentElement, new FormData('test', ['a' => [1 => 'b', 2 => 'c']]));

[$first, $second, $third] = $dom->getElementsByTagName('option');
$this->assertFalse($first->hasAttribute('selected'));
$this->assertTrue($second->hasAttribute('selected'));
$this->assertTrue($third->hasAttribute('selected'));
}

public function testMultiLevelArrayOnSelectWorks(): void {
$dom = new DOMDocument;
$dom->loadXML('<form id="test">
<select name="a[][][]" multiple="multiple">
<option value="a">a</option>
<option value="b" selected="selected">b</option>
<option value="c">c</option>
</select>
</form>');

(new FormDataRenderer)->render($dom->documentElement, new FormData('test', ['a' => [ [ ['c'] ] ] ]));

[$first, $second, $third] = $dom->getElementsByTagName('option');
$this->assertFalse($first->hasAttribute('selected'));
$this->assertFalse($second->hasAttribute('selected'));
$this->assertTrue($third->hasAttribute('selected'));
}

public function testArraySyntaxGetsResolvedProperly(): void {
$dom = new DOMDocument;
$dom->loadXML('<form id="test">
<input type="text" name="a[]" />
<input type="text" name="a[]" />
<input type="text" name="b[][]" />
<input type="text" name="c[][][]" />
<input type="text" name="d[a][][]" />
<input type="text" name="d[a][][b]" />
</form>');

(new FormDataRenderer)->render($dom->documentElement, new FormData('test', [
'a' => ['a1','a2'],
'b' => [['b1']],
'c' => [[['c1']]],
'd' => [
'a' => [
0 => ['d-a1'],
1 => [ 'b' => 'd-a-0-b1']]
]
]));

$expected = new DOMDocument;
$expected->loadXML(' <form id="test">
<input type="text" name="a[]" value="a1"/>
<input type="text" name="a[]" value="a2"/>
<input type="text" name="b[][]" value="b1"/>
<input type="text" name="c[][][]" value="c1"/>
<input type="text" name="d[a][][]" value="d-a1"/>
<input type="text" name="d[a][][b]" value="d-a-0-b1"/>
</form>');

$this->assertResultMatches($expected->documentElement, $dom->documentElement);

}
}

0 comments on commit 5a801e2

Please sign in to comment.