This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
symfony/tests/Symfony/Tests/Component/Form/AbstractDivLayoutTest.php

175 lines
4.3 KiB
PHP
Raw Normal View History

<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Tests\Component\Form;
use Symfony\Component\Form\FormError;
abstract class AbstractDivLayoutTest extends AbstractLayoutTest
{
public function testRow()
{
$form = $this->factory->create('text', 'name');
$form->addError(new FormError('Error!'));
$view = $form->getView();
$html = $this->renderRow($view);
$this->assertMatchesXpath($html,
'/div
[
./label[@for="name"]
/following-sibling::ul
[./li[.="[trans]Error![/trans]"]]
[count(./li)=1]
/following-sibling::input[@id="name"]
]
'
);
}
public function testRepeatedRow()
{
$form = $this->factory->create('repeated', 'name');
$form->addError(new FormError('Error!'));
$view = $form->getView();
$html = $this->renderRow($view);
$this->assertMatchesXpath($html,
'/ul
[./li[.="[trans]Error![/trans]"]]
[count(./li)=1]
/following-sibling::div
[
./label[@for="name_first"]
/following-sibling::input[@id="name_first"]
]
/following-sibling::div
[
./label[@for="name_second"]
/following-sibling::input[@id="name_second"]
]
'
);
}
public function testRest()
{
$view = $this->factory->createBuilder('form', 'name')
->add('field1', 'text')
->add('field2', 'repeated')
->add('field3', 'text')
->add('field4', 'text')
->getForm()
->getView();
// Render field2 row -> does not implicitely call renderWidget because
// it is a repeated field!
$this->renderRow($view['field2']);
// Render field3 widget
$this->renderWidget($view['field3']);
// Rest should only contain field1 and field4
$html = $this->renderRest($view);
$this->assertMatchesXpath($html,
'/input
[@type="hidden"]
[@id="name__token"]
/following-sibling::div
[
./label[@for="name_field1"]
/following-sibling::input[@type="text"][@id="name_field1"]
]
/following-sibling::div
[
./label[@for="name_field4"]
/following-sibling::input[@type="text"][@id="name_field4"]
]
[count(../div)=2]
[count(..//label)=2]
[count(..//input)=3]
'
);
}
public function testCollection()
{
$form = $this->factory->create('collection', 'name', array(
'type' => 'text',
'data' => array('a', 'b'),
));
$this->assertWidgetMatchesXpath($form->getView(), array(),
'/div
[
./div[./input[@type="text"][@value="a"]]
/following-sibling::div[./input[@type="text"][@value="b"]]
]
[count(./div[./input])=2]
'
);
}
public function testForm()
{
$form = $this->factory->createBuilder('form', 'name')
->add('firstName', 'text')
->add('lastName', 'text')
->getForm();
$this->assertWidgetMatchesXpath($form->getView(), array(),
'/div
[
./input[@type="hidden"][@id="name__token"]
/following-sibling::div
[
./label[@for="name_firstName"]
/following-sibling::input[@type="text"][@id="name_firstName"]
]
/following-sibling::div
[
./label[@for="name_lastName"]
/following-sibling::input[@type="text"][@id="name_lastName"]
]
]
[count(.//input)=3]
'
);
}
public function testRepeated()
{
$form = $this->factory->create('repeated', 'name', array(
'type' => 'text',
'data' => 'foobar',
));
$this->assertWidgetMatchesXpath($form->getView(), array(),
'/div
[
./div
[
./label[@for="name_first"]
/following-sibling::input[@type="text"][@id="name_first"]
]
/following-sibling::div
[
./label[@for="name_second"]
/following-sibling::input[@type="text"][@id="name_second"]
]
]
[count(.//input)=2]
'
);
}
}