123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- <?php defined('SYSPATH') OR die('Kohana bootstrap needs to be included before tests run');
- /**
- * Tests Kohana Form helper
- *
- * @group kohana
- * @group kohana.core
- * @group kohana.core.form
- *
- * @package Kohana
- * @category Tests
- * @author Kohana Team
- * @author Jeremy Bush <[email protected]>
- * @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>', 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, '<input type="file" name="foo" />'),
- );
- }
- /**
- * 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, "<select name=\"foo\"></select>"),
- array('foo', array('bar' => 'bar'), NULL, "<select name=\"foo\">\n<option value=\"bar\">bar</option>\n</select>"),
- array('foo', array('bar' => 'bar'), 'bar', "<select name=\"foo\">\n<option value=\"bar\" selected=\"selected\">bar</option>\n</select>"),
- array('foo', array('bar' => array('foo' => 'bar')), NULL, "<select name=\"foo\">\n<optgroup label=\"bar\">\n<option value=\"foo\">bar</option>\n</optgroup>\n</select>"),
- array('foo', array('bar' => array('foo' => 'bar')), 'foo', "<select name=\"foo\">\n<optgroup label=\"bar\">\n<option value=\"foo\" selected=\"selected\">bar</option>\n</optgroup>\n</select>"),
- // #2286
- array('foo', array('bar' => 'bar', 'unit' => 'test', 'foo' => 'foo'), array('bar', 'foo'), "<select name=\"foo\" multiple=\"multiple\">\n<option value=\"bar\" selected=\"selected\">bar</option>\n<option value=\"unit\">test</option>\n<option value=\"foo\" selected=\"selected\">foo</option>\n</select>"),
- );
- }
- /**
- * 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!', '<input type="submit" name="foo" value="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'), '<input type="image" name="foo" value="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 array(
- // $value, $result
- // Single for provided
- array('email', NULL, NULL, '<label for="email">Email</label>'),
- array('email_address', NULL, NULL, '<label for="email_address">Email Address</label>'),
- array('email-address', NULL, NULL, '<label for="email-address">Email Address</label>'),
- // For and text values provided
- array('name', 'First name', NULL, '<label for="name">First name</label>'),
- // with attributes
- array('lastname', 'Last name', array('class' => 'text'), '<label class="text" for="lastname">Last name</label>'),
- array('lastname', 'Last name', array('class' => 'text', 'id'=>'txt_lastname'), '<label id="txt_lastname" class="text" for="lastname">Last name</label>'),
- );
- }
- /**
- * 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));
- }
- }
|