744 lines
21 KiB
PHP
744 lines
21 KiB
PHP
<?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\Component\Form\Tests\Extension\Core\Type;
|
|
|
|
use Symfony\Component\Form\Extension\Core\View\ChoiceView;
|
|
use Symfony\Component\Form\FormError;
|
|
|
|
class DateTypeTest extends LocalizedTestCase
|
|
{
|
|
protected function setUp()
|
|
{
|
|
parent::setUp();
|
|
|
|
\Locale::setDefault('de_AT');
|
|
}
|
|
|
|
/**
|
|
* @expectedException Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
|
|
*/
|
|
public function testInvalidWidgetOption()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'widget' => 'fake_widget',
|
|
));
|
|
}
|
|
|
|
/**
|
|
* @expectedException Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
|
|
*/
|
|
public function testInvalidInputOption()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'input' => 'fake_input',
|
|
));
|
|
}
|
|
|
|
public function testSubmitFromSingleTextDateTimeWithDefaultFormat()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'widget' => 'single_text',
|
|
'input' => 'datetime',
|
|
));
|
|
|
|
$form->bind('2010-06-02');
|
|
|
|
$this->assertDateTimeEquals(new \DateTime('2010-06-02 UTC'), $form->getData());
|
|
$this->assertEquals('2010-06-02', $form->getViewData());
|
|
}
|
|
|
|
public function testSubmitFromSingleTextDateTime()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'format' => \IntlDateFormatter::MEDIUM,
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'widget' => 'single_text',
|
|
'input' => 'datetime',
|
|
));
|
|
|
|
$form->bind('2.6.2010');
|
|
|
|
$this->assertDateTimeEquals(new \DateTime('2010-06-02 UTC'), $form->getData());
|
|
$this->assertEquals('02.06.2010', $form->getViewData());
|
|
}
|
|
|
|
public function testSubmitFromSingleTextString()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'format' => \IntlDateFormatter::MEDIUM,
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'widget' => 'single_text',
|
|
'input' => 'string',
|
|
));
|
|
|
|
$form->bind('2.6.2010');
|
|
|
|
$this->assertEquals('2010-06-02', $form->getData());
|
|
$this->assertEquals('02.06.2010', $form->getViewData());
|
|
}
|
|
|
|
public function testSubmitFromSingleTextTimestamp()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'format' => \IntlDateFormatter::MEDIUM,
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'widget' => 'single_text',
|
|
'input' => 'timestamp',
|
|
));
|
|
|
|
$form->bind('2.6.2010');
|
|
|
|
$dateTime = new \DateTime('2010-06-02 UTC');
|
|
|
|
$this->assertEquals($dateTime->format('U'), $form->getData());
|
|
$this->assertEquals('02.06.2010', $form->getViewData());
|
|
}
|
|
|
|
public function testSubmitFromSingleTextRaw()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'format' => \IntlDateFormatter::MEDIUM,
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'widget' => 'single_text',
|
|
'input' => 'array',
|
|
));
|
|
|
|
$form->bind('2.6.2010');
|
|
|
|
$output = array(
|
|
'day' => '2',
|
|
'month' => '6',
|
|
'year' => '2010',
|
|
);
|
|
|
|
$this->assertEquals($output, $form->getData());
|
|
$this->assertEquals('02.06.2010', $form->getViewData());
|
|
}
|
|
|
|
public function testSubmitFromText()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'widget' => 'text',
|
|
));
|
|
|
|
$text = array(
|
|
'day' => '2',
|
|
'month' => '6',
|
|
'year' => '2010',
|
|
);
|
|
|
|
$form->bind($text);
|
|
|
|
$dateTime = new \DateTime('2010-06-02 UTC');
|
|
|
|
$this->assertDateTimeEquals($dateTime, $form->getData());
|
|
$this->assertEquals($text, $form->getViewData());
|
|
}
|
|
|
|
public function testSubmitFromChoice()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'widget' => 'choice',
|
|
));
|
|
|
|
$text = array(
|
|
'day' => '2',
|
|
'month' => '6',
|
|
'year' => '2010',
|
|
);
|
|
|
|
$form->bind($text);
|
|
|
|
$dateTime = new \DateTime('2010-06-02 UTC');
|
|
|
|
$this->assertDateTimeEquals($dateTime, $form->getData());
|
|
$this->assertEquals($text, $form->getViewData());
|
|
}
|
|
|
|
public function testSubmitFromChoiceEmpty()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'widget' => 'choice',
|
|
'required' => false,
|
|
));
|
|
|
|
$text = array(
|
|
'day' => '',
|
|
'month' => '',
|
|
'year' => '',
|
|
);
|
|
|
|
$form->bind($text);
|
|
|
|
$this->assertNull($form->getData());
|
|
$this->assertEquals($text, $form->getViewData());
|
|
}
|
|
|
|
public function testSubmitFromInputDateTimeDifferentPattern()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'format' => 'MM*yyyy*dd',
|
|
'widget' => 'single_text',
|
|
'input' => 'datetime',
|
|
));
|
|
|
|
$form->bind('06*2010*02');
|
|
|
|
$this->assertDateTimeEquals(new \DateTime('2010-06-02 UTC'), $form->getData());
|
|
$this->assertEquals('06*2010*02', $form->getViewData());
|
|
}
|
|
|
|
public function testSubmitFromInputStringDifferentPattern()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'format' => 'MM*yyyy*dd',
|
|
'widget' => 'single_text',
|
|
'input' => 'string',
|
|
));
|
|
|
|
$form->bind('06*2010*02');
|
|
|
|
$this->assertEquals('2010-06-02', $form->getData());
|
|
$this->assertEquals('06*2010*02', $form->getViewData());
|
|
}
|
|
|
|
public function testSubmitFromInputTimestampDifferentPattern()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'format' => 'MM*yyyy*dd',
|
|
'widget' => 'single_text',
|
|
'input' => 'timestamp',
|
|
));
|
|
|
|
$form->bind('06*2010*02');
|
|
|
|
$dateTime = new \DateTime('2010-06-02 UTC');
|
|
|
|
$this->assertEquals($dateTime->format('U'), $form->getData());
|
|
$this->assertEquals('06*2010*02', $form->getViewData());
|
|
}
|
|
|
|
public function testSubmitFromInputRawDifferentPattern()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'format' => 'MM*yyyy*dd',
|
|
'widget' => 'single_text',
|
|
'input' => 'array',
|
|
));
|
|
|
|
$form->bind('06*2010*02');
|
|
|
|
$output = array(
|
|
'day' => '2',
|
|
'month' => '6',
|
|
'year' => '2010',
|
|
);
|
|
|
|
$this->assertEquals($output, $form->getData());
|
|
$this->assertEquals('06*2010*02', $form->getViewData());
|
|
}
|
|
|
|
/**
|
|
* This test is to check that the strings '0', '1', '2', '3' are no accepted
|
|
* as valid IntlDateFormatter constants for FULL, LONG, MEDIUM or SHORT respectively.
|
|
*
|
|
* @expectedException Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
|
|
*/
|
|
public function testThrowExceptionIfFormatIsNoPattern()
|
|
{
|
|
$this->factory->create('date', null, array(
|
|
'format' => '0',
|
|
'widget' => 'single_text',
|
|
'input' => 'string',
|
|
));
|
|
}
|
|
|
|
/**
|
|
* @expectedException Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
|
|
*/
|
|
public function testThrowExceptionIfFormatDoesNotContainYearMonthAndDay()
|
|
{
|
|
$this->factory->create('date', null, array(
|
|
'months' => array(6, 7),
|
|
'format' => 'yy',
|
|
));
|
|
}
|
|
|
|
/**
|
|
* @expectedException Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
|
|
*/
|
|
public function testThrowExceptionIfFormatIsNoConstant()
|
|
{
|
|
$this->factory->create('date', null, array(
|
|
'format' => 105,
|
|
));
|
|
}
|
|
|
|
/**
|
|
* @expectedException Symfony\Component\OptionsResolver\Exception\InvalidOptionsException
|
|
*/
|
|
public function testThrowExceptionIfFormatIsInvalid()
|
|
{
|
|
$this->factory->create('date', null, array(
|
|
'format' => array(),
|
|
));
|
|
}
|
|
|
|
public function testSetData_differentTimezones()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'format' => \IntlDateFormatter::MEDIUM,
|
|
'model_timezone' => 'America/New_York',
|
|
'view_timezone' => 'Pacific/Tahiti',
|
|
'input' => 'string',
|
|
'widget' => 'single_text',
|
|
));
|
|
|
|
$form->setData('2010-06-02');
|
|
|
|
$this->assertEquals('01.06.2010', $form->getViewData());
|
|
}
|
|
|
|
public function testSetData_differentTimezonesDateTime()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'format' => \IntlDateFormatter::MEDIUM,
|
|
'model_timezone' => 'America/New_York',
|
|
'view_timezone' => 'Pacific/Tahiti',
|
|
'input' => 'datetime',
|
|
'widget' => 'single_text',
|
|
));
|
|
|
|
$dateTime = new \DateTime('2010-06-02 America/New_York');
|
|
|
|
$form->setData($dateTime);
|
|
|
|
$this->assertDateTimeEquals($dateTime, $form->getData());
|
|
$this->assertEquals('01.06.2010', $form->getViewData());
|
|
}
|
|
|
|
public function testYearsOption()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'years' => array(2010, 2011),
|
|
));
|
|
|
|
$view = $form->createView();
|
|
|
|
$this->assertEquals(array(
|
|
new ChoiceView('2010', '2010'),
|
|
new ChoiceView('2011', '2011'),
|
|
), $view['year']->vars['choices']);
|
|
}
|
|
|
|
public function testMonthsOption()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'months' => array(6, 7),
|
|
));
|
|
|
|
$view = $form->createView();
|
|
|
|
$this->assertEquals(array(
|
|
new ChoiceView('6', '06'),
|
|
new ChoiceView('7', '07'),
|
|
), $view['month']->vars['choices']);
|
|
}
|
|
|
|
public function testMonthsOptionShortFormat()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'months' => array(1, 4),
|
|
'format' => 'dd.MMM.yy',
|
|
));
|
|
|
|
$view = $form->createView();
|
|
|
|
$this->assertEquals(array(
|
|
new ChoiceView('1', 'Jän'),
|
|
new ChoiceView('4', 'Apr')
|
|
), $view['month']->vars['choices']);
|
|
}
|
|
|
|
public function testMonthsOptionLongFormat()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'months' => array(1, 4),
|
|
'format' => 'dd.MMMM.yy',
|
|
));
|
|
|
|
$view = $form->createView();
|
|
|
|
$this->assertEquals(array(
|
|
new ChoiceView('1', 'Jänner'),
|
|
new ChoiceView('4', 'April'),
|
|
), $view['month']->vars['choices']);
|
|
}
|
|
|
|
public function testMonthsOptionLongFormatWithDifferentTimezone()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'months' => array(1, 4),
|
|
'format' => 'dd.MMMM.yy',
|
|
));
|
|
|
|
$view = $form->createView();
|
|
|
|
$this->assertEquals(array(
|
|
new ChoiceView('1', 'Jänner'),
|
|
new ChoiceView('4', 'April'),
|
|
), $view['month']->vars['choices']);
|
|
}
|
|
|
|
public function testIsDayWithinRangeReturnsTrueIfWithin()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'days' => array(6, 7),
|
|
));
|
|
|
|
$view = $form->createView();
|
|
|
|
$this->assertEquals(array(
|
|
new ChoiceView('6', '06'),
|
|
new ChoiceView('7', '07'),
|
|
), $view['day']->vars['choices']);
|
|
}
|
|
|
|
public function testIsPartiallyFilledReturnsFalseIfSingleText()
|
|
{
|
|
$this->markTestIncomplete('Needs to be reimplemented using validators');
|
|
|
|
$form = $this->factory->create('date', null, array(
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'widget' => 'single_text',
|
|
));
|
|
|
|
$form->bind('7.6.2010');
|
|
|
|
$this->assertFalse($form->isPartiallyFilled());
|
|
}
|
|
|
|
public function testIsPartiallyFilledReturnsFalseIfChoiceAndCompletelyEmpty()
|
|
{
|
|
$this->markTestIncomplete('Needs to be reimplemented using validators');
|
|
|
|
$form = $this->factory->create('date', null, array(
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'widget' => 'choice',
|
|
));
|
|
|
|
$form->bind(array(
|
|
'day' => '',
|
|
'month' => '',
|
|
'year' => '',
|
|
));
|
|
|
|
$this->assertFalse($form->isPartiallyFilled());
|
|
}
|
|
|
|
public function testIsPartiallyFilledReturnsFalseIfChoiceAndCompletelyFilled()
|
|
{
|
|
$this->markTestIncomplete('Needs to be reimplemented using validators');
|
|
|
|
$form = $this->factory->create('date', null, array(
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'widget' => 'choice',
|
|
));
|
|
|
|
$form->bind(array(
|
|
'day' => '2',
|
|
'month' => '6',
|
|
'year' => '2010',
|
|
));
|
|
|
|
$this->assertFalse($form->isPartiallyFilled());
|
|
}
|
|
|
|
public function testIsPartiallyFilledReturnsTrueIfChoiceAndDayEmpty()
|
|
{
|
|
$this->markTestIncomplete('Needs to be reimplemented using validators');
|
|
|
|
$form = $this->factory->create('date', null, array(
|
|
'model_timezone' => 'UTC',
|
|
'view_timezone' => 'UTC',
|
|
'widget' => 'choice',
|
|
));
|
|
|
|
$form->bind(array(
|
|
'day' => '',
|
|
'month' => '6',
|
|
'year' => '2010',
|
|
));
|
|
|
|
$this->assertTrue($form->isPartiallyFilled());
|
|
}
|
|
|
|
public function testPassDatePatternToView()
|
|
{
|
|
$form = $this->factory->create('date');
|
|
$view = $form->createView();
|
|
|
|
$this->assertSame('{{ year }}-{{ month }}-{{ day }}', $view->vars['date_pattern']);
|
|
}
|
|
|
|
public function testPassDatePatternToViewDifferentFormat()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'format' => \IntlDateFormatter::MEDIUM,
|
|
));
|
|
|
|
$view = $form->createView();
|
|
|
|
$this->assertSame('{{ day }}.{{ month }}.{{ year }}', $view->vars['date_pattern']);
|
|
}
|
|
|
|
public function testPassDatePatternToViewDifferentPattern()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'format' => 'MM*yyyy*dd'
|
|
));
|
|
|
|
$view = $form->createView();
|
|
|
|
$this->assertSame('{{ month }}*{{ year }}*{{ day }}', $view->vars['date_pattern']);
|
|
}
|
|
|
|
public function testDontPassDatePatternIfText()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'widget' => 'single_text',
|
|
));
|
|
$view = $form->createView();
|
|
|
|
$this->assertFalse(isset($view->vars['date_pattern']));
|
|
}
|
|
|
|
public function testPassWidgetToView()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'widget' => 'single_text',
|
|
));
|
|
$view = $form->createView();
|
|
|
|
$this->assertSame('single_text', $view->vars['widget']);
|
|
}
|
|
|
|
// Bug fix
|
|
public function testInitializeWithDateTime()
|
|
{
|
|
// Throws an exception if "data_class" option is not explicitly set
|
|
// to null in the type
|
|
$this->factory->create('date', new \DateTime());
|
|
}
|
|
|
|
public function testSingleTextWidgetShouldUseTheRightInputType()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'widget' => 'single_text',
|
|
));
|
|
|
|
$view = $form->createView();
|
|
$this->assertEquals('date', $view->vars['type']);
|
|
}
|
|
|
|
public function testPassDefaultEmptyValueToViewIfNotRequired()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'required' => false,
|
|
));
|
|
|
|
$view = $form->createView();
|
|
$this->assertSame('', $view['year']->vars['empty_value']);
|
|
$this->assertSame('', $view['month']->vars['empty_value']);
|
|
$this->assertSame('', $view['day']->vars['empty_value']);
|
|
}
|
|
|
|
public function testPassNoEmptyValueToViewIfRequired()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'required' => true,
|
|
));
|
|
|
|
$view = $form->createView();
|
|
$this->assertNull($view['year']->vars['empty_value']);
|
|
$this->assertNull($view['month']->vars['empty_value']);
|
|
$this->assertNull($view['day']->vars['empty_value']);
|
|
}
|
|
|
|
public function testPassEmptyValueAsString()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'empty_value' => 'Empty',
|
|
));
|
|
|
|
$view = $form->createView();
|
|
$this->assertSame('Empty', $view['year']->vars['empty_value']);
|
|
$this->assertSame('Empty', $view['month']->vars['empty_value']);
|
|
$this->assertSame('Empty', $view['day']->vars['empty_value']);
|
|
}
|
|
|
|
public function testPassEmptyValueAsArray()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'empty_value' => array(
|
|
'year' => 'Empty year',
|
|
'month' => 'Empty month',
|
|
'day' => 'Empty day',
|
|
),
|
|
));
|
|
|
|
$view = $form->createView();
|
|
$this->assertSame('Empty year', $view['year']->vars['empty_value']);
|
|
$this->assertSame('Empty month', $view['month']->vars['empty_value']);
|
|
$this->assertSame('Empty day', $view['day']->vars['empty_value']);
|
|
}
|
|
|
|
public function testPassEmptyValueAsPartialArray_addEmptyIfNotRequired()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'required' => false,
|
|
'empty_value' => array(
|
|
'year' => 'Empty year',
|
|
'day' => 'Empty day',
|
|
),
|
|
));
|
|
|
|
$view = $form->createView();
|
|
$this->assertSame('Empty year', $view['year']->vars['empty_value']);
|
|
$this->assertSame('', $view['month']->vars['empty_value']);
|
|
$this->assertSame('Empty day', $view['day']->vars['empty_value']);
|
|
}
|
|
|
|
public function testPassEmptyValueAsPartialArray_addNullIfRequired()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'required' => true,
|
|
'empty_value' => array(
|
|
'year' => 'Empty year',
|
|
'day' => 'Empty day',
|
|
),
|
|
));
|
|
|
|
$view = $form->createView();
|
|
$this->assertSame('Empty year', $view['year']->vars['empty_value']);
|
|
$this->assertNull($view['month']->vars['empty_value']);
|
|
$this->assertSame('Empty day', $view['day']->vars['empty_value']);
|
|
}
|
|
|
|
public function testPassHtml5TypeIfSingleTextAndHtml5Format()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'widget' => 'single_text',
|
|
));
|
|
|
|
$view = $form->createView();
|
|
$this->assertSame('date', $view->vars['type']);
|
|
}
|
|
|
|
public function testDontPassHtml5TypeIfNotHtml5Format()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'widget' => 'single_text',
|
|
'format' => \IntlDateFormatter::MEDIUM,
|
|
));
|
|
|
|
$view = $form->createView();
|
|
$this->assertFalse(isset($view->vars['type']));
|
|
}
|
|
|
|
public function testDontPassHtml5TypeIfNotSingleText()
|
|
{
|
|
$form = $this->factory->create('date', null, array(
|
|
'widget' => 'text',
|
|
));
|
|
|
|
$view = $form->createView();
|
|
$this->assertFalse(isset($view->vars['type']));
|
|
}
|
|
|
|
public function provideCompoundWidgets()
|
|
{
|
|
return array(
|
|
array('text'),
|
|
array('choice'),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider provideCompoundWidgets
|
|
*/
|
|
public function testYearErrorsBubbleUp($widget)
|
|
{
|
|
$error = new FormError('Invalid!');
|
|
$form = $this->factory->create('date', null, array(
|
|
'widget' => $widget,
|
|
));
|
|
$form['year']->addError($error);
|
|
|
|
$this->assertSame(array(), $form['year']->getErrors());
|
|
$this->assertSame(array($error), $form->getErrors());
|
|
}
|
|
|
|
/**
|
|
* @dataProvider provideCompoundWidgets
|
|
*/
|
|
public function testMonthErrorsBubbleUp($widget)
|
|
{
|
|
$error = new FormError('Invalid!');
|
|
$form = $this->factory->create('date', null, array(
|
|
'widget' => $widget,
|
|
));
|
|
$form['month']->addError($error);
|
|
|
|
$this->assertSame(array(), $form['month']->getErrors());
|
|
$this->assertSame(array($error), $form->getErrors());
|
|
}
|
|
|
|
/**
|
|
* @dataProvider provideCompoundWidgets
|
|
*/
|
|
public function testDayErrorsBubbleUp($widget)
|
|
{
|
|
$error = new FormError('Invalid!');
|
|
$form = $this->factory->create('date', null, array(
|
|
'widget' => $widget,
|
|
));
|
|
$form['day']->addError($error);
|
|
|
|
$this->assertSame(array(), $form['day']->getErrors());
|
|
$this->assertSame(array($error), $form->getErrors());
|
|
}
|
|
}
|