'test',
			'basePath' => '@yiiunit/runtime',
			'components' => array(
				'request' => array(
					'class' => 'yii\web\Request',
					'url' => '/test',
				),
			),
		));
	}
	public function tearDown()
	{
		Yii::$app = null;
	}
	public function testEncode()
	{
		$this->assertEquals("a<>&"'", Html::encode("a<>&\"'"));
	}
	public function testDecode()
	{
		$this->assertEquals("a<>&\"'", Html::decode("a<>&"'"));
	}
	public function testTag()
	{
		$this->assertEquals('
', Html::tag('br'));
		$this->assertEquals('', Html::tag('span'));
		$this->assertEquals('
content
', Html::tag('div', 'content'));
		$this->assertEquals('', Html::tag('input', '', array('type' => 'text', 'name' => 'test', 'value' => '<>')));
		Html::$closeVoidElements = false;
		$this->assertEquals('
', Html::tag('br'));
		$this->assertEquals('', Html::tag('span'));
		$this->assertEquals('content
', Html::tag('div', 'content'));
		$this->assertEquals('', Html::tag('input', '', array('type' => 'text', 'name' => 'test', 'value' => '<>')));
		Html::$closeVoidElements = true;
		$this->assertEquals('', Html::tag('span', '', array('disabled' => true)));
		Html::$showBooleanAttributeValues = false;
		$this->assertEquals('', Html::tag('span', '', array('disabled' => true)));
		Html::$showBooleanAttributeValues = true;
	}
	public function testBeginTag()
	{
		$this->assertEquals('
', Html::beginTag('br'));
		$this->assertEquals('', Html::beginTag('span', array('id' => 'test', 'class' => 'title')));
	}
	public function testEndTag()
	{
		$this->assertEquals('', Html::endTag('br'));
		$this->assertEquals('', Html::endTag('span'));
	}
	public function testCdata()
	{
		$data = 'test<>';
		$this->assertEquals('', Html::cdata($data));
	}
	public function testStyle()
	{
		$content = 'a <>';
		$this->assertEquals("", Html::style($content));
		$this->assertEquals("", Html::style($content, array('type' => 'text/less')));
	}
	public function testScript()
	{
		$content = 'a <>';
		$this->assertEquals("", Html::script($content));
		$this->assertEquals("", Html::script($content, array('type' => 'text/js')));
	}
	public function testCssFile()
	{
		$this->assertEquals('', Html::cssFile('http://example.com'));
		$this->assertEquals('', Html::cssFile(''));
	}
	public function testJsFile()
	{
		$this->assertEquals('', Html::jsFile('http://example.com'));
		$this->assertEquals('', Html::jsFile(''));
	}
	public function testBeginForm()
	{
		$this->assertEquals('', Html::endForm());
	}
	public function testA()
	{
		$this->assertEquals('something<>', Html::a('something<>'));
		$this->assertEquals('something', Html::a('something', '/example'));
		$this->assertEquals('something', Html::a('something', ''));
	}
	public function testMailto()
	{
		$this->assertEquals('test<>', Html::mailto('test<>'));
		$this->assertEquals('test<>', Html::mailto('test<>', 'test>'));
	}
	public function testImg()
	{
		$this->assertEquals(' ', Html::img('/example'));
		$this->assertEquals('
', Html::img('/example'));
		$this->assertEquals(' ', Html::img(''));
		$this->assertEquals('
', Html::img(''));
		$this->assertEquals(' ', Html::img('/example', array('alt' => 'something', 'width' => 10)));
	}
	public function testLabel()
	{
		$this->assertEquals('', Html::label('something<>'));
		$this->assertEquals('', Html::label('something<>', 'a'));
		$this->assertEquals('', Html::label('something<>', 'a', array('class' => 'test')));
	}
	public function testButton()
	{
		$this->assertEquals('', Html::button());
		$this->assertEquals('', Html::button('test', 'value', 'content<>'));
		$this->assertEquals('', Html::button('test', 'value', 'content<>', array('type' => 'submit', 'class' => "t")));
	}
	public function testSubmitButton()
	{
		$this->assertEquals('', Html::submitButton());
		$this->assertEquals('', Html::submitButton('test', 'value', 'content<>', array('class' => 't')));
	}
	public function testResetButton()
	{
		$this->assertEquals('', Html::resetButton());
		$this->assertEquals('', Html::resetButton('test', 'value', 'content<>', array('class' => 't')));
	}
	public function testInput()
	{
		$this->assertEquals('', Html::input('text'));
		$this->assertEquals('', Html::input('text', 'test', 'value', array('class' => 't')));
	}
	public function testButtonInput()
	{
		$this->assertEquals('', Html::buttonInput('test'));
		$this->assertEquals('', Html::buttonInput('test', 'text', array('class' => 'a')));
	}
	public function testSubmitInput()
	{
		$this->assertEquals('', Html::submitInput());
		$this->assertEquals('', Html::submitInput('test', 'text', array('class' => 'a')));
	}
	public function testResetInput()
	{
		$this->assertEquals('', Html::resetInput());
		$this->assertEquals('', Html::resetInput('test', 'text', array('class' => 'a')));
	}
	public function testTextInput()
	{
		$this->assertEquals('', Html::textInput('test'));
		$this->assertEquals('', Html::textInput('test', 'value', array('class' => 't')));
	}
	public function testHiddenInput()
	{
		$this->assertEquals('', Html::hiddenInput('test'));
		$this->assertEquals('', Html::hiddenInput('test', 'value', array('class' => 't')));
	}
	public function testPasswordInput()
	{
		$this->assertEquals('', Html::passwordInput('test'));
		$this->assertEquals('', Html::passwordInput('test', 'value', array('class' => 't')));
	}
	public function testFileInput()
	{
		$this->assertEquals('', Html::fileInput('test'));
		$this->assertEquals('', Html::fileInput('test', 'value', array('class' => 't')));
	}
	public function testTextarea()
	{
		$this->assertEquals('', Html::textarea('test'));
		$this->assertEquals('', Html::textarea('test', 'value<>', array('class' => 't')));
	}
	public function testRadio()
	{
		$this->assertEquals('', Html::radio('test'));
		$this->assertEquals('', Html::radio('test', true, null, array('class' => 'a')));
		$this->assertEquals('', Html::radio('test', true, 2, array('class' => 'a' , 'uncheck' => '0')));
	}
	public function testCheckbox()
	{
		$this->assertEquals('', Html::checkbox('test'));
		$this->assertEquals('', Html::checkbox('test', true, null, array('class' => 'a')));
		$this->assertEquals('', Html::checkbox('test', true, 2, array('class' => 'a', 'uncheck' => '0')));
	}
	public function testDropDownList()
	{
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::dropDownList('test'));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::dropDownList('test', null, $this->getDataItems()));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::dropDownList('test', 'value2', $this->getDataItems()));
	}
	public function testListBox()
	{
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test'));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test', null, $this->getDataItems(), array('size' => 5)));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test', null, $this->getDataItems2()));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test', 'value2', $this->getDataItems()));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test', array('value1', 'value2'), $this->getDataItems()));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test', null, array(), array('multiple' => true)));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test', '', array(), array('unselect' => '0')));
	}
	public function testCheckboxList()
	{
		$this->assertEquals('', Html::checkboxList('test'));
		$expected = << text1
EOD;
		$this->assertEquals($expected, Html::checkboxList('test', array('value2'), $this->getDataItems()));
		$expected = << text1<>
EOD;
		$this->assertEquals($expected, Html::checkboxList('test', array('value2'), $this->getDataItems2()));
		$expected = <<
', Html::img('/example', array('alt' => 'something', 'width' => 10)));
	}
	public function testLabel()
	{
		$this->assertEquals('', Html::label('something<>'));
		$this->assertEquals('', Html::label('something<>', 'a'));
		$this->assertEquals('', Html::label('something<>', 'a', array('class' => 'test')));
	}
	public function testButton()
	{
		$this->assertEquals('', Html::button());
		$this->assertEquals('', Html::button('test', 'value', 'content<>'));
		$this->assertEquals('', Html::button('test', 'value', 'content<>', array('type' => 'submit', 'class' => "t")));
	}
	public function testSubmitButton()
	{
		$this->assertEquals('', Html::submitButton());
		$this->assertEquals('', Html::submitButton('test', 'value', 'content<>', array('class' => 't')));
	}
	public function testResetButton()
	{
		$this->assertEquals('', Html::resetButton());
		$this->assertEquals('', Html::resetButton('test', 'value', 'content<>', array('class' => 't')));
	}
	public function testInput()
	{
		$this->assertEquals('', Html::input('text'));
		$this->assertEquals('', Html::input('text', 'test', 'value', array('class' => 't')));
	}
	public function testButtonInput()
	{
		$this->assertEquals('', Html::buttonInput('test'));
		$this->assertEquals('', Html::buttonInput('test', 'text', array('class' => 'a')));
	}
	public function testSubmitInput()
	{
		$this->assertEquals('', Html::submitInput());
		$this->assertEquals('', Html::submitInput('test', 'text', array('class' => 'a')));
	}
	public function testResetInput()
	{
		$this->assertEquals('', Html::resetInput());
		$this->assertEquals('', Html::resetInput('test', 'text', array('class' => 'a')));
	}
	public function testTextInput()
	{
		$this->assertEquals('', Html::textInput('test'));
		$this->assertEquals('', Html::textInput('test', 'value', array('class' => 't')));
	}
	public function testHiddenInput()
	{
		$this->assertEquals('', Html::hiddenInput('test'));
		$this->assertEquals('', Html::hiddenInput('test', 'value', array('class' => 't')));
	}
	public function testPasswordInput()
	{
		$this->assertEquals('', Html::passwordInput('test'));
		$this->assertEquals('', Html::passwordInput('test', 'value', array('class' => 't')));
	}
	public function testFileInput()
	{
		$this->assertEquals('', Html::fileInput('test'));
		$this->assertEquals('', Html::fileInput('test', 'value', array('class' => 't')));
	}
	public function testTextarea()
	{
		$this->assertEquals('', Html::textarea('test'));
		$this->assertEquals('', Html::textarea('test', 'value<>', array('class' => 't')));
	}
	public function testRadio()
	{
		$this->assertEquals('', Html::radio('test'));
		$this->assertEquals('', Html::radio('test', true, null, array('class' => 'a')));
		$this->assertEquals('', Html::radio('test', true, 2, array('class' => 'a' , 'uncheck' => '0')));
	}
	public function testCheckbox()
	{
		$this->assertEquals('', Html::checkbox('test'));
		$this->assertEquals('', Html::checkbox('test', true, null, array('class' => 'a')));
		$this->assertEquals('', Html::checkbox('test', true, 2, array('class' => 'a', 'uncheck' => '0')));
	}
	public function testDropDownList()
	{
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::dropDownList('test'));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::dropDownList('test', null, $this->getDataItems()));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::dropDownList('test', 'value2', $this->getDataItems()));
	}
	public function testListBox()
	{
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test'));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test', null, $this->getDataItems(), array('size' => 5)));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test', null, $this->getDataItems2()));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test', 'value2', $this->getDataItems()));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test', array('value1', 'value2'), $this->getDataItems()));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test', null, array(), array('multiple' => true)));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::listBox('test', '', array(), array('unselect' => '0')));
	}
	public function testCheckboxList()
	{
		$this->assertEquals('', Html::checkboxList('test'));
		$expected = << text1
EOD;
		$this->assertEquals($expected, Html::checkboxList('test', array('value2'), $this->getDataItems()));
		$expected = << text1<>
EOD;
		$this->assertEquals($expected, Html::checkboxList('test', array('value2'), $this->getDataItems2()));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::checkboxList('test', array('value2'), $this->getDataItems(), array(
			'separator' => "
\n",
			'unselect' => '0',
		)));
		$expected = <<text1 
