-
-
Notifications
You must be signed in to change notification settings - Fork 9.4k
/
CollectionFieldTest.php
121 lines (98 loc) · 4.21 KB
/
CollectionFieldTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php
namespace Symfony\Tests\Component\Form;
require_once __DIR__ . '/Fixtures/TestField.php';
use Symfony\Component\Form\CollectionField;
use Symfony\Component\Form\FieldGroup;
use Symfony\Tests\Component\Form\Fixtures\TestField;
class CollectionFieldTest extends \PHPUnit_Framework_TestCase
{
public function testContainsNoFieldsByDefault()
{
$field = new CollectionField(new TestField('emails'));
$this->assertEquals(0, count($field));
}
public function testSetDataAdjustsSize()
{
$field = new CollectionField(new TestField('emails'));
$field->setData(array('foo@foo.com', 'foo@bar.com'));
$this->assertTrue($field[0] instanceof TestField);
$this->assertTrue($field[1] instanceof TestField);
$this->assertEquals(2, count($field));
$this->assertEquals('foo@foo.com', $field[0]->getData());
$this->assertEquals('foo@bar.com', $field[1]->getData());
}
public function testThrowsExceptionIfObjectIsNotTraversable()
{
$field = new CollectionField(new TestField('emails'));
$this->setExpectedException('Symfony\Component\Form\Exception\UnexpectedTypeException');
$field->setData(new \stdClass());
}
public function testModifiableCollectionsContainExtraField()
{
$field = new CollectionField(new TestField('emails'), array(
'modifiable' => true,
));
$field->setData(array('foo@bar.com'));
$this->assertTrue($field['0'] instanceof TestField);
$this->assertTrue($field['$$key$$'] instanceof TestField);
$this->assertEquals(2, count($field));
}
public function testNotResizedIfBoundWithMissingData()
{
$field = new CollectionField(new TestField('emails'));
$field->setData(array('foo@foo.com', 'bar@bar.com'));
$field->bind(array('foo@bar.com'));
$this->assertTrue($field->has('0'));
$this->assertTrue($field->has('1'));
$this->assertEquals('foo@bar.com', $field[0]->getData());
$this->assertEquals(null, $field[1]->getData());
}
public function testResizedIfBoundWithMissingDataAndModifiable()
{
$field = new CollectionField(new TestField('emails'), array(
'modifiable' => true,
));
$field->setData(array('foo@foo.com', 'bar@bar.com'));
$field->bind(array('foo@bar.com'));
$this->assertTrue($field->has('0'));
$this->assertFalse($field->has('1'));
$this->assertEquals('foo@bar.com', $field[0]->getData());
}
public function testNotResizedIfBoundWithExtraData()
{
$field = new CollectionField(new TestField('emails'));
$field->setData(array('foo@bar.com'));
$field->bind(array('foo@foo.com', 'bar@bar.com'));
$this->assertTrue($field->has('0'));
$this->assertFalse($field->has('1'));
$this->assertEquals('foo@foo.com', $field[0]->getData());
}
public function testResizedIfBoundWithExtraDataAndModifiable()
{
$field = new CollectionField(new TestField('emails'), array(
'modifiable' => true,
));
$field->setData(array('foo@bar.com'));
$field->bind(array('foo@foo.com', 'bar@bar.com'));
$this->assertTrue($field->has('0'));
$this->assertTrue($field->has('1'));
$this->assertEquals('foo@foo.com', $field[0]->getData());
$this->assertEquals('bar@bar.com', $field[1]->getData());
}
public function testCollectionOfFieldGroupsBoundWithArrayObjectContainingObjects()
{
$fieldGroup = new FieldGroup('name');
$fieldGroup->add(new TestField('first'));
$fieldGroup->add(new TestField('last'));
$field = new CollectionField($fieldGroup);
$nameData = (object) array('first' => 'Foo', 'last' => 'Bar');
$collectionData = new \ArrayObject(array($nameData));
$field->setData($collectionData);
$boundNameData = (object) array('first' => 'Foo', 'last' => 'Baz');
$boundCollectionData = new \ArrayObject(array($nameData));
$field->bind($boundCollectionData);
$this->assertTrue($field->has('0'));
$this->assertFalse($field->has('1'));
$this->assertEquals($boundNameData, $field[0]->getData());
}
}