* @copyright (c) Kohana Team
* @license https://koseven.ga/LICENSE.md
*/
class Kohana_FormTest extends Unittest_TestCase {
/**
* Defaults for this test
* @var array
*/
// @codingStandardsIgnoreStart
protected $environmentDefault = [
'Kohana::$base_url' => '/',
'HTTP_HOST' => 'kohanaframework.org',
'Kohana::$index_file' => '',
];
// @codingStandardsIgnoreEnd
/**
* Provides test data for test_open()
*
* @return array
*/
public function provider_open()
{
return [
[
['', NULL],
['action' => '']
],
[
[NULL, NULL],
['action' => '']
],
[
['foo', NULL],
['action' => '/foo']
],
[
['foo', ['method' => 'get']],
['action' => '/foo', 'method' => 'get']
],
[
['//www.example.com/', NULL],
['action' => '//www.example.com/']
],
];
}
/**
* Tests Form::open()
*
* @test
* @dataProvider provider_open
* @param boolean $input Input for Form::open
* @param boolean $expected Output for Form::open
*/
public function test_open($input, $expected)
{
list($action, $attributes) = $input;
$tag = Form::open($action, $attributes);
$matcher = [
'tag' => 'form',
// Default attributes
'attributes' => [
'method' => 'post',
'accept-charset' => 'utf-8',
],
];
$matcher['attributes'] = $expected + $matcher['attributes'];
$this->assertTag($matcher, $tag);
}
/**
* Tests Form::close()
*
* @test
*/
public function test_close()
{
$this->assertSame('', Form::close());
}
/**
* Provides test data for test_input()
*
* @return array
*/
public function provider_input()
{
return [
// $value, $result
['input', 'foo', 'bar', NULL, 'input'],
['input', 'foo', NULL, NULL, 'input'],
['hidden', 'foo', 'bar', NULL, 'hidden'],
['password', 'foo', 'bar', NULL, 'password'],
];
}
/**
* Tests Form::input()
*
* @test
* @dataProvider provider_input
* @param boolean $input Input for Form::input
* @param boolean $expected Output for Form::input
*/
public function test_input($type, $name, $value, $attributes)
{
$matcher = [
'tag' => 'input',
'attributes' => ['name' => $name, 'type' => $type]
];
// Form::input creates a text input
if ($type === 'input')
{
$matcher['attributes']['type'] = 'text';
}
// NULL just means no value
if ($value !== NULL)
{
$matcher['attributes']['value'] = $value;
}
// Add on any attributes
if (is_array($attributes))
{
$matcher['attributes'] = $attributes + $matcher['attributes'];
}
$tag = Form::$type($name, $value, $attributes);
$this->assertTag($matcher, $tag, $tag);
}
/**
* Provides test data for test_file()
*
* @return array
*/
public function provider_file()
{
return [
// $value, $result
['foo', NULL, ''],
];
}
/**
* Tests Form::file()
*
* @test
* @dataProvider provider_file
* @param boolean $input Input for Form::file
* @param boolean $expected Output for Form::file
*/
public function test_file($name, $attributes, $expected)
{
$this->assertSame($expected, Form::file($name, $attributes));
}
/**
* Provides test data for test_check()
*
* @return array
*/
public function provider_check()
{
return [
// $value, $result
['checkbox', 'foo', NULL, FALSE, NULL],
['checkbox', 'foo', NULL, TRUE, NULL],
['checkbox', 'foo', 'bar', TRUE, NULL],
['radio', 'foo', NULL, FALSE, NULL],
['radio', 'foo', NULL, TRUE, NULL],
['radio', 'foo', 'bar', TRUE, NULL],
];
}
/**
* Tests Form::check()
*
* @test
* @dataProvider provider_check
* @param boolean $input Input for Form::check
* @param boolean $expected Output for Form::check
*/
public function test_check($type, $name, $value, $checked, $attributes)
{
$matcher = ['tag' => 'input', 'attributes' => ['name' => $name, 'type' => $type]];
if ($value !== NULL)
{
$matcher['attributes']['value'] = $value;
}
if (is_array($attributes))
{
$matcher['attributes'] = $attributes + $matcher['attributes'];
}
if ($checked === TRUE)
{
$matcher['attributes']['checked'] = 'checked';
}
$tag = Form::$type($name, $value, $checked, $attributes);
$this->assertTag($matcher, $tag, $tag);
}
/**
* Provides test data for test_text()
*
* @return array
*/
public function provider_text()
{
return [
// $value, $result
['textarea', 'foo', 'bar', NULL],
['textarea', 'foo', 'bar', ['rows' => 20, 'cols' => 20]],
['button', 'foo', 'bar', NULL],
['label', 'foo', 'bar', NULL],
['label', 'foo', NULL, NULL],
];
}
/**
* Tests Form::textarea()
*
* @test
* @dataProvider provider_text
* @param boolean $input Input for Form::textarea
* @param boolean $expected Output for Form::textarea
*/
public function test_text($type, $name, $body, $attributes)
{
$matcher = [
'tag' => $type,
'attributes' => [],
'content' => $body,
];
if ($type !== 'label')
{
$matcher['attributes'] = ['name' => $name];
}
else
{
$matcher['attributes'] = ['for' => $name];
}
if (is_array($attributes))
{
$matcher['attributes'] = $attributes + $matcher['attributes'];
}
$tag = Form::$type($name, $body, $attributes);
$this->assertTag($matcher, $tag, $tag);
}
/**
* Provides test data for test_select()
*
* @return array
*/
public function provider_select()
{
return [
// $value, $result
['foo', NULL, NULL, ""],
['foo', ['bar' => 'bar'], NULL, ""],
['foo', ['bar' => 'bar'], 'bar', ""],
['foo', ['bar' => ['foo' => 'bar']], NULL, ""],
['foo', ['bar' => ['foo' => 'bar']], 'foo', ""],
// #2286
['foo', ['bar' => 'bar', 'unit' => 'test', 'foo' => 'foo'], ['bar', 'foo'], ""],
];
}
/**
* Tests Form::select()
*
* @test
* @dataProvider provider_select
* @param boolean $input Input for Form::select
* @param boolean $expected Output for Form::select
*/
public function test_select($name, $options, $selected, $expected)
{
// Much more efficient just to assertSame() rather than assertTag() on each element
$this->assertSame($expected, Form::select($name, $options, $selected));
}
/**
* Provides test data for test_submit()
*
* @return array
*/
public function provider_submit()
{
return [
// $value, $result
['foo', 'Foobar!', ''],
];
}
/**
* Tests Form::submit()
*
* @test
* @dataProvider provider_submit
* @param boolean $input Input for Form::submit
* @param boolean $expected Output for Form::submit
*/
public function test_submit($name, $value, $expected)
{
$matcher = [
'tag' => 'input',
'attributes' => ['name' => $name, 'type' => 'submit', 'value' => $value]
];
$this->assertTag($matcher, Form::submit($name, $value));
}
/**
* Provides test data for test_image()
*
* @return array
*/
public function provider_image()
{
return [
// $value, $result
['foo', 'bar', ['src' => 'media/img/login.png'], ''],
];
}
/**
* Tests Form::image()
*
* @test
* @dataProvider provider_image
* @param boolean $name Input for Form::image
* @param boolean $value Input for Form::image
* @param boolean $attributes Input for Form::image
* @param boolean $expected Output for Form::image
*/
public function test_image($name, $value, $attributes, $expected)
{
$this->assertSame($expected, Form::image($name, $value, $attributes));
}
/**
* Provides test data for test_label()
*
* @return array
*/
function provider_label()
{
return [
// $value, $result
// Single for provided
['email', NULL, NULL, ''],
['email_address', NULL, NULL, ''],
['email-address', NULL, NULL, ''],
// For and text values provided
['name', 'First name', NULL, ''],
// with attributes
['lastname', 'Last name', ['class' => 'text'], ''],
['lastname', 'Last name', ['class' => 'text', 'id'=>'txt_lastname'], ''],
];
}
/**
* Tests Form::label()
*
* @test
* @dataProvider provider_label
* @param boolean $for Input for Form::label
* @param boolean $text Input for Form::label
* @param boolean $attributes Input for Form::label
* @param boolean $expected Output for Form::label
*/
function test_label($for, $text, $attributes, $expected)
{
$this->assertSame($expected, Form::label($for, $text, $attributes));
}
}