Browse Source

Finished HtmlTest.

tags/2.0.0-beta
Qiang Xue 12 years ago
parent
commit
a5ababe4c6
  1. 4
      framework/util/ArrayHelper.php
  2. 15
      framework/util/Html.php
  3. 4
      framework/web/Controller.php
  4. 4
      framework/web/Pagination.php
  5. 6
      framework/widgets/ActiveForm.php
  6. 201
      tests/unit/framework/util/HtmlTest.php
  7. 5
      todo.md

4
framework/util/ArrayHelper.php

@ -293,7 +293,7 @@ class ArrayHelper
* @return array the encoded data * @return array the encoded data
* @see http://www.php.net/manual/en/function.htmlspecialchars.php * @see http://www.php.net/manual/en/function.htmlspecialchars.php
*/ */
public static function htmlEncode($data, $valuesOnly = false, $charset = null) public static function htmlEncode($data, $valuesOnly = true, $charset = null)
{ {
if ($charset === null) { if ($charset === null) {
$charset = Yii::$app->charset; $charset = Yii::$app->charset;
@ -322,7 +322,7 @@ class ArrayHelper
* @return array the decoded data * @return array the decoded data
* @see http://www.php.net/manual/en/function.htmlspecialchars-decode.php * @see http://www.php.net/manual/en/function.htmlspecialchars-decode.php
*/ */
public static function htmlDecode($data, $valuesOnly = false) public static function htmlDecode($data, $valuesOnly = true)
{ {
$d = array(); $d = array();
foreach ($data as $key => $value) { foreach ($data as $key => $value) {

15
framework/util/Html.php

@ -106,6 +106,7 @@ class Html
'checked', 'checked',
'readonly', 'readonly',
'disabled', 'disabled',
'multiple',
'size', 'size',
'maxlength', 'maxlength',
@ -652,7 +653,7 @@ class Html
* except that the array keys represent the optgroup labels specified in $items. * except that the array keys represent the optgroup labels specified in $items.
* @return string the generated drop-down list tag * @return string the generated drop-down list tag
*/ */
public static function dropDownList($name, $items, $selection = null, $attributes = array()) public static function dropDownList($name, $items = array(), $selection = null, $attributes = array())
{ {
$attributes['name'] = $name; $attributes['name'] = $name;
$options = static::renderOptions($items, $selection, $attributes); $options = static::renderOptions($items, $selection, $attributes);
@ -693,7 +694,7 @@ class Html
* mode, we can still obtain the posted unselect value. * mode, we can still obtain the posted unselect value.
* @return string the generated list box tag * @return string the generated list box tag
*/ */
public static function listBox($name, $items, $selection = null, $attributes = array()) public static function listBox($name, $items = array(), $selection = null, $attributes = array())
{ {
if (!isset($attributes['size'])) { if (!isset($attributes['size'])) {
$attributes['size'] = 4; $attributes['size'] = 4;
@ -742,7 +743,7 @@ class Html
* value and the checked status of the checkbox input. * value and the checked status of the checkbox input.
* @return string the generated checkbox list * @return string the generated checkbox list
*/ */
public static function checkboxList($name, $items, $selection = null, $options = array()) public static function checkboxList($name, $items = array(), $selection = null, $options = array())
{ {
if (substr($name, -2) !== '[]') { if (substr($name, -2) !== '[]') {
$name .= '[]'; $name .= '[]';
@ -800,7 +801,7 @@ class Html
* value and the checked status of the radio button input. * value and the checked status of the radio button input.
* @return string the generated radio button list * @return string the generated radio button list
*/ */
public static function radioList($name, $items, $selection = null, $options = array()) public static function radioList($name, $items = array(), $selection = null, $options = array())
{ {
$formatter = isset($options['item']) ? $options['item'] : null; $formatter = isset($options['item']) ? $options['item'] : null;
$lines = array(); $lines = array();
@ -850,7 +851,7 @@ class Html
{ {
$lines = array(); $lines = array();
if (isset($attributes['prompt'])) { if (isset($attributes['prompt'])) {
$prompt = strtr(static::encode($attributes['prompt']), ' ', ' '); $prompt = str_replace(' ', ' ', static::encode($attributes['prompt']));
$lines[] = static::tag('option', $prompt, array('value' => '')); $lines[] = static::tag('option', $prompt, array('value' => ''));
} }
@ -863,7 +864,7 @@ class Html
$groupAttrs = isset($groups[$key]) ? $groups[$key] : array(); $groupAttrs = isset($groups[$key]) ? $groups[$key] : array();
$groupAttrs['label'] = $key; $groupAttrs['label'] = $key;
$attrs = array('options' => $options, 'groups' => $groups); $attrs = array('options' => $options, 'groups' => $groups);
$content = static::renderOptions($selection, $value, $attrs); $content = static::renderOptions($value, $selection, $attrs);
$lines[] = static::tag('optgroup', "\n" . $content . "\n", $groupAttrs); $lines[] = static::tag('optgroup', "\n" . $content . "\n", $groupAttrs);
} else { } else {
$attrs = isset($options[$key]) ? $options[$key] : array(); $attrs = isset($options[$key]) ? $options[$key] : array();
@ -871,7 +872,7 @@ class Html
$attrs['selected'] = $selection !== null && $attrs['selected'] = $selection !== null &&
(!is_array($selection) && !strcmp($key, $selection) (!is_array($selection) && !strcmp($key, $selection)
|| is_array($selection) && in_array($key, $selection)); || is_array($selection) && in_array($key, $selection));
$lines[] = static::tag('option', strtr(static::encode($value), ' ', ' '), $attrs); $lines[] = static::tag('option', str_replace(' ', ' ', static::encode($value)), $attrs);
} }
} }

4
framework/web/Controller.php

@ -16,8 +16,4 @@ namespace yii\web;
*/ */
class Controller extends \yii\base\Controller class Controller extends \yii\base\Controller
{ {
public function createUrl($route, $params = array())
{
}
} }

4
framework/web/Pagination.php

@ -14,7 +14,7 @@ use Yii;
* *
* When data needs to be rendered in multiple pages, Pagination can be used to * When data needs to be rendered in multiple pages, Pagination can be used to
* represent information such as [[itemCount|total item count]], [[pageSize|page size]], * represent information such as [[itemCount|total item count]], [[pageSize|page size]],
* [[page|current page]], etc. These information can be passed to [[yii\web\widgets\Pager|pagers]] * [[page|current page]], etc. These information can be passed to [[yii\widgets\Pager|pagers]]
* to render pagination buttons or links. * to render pagination buttons or links.
* *
* The following example shows how to create a pagination object and feed it * The following example shows how to create a pagination object and feed it
@ -47,7 +47,7 @@ use Yii;
* } * }
* *
* // display pagination * // display pagination
* $this->widget('yii\web\widgets\LinkPager', array( * $this->widget('yii\widgets\LinkPager', array(
* 'pages' => $pages, * 'pages' => $pages,
* )); * ));
* ~~~ * ~~~

6
framework/widgets/ActiveForm.php

@ -0,0 +1,6 @@
<?php
class ActiveForm
{
}

201
tests/unit/framework/util/HtmlTest.php

@ -50,6 +50,11 @@ class HtmlTest extends \yii\test\TestCase
$this->assertEquals('<input type="text" name="test" value="&lt;&gt;">', Html::tag('input', '', array('type' => 'text', 'name' => 'test', 'value' => '<>'))); $this->assertEquals('<input type="text" name="test" value="&lt;&gt;">', Html::tag('input', '', array('type' => 'text', 'name' => 'test', 'value' => '<>')));
Html::$closeVoidElements = true; Html::$closeVoidElements = true;
$this->assertEquals('<span disabled="disabled"></span>', Html::tag('span', '', array('disabled' => true)));
Html::$showBooleanAttributeValues = false;
$this->assertEquals('<span disabled></span>', Html::tag('span', '', array('disabled' => true)));
Html::$showBooleanAttributeValues = true;
} }
public function testBeginTag() public function testBeginTag()
@ -166,69 +171,263 @@ class HtmlTest extends \yii\test\TestCase
public function testButtonInput() public function testButtonInput()
{ {
$this->assertEquals('<input type="button" name="test" value="Button" />', Html::buttonInput('test'));
$this->assertEquals('<input type="button" class="a" name="test" value="text" />', Html::buttonInput('test', 'text', array('class' => 'a')));
} }
public function testSubmitInput() public function testSubmitInput()
{ {
$this->assertEquals('<input type="submit" value="Submit" />', Html::submitInput());
$this->assertEquals('<input type="submit" class="a" name="test" value="text" />', Html::submitInput('test', 'text', array('class' => 'a')));
} }
public function testResetInput() public function testResetInput()
{ {
$this->assertEquals('<input type="reset" value="Reset" />', Html::resetInput());
$this->assertEquals('<input type="reset" class="a" name="test" value="text" />', Html::resetInput('test', 'text', array('class' => 'a')));
} }
public function testTextInput() public function testTextInput()
{ {
$this->assertEquals('<input type="text" name="test" />', Html::textInput('test'));
$this->assertEquals('<input type="text" class="t" name="test" value="value" />', Html::textInput('test', 'value', array('class' => 't')));
} }
public function testHiddenInput() public function testHiddenInput()
{ {
$this->assertEquals('<input type="hidden" name="test" />', Html::hiddenInput('test'));
$this->assertEquals('<input type="hidden" class="t" name="test" value="value" />', Html::hiddenInput('test', 'value', array('class' => 't')));
} }
public function testPasswordInput() public function testPasswordInput()
{ {
$this->assertEquals('<input type="password" name="test" />', Html::passwordInput('test'));
$this->assertEquals('<input type="password" class="t" name="test" value="value" />', Html::passwordInput('test', 'value', array('class' => 't')));
} }
public function testFileInput() public function testFileInput()
{ {
$this->assertEquals('<input type="file" name="test" />', Html::fileInput('test'));
$this->assertEquals('<input type="file" class="t" name="test" value="value" />', Html::fileInput('test', 'value', array('class' => 't')));
} }
public function testTextarea() public function testTextarea()
{ {
$this->assertEquals('<textarea name="test"></textarea>', Html::textarea('test'));
$this->assertEquals('<textarea class="t" name="test">value&lt;&gt;</textarea>', Html::textarea('test', 'value<>', array('class' => 't')));
} }
public function testRadio() public function testRadio()
{ {
$this->assertEquals('<input type="radio" name="test" value="1" />', Html::radio('test'));
$this->assertEquals('<input type="radio" class="a" name="test" checked="checked" />', Html::radio('test', null, true, array('class' => 'a')));
$this->assertEquals('<input type="hidden" name="test" value="0" /><input type="radio" class="a" name="test" checked="checked" />', Html::radio('test', null, true, array('class' => 'a' ,'uncheck' => '0')));
} }
public function testCheckbox() public function testCheckbox()
{ {
$this->assertEquals('<input type="checkbox" name="test" value="1" />', Html::checkbox('test'));
$this->assertEquals('<input type="checkbox" class="a" name="test" checked="checked" />', Html::checkbox('test', null, true, array('class' => 'a')));
$this->assertEquals('<input type="hidden" name="test" value="0" /><input type="checkbox" class="a" name="test" checked="checked" />', Html::checkbox('test', null, true, array('class' => 'a' ,'uncheck' => '0')));
} }
public function testDropDownList() public function testDropDownList()
{ {
$this->assertEquals("<select name=\"test\">\n\n</select>", Html::dropDownList('test'));
$this->assertEquals("<select name=\"test\">\n<option value=\"value1\">text1</option>\n<option value=\"value2\">text2</option>\n</select>", Html::dropDownList('test', $this->getDataItems()));
$this->assertEquals("<select name=\"test\">\n<option value=\"value1\">text1</option>\n<option value=\"value2\" selected=\"selected\">text2</option>\n</select>", Html::dropDownList('test', $this->getDataItems(), 'value2'));
} }
public function testListBox() public function testListBox()
{ {
$expected = <<<EOD
<select name="test" size="4">
</select>
EOD;
$this->assertEquals($expected, Html::listBox('test'));
$expected = <<<EOD
<select name="test" size="5">
<option value="value1">text1</option>
<option value="value2">text2</option>
</select>
EOD;
$this->assertEquals($expected, Html::listBox('test', $this->getDataItems(), null, array('size' => 5)));
$expected = <<<EOD
<select name="test" size="4">
<option value="value1&lt;&gt;">text1&lt;&gt;</option>
<option value="value 2">text&nbsp;&nbsp;2</option>
</select>
EOD;
$this->assertEquals($expected, Html::listBox('test', $this->getDataItems2(), null));
$expected = <<<EOD
<select name="test" size="4">
<option value="value1">text1</option>
<option value="value2" selected="selected">text2</option>
</select>
EOD;
$this->assertEquals($expected, Html::listBox('test', $this->getDataItems(), 'value2'));
$expected = <<<EOD
<select name="test" size="4">
<option value="value1" selected="selected">text1</option>
<option value="value2" selected="selected">text2</option>
</select>
EOD;
$this->assertEquals($expected, Html::listBox('test', $this->getDataItems(), array('value1', 'value2')));
$expected = <<<EOD
<select name="test[]" multiple="multiple" size="4">
</select>
EOD;
$this->assertEquals($expected, Html::listBox('test', array(), null, array('multiple' => true)));
$expected = <<<EOD
<input type="hidden" name="test" value="0" /><select name="test" size="4">
</select>
EOD;
$this->assertEquals($expected, Html::listBox('test', array(), '', array('unselect' => '0')));
} }
public function testCheckboxList() public function testCheckboxList()
{ {
$this->assertEquals('', Html::checkboxList('test'));
$expected = <<<EOD
<label><input type="checkbox" name="test[]" value="value1" /> text1</label>
<label><input type="checkbox" name="test[]" value="value2" checked="checked" /> text2</label>
EOD;
$this->assertEquals($expected, Html::checkboxList('test', $this->getDataItems(), array('value2')));
$expected = <<<EOD
<label><input type="checkbox" name="test[]" value="value1&lt;&gt;" /> text1<></label>
<label><input type="checkbox" name="test[]" value="value 2" /> text 2</label>
EOD;
$this->assertEquals($expected, Html::checkboxList('test', $this->getDataItems2(), array('value2')));
$expected = <<<EOD
<input type="hidden" name="test" value="0" /><label><input type="checkbox" name="test[]" value="value1" /> text1</label><br />
<label><input type="checkbox" name="test[]" value="value2" checked="checked" /> text2</label>
EOD;
$this->assertEquals($expected, Html::checkboxList('test', $this->getDataItems(), array('value2'), array(
'separator' => "<br />\n",
'unselect' => '0',
)));
$expected = <<<EOD
<label>text1 <input type="checkbox" name="test[]" value="value1" /></label>
<label>text2 <input type="checkbox" name="test[]" value="value2" checked="checked" /></label>
EOD;
$this->assertEquals($expected, Html::checkboxList('test', $this->getDataItems(), array('value2'), array(
'item' => function ($index, $label, $name, $value, $checked) {
return Html::label($label . ' ' . Html::checkbox($name, $value, $checked));
}
)));
} }
public function testRadioList() public function testRadioList()
{ {
$this->assertEquals('', Html::radioList('test'));
$expected = <<<EOD
<label><input type="radio" name="test" value="value1" /> text1</label>
<label><input type="radio" name="test" value="value2" checked="checked" /> text2</label>
EOD;
$this->assertEquals($expected, Html::radioList('test', $this->getDataItems(), array('value2')));
$expected = <<<EOD
<label><input type="radio" name="test" value="value1&lt;&gt;" /> text1<></label>
<label><input type="radio" name="test" value="value 2" /> text 2</label>
EOD;
$this->assertEquals($expected, Html::radioList('test', $this->getDataItems2(), array('value2')));
$expected = <<<EOD
<input type="hidden" name="test" value="0" /><label><input type="radio" name="test" value="value1" /> text1</label><br />
<label><input type="radio" name="test" value="value2" checked="checked" /> text2</label>
EOD;
$this->assertEquals($expected, Html::radioList('test', $this->getDataItems(), array('value2'), array(
'separator' => "<br />\n",
'unselect' => '0',
)));
$expected = <<<EOD
<label>text1 <input type="radio" name="test" value="value1" /></label>
<label>text2 <input type="radio" name="test" value="value2" checked="checked" /></label>
EOD;
$this->assertEquals($expected, Html::radioList('test', $this->getDataItems(), array('value2'), array(
'item' => function ($index, $label, $name, $value, $checked) {
return Html::label($label . ' ' . Html::radio($name, $value, $checked));
}
)));
} }
public function testRenderOptions() public function testRenderOptions()
{ {
$this->assertEquals('', Html::renderOptions(array()));
$data = array(
'value1' => 'label1',
'group1' => array(
'value11' => 'label11',
'group11' => array(
'value111' => 'label111',
),
'group12' => array(),
),
'value2' => 'label2',
'group2' => array(),
);
$expected = <<<EOD
<option value="">please&nbsp;select&lt;&gt;</option>
<option value="value1" selected="selected">label1</option>
<optgroup label="group1">
<option value="value11">label11</option>
<optgroup label="group11">
<option class="option" value="value111" selected="selected">label111</option>
</optgroup>
<optgroup class="group" label="group12">
</optgroup>
</optgroup>
<option value="value2">label2</option>
<optgroup label="group2">
</optgroup>
EOD;
$attributes = array(
'prompt' => 'please select<>',
'options' => array(
'value111' => array('class' => 'option'),
),
'groups' => array(
'group12' => array('class' => 'group'),
),
);
$this->assertEquals($expected, Html::renderOptions($data, array('value111', 'value1'), $attributes));
} }
public function testRenderAttributes() public function testRenderAttributes()
{ {
$this->assertEquals('', Html::renderAttributes(array()));
$this->assertEquals(' name="test" value="1&lt;&gt;"', Html::renderAttributes(array('name' => 'test', 'empty' => null, 'value' => '1<>')));
Html::$showBooleanAttributeValues = false;
$this->assertEquals(' checked disabled', Html::renderAttributes(array('checked' => 'checked', 'disabled' => true, 'hidden' => false)));
Html::$showBooleanAttributeValues = true;
}
protected function getDataItems()
{
return array(
'value1' => 'text1',
'value2' => 'text2',
);
} }
public function testUrl() protected function getDataItems2()
{ {
return array(
'value1<>' => 'text1<>',
'value 2' => 'text 2',
);
} }
} }

5
todo.md

@ -32,8 +32,6 @@ memo
* module * module
- Module should be able to define its own configuration including routes. Application should be able to overwrite it. - Module should be able to define its own configuration including routes. Application should be able to overwrite it.
* application * application
* security
- backport 1.1 changes
- built-in console commands - built-in console commands
+ api doc builder + api doc builder
* support for markdown syntax * support for markdown syntax
@ -46,7 +44,6 @@ memo
* parsing?? * parsing??
* make dates/date patterns uniform application-wide including JUI, formats etc. * make dates/date patterns uniform application-wide including JUI, formats etc.
- helpers - helpers
* array
* image * image
* string * string
* file * file
@ -59,8 +56,6 @@ memo
* move generation API out of gii, provide yiic commands to use it. Use same templates for gii/yiic. * move generation API out of gii, provide yiic commands to use it. Use same templates for gii/yiic.
* i18n variant of templates * i18n variant of templates
* allow to generate module-specific CRUD * allow to generate module-specific CRUD
- markup and HTML helpers
* use HTML5 instead of XHTML
- assets - assets
* ability to manage scripts order (store these in a vector?) * ability to manage scripts order (store these in a vector?)
* http://ryanbigg.com/guides/asset_pipeline.html, http://guides.rubyonrails.org/asset_pipeline.html, use content hash instead of mtime + directory hash. * http://ryanbigg.com/guides/asset_pipeline.html, http://guides.rubyonrails.org/asset_pipeline.html, use content hash instead of mtime + directory hash.

Loading…
Cancel
Save