CollectionFieldTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace Symfony\Tests\Component\Form;
  3. require_once __DIR__ . '/Fixtures/TestField.php';
  4. use Symfony\Component\Form\CollectionField;
  5. use Symfony\Component\Form\FieldGroup;
  6. use Symfony\Tests\Component\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. $field->setData(array('foo@baz.com'));
  24. $this->assertTrue($field[0] instanceof TestField);
  25. $this->assertFalse(isset($field[1]));
  26. $this->assertEquals(1, count($field));
  27. $this->assertEquals('foo@baz.com', $field[0]->getData());
  28. }
  29. public function testSetDataAdjustsSizeIfModifiable()
  30. {
  31. $field = new CollectionField(new TestField('emails'), array(
  32. 'modifiable' => true,
  33. ));
  34. $field->setData(array('foo@foo.com', 'foo@bar.com'));
  35. $this->assertTrue($field[0] instanceof TestField);
  36. $this->assertTrue($field[1] instanceof TestField);
  37. $this->assertTrue($field['$$key$$'] instanceof TestField);
  38. $this->assertEquals(3, count($field));
  39. $field->setData(array('foo@baz.com'));
  40. $this->assertTrue($field[0] instanceof TestField);
  41. $this->assertFalse(isset($field[1]));
  42. $this->assertTrue($field['$$key$$'] instanceof TestField);
  43. $this->assertEquals(2, count($field));
  44. }
  45. public function testThrowsExceptionIfObjectIsNotTraversable()
  46. {
  47. $field = new CollectionField(new TestField('emails'));
  48. $this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
  49. $field->setData(new \stdClass());
  50. }
  51. public function testModifiableCollectionsContainExtraField()
  52. {
  53. $field = new CollectionField(new TestField('emails'), array(
  54. 'modifiable' => true,
  55. ));
  56. $field->setData(array('foo@bar.com'));
  57. $this->assertTrue($field['0'] instanceof TestField);
  58. $this->assertTrue($field['$$key$$'] instanceof TestField);
  59. $this->assertEquals(2, count($field));
  60. }
  61. public function testNotResizedIfBoundWithMissingData()
  62. {
  63. $field = new CollectionField(new TestField('emails'));
  64. $field->setData(array('foo@foo.com', 'bar@bar.com'));
  65. $field->bind(array('foo@bar.com'));
  66. $this->assertTrue($field->has('0'));
  67. $this->assertTrue($field->has('1'));
  68. $this->assertEquals('foo@bar.com', $field[0]->getData());
  69. $this->assertEquals(null, $field[1]->getData());
  70. }
  71. public function testResizedIfBoundWithMissingDataAndModifiable()
  72. {
  73. $field = new CollectionField(new TestField('emails'), array(
  74. 'modifiable' => true,
  75. ));
  76. $field->setData(array('foo@foo.com', 'bar@bar.com'));
  77. $field->bind(array('foo@bar.com'));
  78. $this->assertTrue($field->has('0'));
  79. $this->assertFalse($field->has('1'));
  80. $this->assertEquals('foo@bar.com', $field[0]->getData());
  81. }
  82. public function testNotResizedIfBoundWithExtraData()
  83. {
  84. $field = new CollectionField(new TestField('emails'));
  85. $field->setData(array('foo@bar.com'));
  86. $field->bind(array('foo@foo.com', 'bar@bar.com'));
  87. $this->assertTrue($field->has('0'));
  88. $this->assertFalse($field->has('1'));
  89. $this->assertEquals('foo@foo.com', $field[0]->getData());
  90. }
  91. public function testResizedUpIfBoundWithExtraDataAndModifiable()
  92. {
  93. $field = new CollectionField(new TestField('emails'), array(
  94. 'modifiable' => true,
  95. ));
  96. $field->setData(array('foo@bar.com'));
  97. $field->bind(array('foo@foo.com', 'bar@bar.com'));
  98. $this->assertTrue($field->has('0'));
  99. $this->assertTrue($field->has('1'));
  100. $this->assertEquals('foo@foo.com', $field[0]->getData());
  101. $this->assertEquals('bar@bar.com', $field[1]->getData());
  102. $this->assertEquals(array('foo@foo.com', 'bar@bar.com'), $field->getData());
  103. }
  104. public function testResizedDownIfBoundWithLessDataAndModifiable()
  105. {
  106. $field = new CollectionField(new TestField('emails'), array(
  107. 'modifiable' => true,
  108. ));
  109. $field->setData(array('foo@bar.com', 'bar@bar.com'));
  110. $field->bind(array('foo@foo.com'));
  111. $this->assertTrue($field->has('0'));
  112. $this->assertFalse($field->has('1'));
  113. $this->assertEquals('foo@foo.com', $field[0]->getData());
  114. $this->assertEquals(array('foo@foo.com'), $field->getData());
  115. }
  116. }