'',
'label' => '',
'checkboxWrapper' => '
{{input}}{{label}}
',
];
$this->templates = new StringTemplate($templates);
$this->context = $this->getMock('Cake\View\Form\ContextInterface');
}
/**
* Test render simple option sets.
*
* @return void
*/
public function testRenderSimple()
{
$label = new LabelWidget($this->templates);
$input = new MultiCheckboxWidget($this->templates, $label);
$data = [
'name' => 'Tags[id]',
'options' => [
1 => 'CakePHP',
2 => 'Development',
]
];
$result = $input->render($data, $this->context);
$expected = [
['div' => ['class' => 'checkbox']],
['input' => [
'type' => 'checkbox',
'name' => 'Tags[id][]',
'value' => 1,
'id' => 'tags-id-1',
]],
['label' => ['for' => 'tags-id-1']],
'CakePHP',
'/label',
'/div',
['div' => ['class' => 'checkbox']],
['input' => [
'type' => 'checkbox',
'name' => 'Tags[id][]',
'value' => 2,
'id' => 'tags-id-2',
]],
['label' => ['for' => 'tags-id-2']],
'Development',
'/label',
'/div',
];
$this->assertHtml($expected, $result);
}
/**
* Test render complex and additional attributes.
*
* @return void
*/
public function testRenderComplex()
{
$label = new LabelWidget($this->templates);
$input = new MultiCheckboxWidget($this->templates, $label);
$data = [
'name' => 'Tags[id]',
'val' => 2,
'disabled' => ['1'],
'options' => [
['value' => '1', 'text' => 'CakePHP', 'data-test' => 'val'],
['value' => '2', 'text' => 'Development', 'class' => 'custom'],
]
];
$result = $input->render($data, $this->context);
$expected = [
['div' => ['class' => 'checkbox']],
['input' => [
'disabled' => 'disabled',
'type' => 'checkbox',
'name' => 'Tags[id][]',
'value' => 1,
'id' => 'tags-id-1',
'data-test' => 'val',
]],
['label' => ['for' => 'tags-id-1']],
'CakePHP',
'/label',
'/div',
['div' => ['class' => 'checkbox']],
['input' => [
'type' => 'checkbox',
'checked' => 'checked',
'name' => 'Tags[id][]',
'value' => 2,
'id' => 'tags-id-2',
'class' => 'custom',
]],
['label' => ['class' => 'selected', 'for' => 'tags-id-2']],
'Development',
'/label',
'/div',
];
$this->assertHtml($expected, $result);
}
/**
* Test render escpaing options.
*
* @return void
*/
public function testRenderEscaping()
{
$label = new LabelWidget($this->templates);
$input = new MultiCheckboxWidget($this->templates, $label);
$data = [
'name' => 'Tags[id]',
'options' => [
'>' => '>>',
]
];
$result = $input->render($data, $this->context);
$expected = [
['div' => ['class' => 'checkbox']],
['input' => [
'type' => 'checkbox',
'name' => 'Tags[id][]',
'value' => '>',
'id' => 'tags-id',
]],
['label' => ['for' => 'tags-id']],
'>>',
'/label',
'/div',
];
$this->assertHtml($expected, $result);
}
/**
* Test render selected checkboxes.
*
* @return void
*/
public function testRenderSelected()
{
$label = new LabelWidget($this->templates);
$input = new MultiCheckboxWidget($this->templates, $label);
$data = [
'name' => 'Tags[id]',
'options' => [
1 => 'CakePHP',
'1x' => 'Development',
],
'val' => [1],
'disabled' => false
];
$result = $input->render($data, $this->context);
$expected = [
['div' => ['class' => 'checkbox']],
['input' => [
'type' => 'checkbox',
'name' => 'Tags[id][]',
'value' => 1,
'id' => 'tags-id-1',
'checked' => 'checked'
]],
['label' => ['class' => 'selected', 'for' => 'tags-id-1']],
'CakePHP',
'/label',
'/div',
['div' => ['class' => 'checkbox']],
['input' => [
'type' => 'checkbox',
'name' => 'Tags[id][]',
'value' => '1x',
'id' => 'tags-id-1x',
]],
['label' => ['for' => 'tags-id-1x']],
'Development',
'/label',
'/div',
];
$this->assertHtml($expected, $result);
$data['val'] = 1;
$result = $input->render($data, $this->context);
$this->assertHtml($expected, $result);
$data['val'] = '1';
$result = $input->render($data, $this->context);
$this->assertHtml($expected, $result);
}
/**
* Test render disabled checkboxes.
*
* @return void
*/
public function testRenderDisabled()
{
$label = new LabelWidget($this->templates);
$input = new MultiCheckboxWidget($this->templates, $label);
$data = [
'name' => 'Tags[id]',
'options' => [
1 => 'CakePHP',
'1x' => 'Development',
],
'disabled' => true,
];
$result = $input->render($data, $this->context);
$expected = [
['div' => ['class' => 'checkbox']],
['input' => [
'type' => 'checkbox',
'name' => 'Tags[id][]',
'value' => 1,
'id' => 'tags-id-1',
'disabled' => 'disabled'
]],
['label' => ['for' => 'tags-id-1']],
'CakePHP',
'/label',
'/div',
['div' => ['class' => 'checkbox']],
['input' => [
'type' => 'checkbox',
'name' => 'Tags[id][]',
'value' => '1x',
'id' => 'tags-id-1x',
'disabled' => 'disabled'
]],
['label' => ['for' => 'tags-id-1x']],
'Development',
'/label',
'/div',
];
$this->assertHtml($expected, $result);
$data['disabled'] = 'a string';
$result = $input->render($data, $this->context);
$this->assertHtml($expected, $result);
$data['disabled'] = ['1', '1x'];
$this->assertHtml($expected, $result);
$data = [
'name' => 'Tags[id]',
'options' => [
1 => 'CakePHP',
'1x' => 'Development',
],
'disabled' => [1]
];
$result = $input->render($data, $this->context);
$expected = [
['div' => ['class' => 'checkbox']],
['input' => [
'type' => 'checkbox',
'name' => 'Tags[id][]',
'value' => 1,
'id' => 'tags-id-1',
'disabled' => 'disabled'
]],
['label' => ['for' => 'tags-id-1']],
'CakePHP',
'/label',
'/div',
['div' => ['class' => 'checkbox']],
['input' => [
'type' => 'checkbox',
'name' => 'Tags[id][]',
'value' => '1x',
'id' => 'tags-id-1x',
]],
['label' => ['for' => 'tags-id-1x']],
'Development',
'/label',
'/div',
];
$this->assertHtml($expected, $result);
}
}