* @copyright (c) 2008-2012 Kohana Team * @license http://kohanaframework.org/license */ class Kohana_FormTest extends Unittest_TestCase { /** * Defaults for this test * @var array */ // @codingStandardsIgnoreStart protected $environmentDefault = array( 'Kohana::$base_url' => '/', 'HTTP_HOST' => 'kohanaframework.org', 'Kohana::$index_file' => '', ); // @codingStandardsIgnoreEnd /** * Provides test data for test_open() * * @return array */ public function provider_open() { return array( array( array('', NULL), array('action' => '') ), array( array(NULL, NULL), array('action' => '') ), array( array('foo', NULL), array('action' => '/foo') ), array( array('foo', array('method' => 'get')), array('action' => '/foo', 'method' => 'get') ), ); } /** * 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 = array( 'tag' => 'form', // Default attributes 'attributes' => array( '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 array( // $value, $result array('input', 'foo', 'bar', NULL, 'input'), array('input', 'foo', NULL, NULL, 'input'), array('hidden', 'foo', 'bar', NULL, 'hidden'), array('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 = array( 'tag' => 'input', 'attributes' => array('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 array( // $value, $result array('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 array( // $value, $result array('checkbox', 'foo', NULL, FALSE, NULL), array('checkbox', 'foo', NULL, TRUE, NULL), array('checkbox', 'foo', 'bar', TRUE, NULL), array('radio', 'foo', NULL, FALSE, NULL), array('radio', 'foo', NULL, TRUE, NULL), array('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 = array('tag' => 'input', 'attributes' => array('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 array( // $value, $result array('textarea', 'foo', 'bar', NULL), array('textarea', 'foo', 'bar', array('rows' => 20, 'cols' => 20)), array('button', 'foo', 'bar', NULL), array('label', 'foo', 'bar', NULL), array('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 = array( 'tag' => $type, 'attributes' => array(), 'content' => $body, ); if ($type !== 'label') { $matcher['attributes'] = array('name' => $name); } else { $matcher['attributes'] = array('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 array( // $value, $result array('foo', NULL, NULL, ""), array('foo', array('bar' => 'bar'), NULL, ""), array('foo', array('bar' => 'bar'), 'bar', ""), array('foo', array('bar' => array('foo' => 'bar')), NULL, ""), array('foo', array('bar' => array('foo' => 'bar')), 'foo', ""), // #2286 array('foo', array('bar' => 'bar', 'unit' => 'test', 'foo' => 'foo'), array('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 array( // $value, $result array('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 = array( 'tag' => 'input', 'attributes' => array('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 array( // $value, $result array('foo', 'bar', array('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 array( // $value, $result // Single for provided array('email', NULL, NULL, ''), array('email_address', NULL, NULL, ''), array('email-address', NULL, NULL, ''), // For and text values provided array('name', 'First name', NULL, ''), // with attributes array('lastname', 'Last name', array('class' => 'text'), ''), array('lastname', 'Last name', array('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)); } }