1
EOD;
		$this->assertEquals($expected, Html::checkboxList('test', array('value2'), $this->getDataItems(), array(
			'item' => function ($index, $label, $name, $checked, $value) {
				return $index . Html::label($label . ' ' . Html::checkbox($name, $checked, $value));
			}
		)));
	}
	public function testRadioList()
	{
		$this->assertEquals('', Html::radioList('test'));
		$expected = << text1
EOD;
		$this->assertEquals($expected, Html::radioList('test', array('value2'), $this->getDataItems()));
		$expected = << text1<>
EOD;
		$this->assertEquals($expected, Html::radioList('test',  array('value2'), $this->getDataItems2()));
		$expected = <<
EOD;
		$this->assertEquals($expected, Html::radioList('test', array('value2'), $this->getDataItems(), array(
			'separator' => "
\n",
			'unselect' => '0',
		)));
		$expected = <<text1 
1
EOD;
		$this->assertEquals($expected, Html::radioList('test', array('value2'), $this->getDataItems(), array(
			'item' => function ($index, $label, $name, $checked, $value) {
				return $index . Html::label($label . ' ' . Html::radio($name, $checked, $value));
			}
		)));
	}
	public function testRenderOptions()
	{
		$data = array(
			'value1' => 'label1',
			'group1' => array(
				'value11' => 'label11',
				'group11' => array(
					'value111' => 'label111',
				),
				'group12' => array(),
			),
			'value2' => 'label2',
			'group2' => array(),
		);
		$expected = <<please select<>
EOD;
		$attributes = array(
			'prompt' => 'please select<>',
			'options' => array(
				'value111' => array('class' => 'option'),
			),
			'groups' => array(
				'group12' => array('class' => 'group'),
			),
		);
		$this->assertEquals($expected, Html::renderSelectOptions(array('value111', 'value1'), $data, $attributes));
	}
	public function testRenderAttributes()
	{
		$this->assertEquals('', Html::renderTagAttributes(array()));
		$this->assertEquals(' name="test" value="1<>"', Html::renderTagAttributes(array('name' => 'test', 'empty' => null, 'value' => '1<>')));
		Html::$showBooleanAttributeValues = false;
		$this->assertEquals(' checked disabled', Html::renderTagAttributes(array('checked' => 'checked', 'disabled' => true, 'hidden' => false)));
		Html::$showBooleanAttributeValues = true;
	}
	protected function getDataItems()
	{
		return array(
			'value1' => 'text1',
			'value2' => 'text2',
		);
	}
	protected function getDataItems2()
	{
		return array(
			'value1<>' => 'text1<>',
			'value  2' => 'text  2',
		);
	}
}