CollectionFieldTest.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace Symfony\Tests\Components\Form;
  3. require_once __DIR__ . '/../../../../bootstrap.php';
  4. require_once __DIR__ . '/Fixtures/TestField.php';
  5. use Symfony\Components\Form\CollectionField;
  6. use Symfony\Tests\Components\Form\Fixtures\TestField;
  7. class CollectionFieldTest extends \PHPUnit_Framework_TestCase
  8. {
  9. public function testContainsNoFieldsByDefault()
  10. {
  11. $field = new CollectionField(new TestField('emails'));
  12. $this->assertEquals(0, count($field));
  13. }
  14. public function testSetDataAdjustsSize()
  15. {
  16. $field = new CollectionField(new TestField('emails'));
  17. $field->setData(array('foo@foo.com', 'foo@bar.com'));
  18. $this->assertTrue($field[0] instanceof TestField);
  19. $this->assertTrue($field[1] instanceof TestField);
  20. $this->assertEquals(2, count($field));
  21. $this->assertEquals('foo@foo.com', $field[0]->getData());
  22. $this->assertEquals('foo@bar.com', $field[1]->getData());
  23. }
  24. public function testThrowsExceptionIfObjectIsNotTraversable()
  25. {
  26. $field = new CollectionField(new TestField('emails'));
  27. $this->setExpectedException('Symfony\Components\Form\Exception\UnexpectedTypeException');
  28. $field->setData(new \stdClass());
  29. }
  30. public function testModifiableCollectionsContainExtraField()
  31. {
  32. $field = new CollectionField(new TestField('emails'), array(
  33. 'modifiable' => true,
  34. ));
  35. $field->setData(array('foo@bar.com'));
  36. $this->assertTrue($field['0'] instanceof TestField);
  37. $this->assertTrue($field['$$key$$'] instanceof TestField);
  38. $this->assertEquals(2, count($field));
  39. }
  40. public function testNotResizedIfBoundWithMissingData()
  41. {
  42. $field = new CollectionField(new TestField('emails'));
  43. $field->setData(array('foo@foo.com', 'bar@bar.com'));
  44. $field->bind(array('foo@bar.com'));
  45. $this->assertTrue($field->has('0'));
  46. $this->assertTrue($field->has('1'));
  47. $this->assertEquals('foo@bar.com', $field[0]->getData());
  48. $this->assertEquals(null, $field[1]->getData());
  49. }
  50. public function testResizedIfBoundWithMissingDataAndModifiable()
  51. {
  52. $field = new CollectionField(new TestField('emails'), array(
  53. 'modifiable' => true,
  54. ));
  55. $field->setData(array('foo@foo.com', 'bar@bar.com'));
  56. $field->bind(array('foo@bar.com'));
  57. $this->assertTrue($field->has('0'));
  58. $this->assertFalse($field->has('1'));
  59. $this->assertEquals('foo@bar.com', $field[0]->getData());
  60. }
  61. public function testNotResizedIfBoundWithExtraData()
  62. {
  63. $field = new CollectionField(new TestField('emails'));
  64. $field->setData(array('foo@bar.com'));
  65. $field->bind(array('foo@foo.com', 'bar@bar.com'));
  66. $this->assertTrue($field->has('0'));
  67. $this->assertFalse($field->has('1'));
  68. $this->assertEquals('foo@foo.com', $field[0]->getData());
  69. }
  70. public function testResizedIfBoundWithExtraDataAndModifiable()
  71. {
  72. $field = new CollectionField(new TestField('emails'), array(
  73. 'modifiable' => true,
  74. ));
  75. $field->setData(array('foo@bar.com'));
  76. $field->bind(array('foo@foo.com', 'bar@bar.com'));
  77. $this->assertTrue($field->has('0'));
  78. $this->assertTrue($field->has('1'));
  79. $this->assertEquals('foo@foo.com', $field[0]->getData());
  80. $this->assertEquals('bar@bar.com', $field[1]->getData());
  81. }
  82. }