CollectionFieldTest.php 3.4 KB

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