<?php namespace yiiunit\extensions\bootstrap; use yii\base\DynamicModel; use yii\bootstrap\Html; /** * @group bootstrap */ class HtmlTest extends TestCase { /** * Data provider for [[testIcon()]] * @return array test data */ public function dataProviderIcon() { return [ [ 'star', [], '<span class="glyphicon glyphicon-star"></span>', ], [ 'star', [ 'tag' => 'i', 'prefix' => 'my-icon icon-', ], '<i class="my-icon icon-star"></i>', ], ]; } /** * @dataProvider dataProviderIcon * * @param $name * @param $options * @param $expectedHtml */ public function testIcon($name, array $options, $expectedHtml) { $this->assertEquals($expectedHtml, Html::icon($name, $options)); } /** * @return array */ public function dataProviderStaticControl() { return [ [ 'foo', [], '<p class="form-control-static">foo</p>' ], [ '<html>', [], '<p class="form-control-static"><html></p>' ], [ '<html></html>', [ 'encode' => false ], '<p class="form-control-static"><html></html></p>' ], ]; } /** * @dataProvider dataProviderStaticControl * * @param string $value * @param array $options * @param string $expectedHtml */ public function testStaticControl($value, array $options, $expectedHtml) { $this->assertEquals($expectedHtml, Html::staticControl($value, $options)); } public function testRadioList() { $this->assertEquals('<div></div>', Html::radioList('test')); $dataItems = [ 'value1' => 'text1', 'value2' => 'text2', ]; $expected = <<<'EOD' <div><div class="radio"><label><input type="radio" name="test" value="value1"> text1</label></div> <div class="radio"><label><input type="radio" name="test" value="value2" checked> text2</label></div></div> EOD; $this->assertEqualsWithoutLE($expected, Html::radioList('test', ['value2'], $dataItems)); $expected = <<<'EOD' <div>0<label>text1 <input type="radio" name="test" value="value1"></label> 1<label>text2 <input type="radio" name="test" value="value2" checked></label></div> EOD; $this->assertEqualsWithoutLE($expected, Html::radioList('test', ['value2'], $dataItems, [ 'item' => function ($index, $label, $name, $checked, $value) { return $index . Html::label($label . ' ' . Html::radio($name, $checked, ['value' => $value])); }, ])); $expected = <<<'EOD' <div><div class="radio"><label><input type="radio" name="test" value="value"> label&</label></div></div> EOD; $this->assertEqualsWithoutLE($expected, Html::radioList('test', [], ['value' => 'label&'])); $expected = <<<'EOD' <div><div class="radio"><label><input type="radio" name="test" value="value"> label&</label></div></div> EOD; $this->assertEqualsWithoutLE($expected, Html::radioList('test', [], ['value' => 'label&'], ['encode' => false])); } public function testCheckboxList() { $this->assertEquals('<div></div>', Html::checkboxList('test')); $dataItems = [ 'value1' => 'text1', 'value2' => 'text2', ]; $expected = <<<'EOD' <div><div class="checkbox"><label><input type="checkbox" name="test[]" value="value1"> text1</label></div> <div class="checkbox"><label><input type="checkbox" name="test[]" value="value2" checked> text2</label></div></div> EOD; $this->assertEqualsWithoutLE($expected, Html::checkboxList('test', ['value2'], $dataItems)); $expected = <<<'EOD' <div>0<label>text1 <input type="checkbox" name="test[]" value="value1"></label> 1<label>text2 <input type="checkbox" name="test[]" value="value2" checked></label></div> EOD; $this->assertEqualsWithoutLE($expected, Html::checkboxList('test', ['value2'], $dataItems, [ 'item' => function ($index, $label, $name, $checked, $value) { return $index . Html::label($label . ' ' . Html::checkbox($name, $checked, ['value' => $value])); }, ])); $expected = <<<'EOD' <div><div class="checkbox"><label><input type="checkbox" name="test[]" value="value" checked> label&</label></div></div> EOD; $this->assertEqualsWithoutLE($expected, Html::checkboxList('test', 'value', ['value' => 'label&'])); $expected = <<<'EOD' <div><div class="checkbox"><label><input type="checkbox" name="test[]" value="value" checked> label&</label></div></div> EOD; $this->assertEqualsWithoutLE($expected, Html::checkboxList('test', 'value', ['value' => 'label&'], ['encode' => false])); } public function testError() { $model = new DynamicModel(); $model->addError('foo', 'Some error message.'); $this->assertEquals('<p class="help-block help-block-error">Some error message.</p>', Html::error($model, 'foo')); $this->assertEquals('<p class="custom-class">Some error message.</p>', Html::error($model, 'foo', ['class' => 'custom-class'])); $this->assertEquals('<p>Some error message.</p>', Html::error($model, 'foo', ['class' => null])); $this->assertEquals('<div class="help-block help-block-error">Some error message.</div>', Html::error($model, 'foo', ['tag' => 'div'])); } }