<?php /** * Test for float textboxes * * @link http://www.egroupware.org * @author Nathan Gray * @package api * @copyright (c) 2017 Nathan Gray * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License */ namespace EGroupware\Api\Etemplate\Widget; require_once realpath(__DIR__.'/../WidgetBaseTest.php'); use EGroupware\Api\Etemplate; class FloatTest extends \EGroupware\Api\Etemplate\WidgetBaseTest { const TEST_TEMPLATE = 'api.float_test'; /** * Test for validation - floats * * * @dataProvider floatProvider */ public function testFloat($value, $expected, $error) { // Instanciate the template $etemplate = new Etemplate(); $etemplate->read(static::TEST_TEMPLATE, 'test'); // Content - doesn't really matter, we're changing it $content = array( 'widget' => 'Hello' ); $this->validateRoundTrip($etemplate, $content, array('widget' => $value), $error ? array() : array('widget' => $expected), $error ? array('widget' => $error) : array() ); } /** * Data provider for float tests */ public function floatProvider() { return array( // User value, Expected Error array('', '', false), array(1, 1, false), array(0, 0, false), array(-1, -1, false), array(1.5, 1.5, false), array('1,5', 1.5, false), // Comma as separator is handled array('one', '', true) ); } /** * Test for float minimum attribute * * @param String|numeric $value * @param float $min Minimum allowed value * @param boolean $error * * @dataProvider minProvider */ public function testMin($value, $min, $error) { // Instanciate the template $etemplate = new Etemplate(); $etemplate->read(static::TEST_TEMPLATE, 'test'); // Content - doesn't really matter, we're changing it $content = array( 'widget' => 'Hello', 'widget_readonly' => 'World' ); $result = $this->mockedExec($etemplate, $content, array(), array(), array()); $etemplate->getElementById('widget')->attrs['min'] = $min; $etemplate->getElementById('widget')->attrs['max'] = null; // Check for the load $data = array(); foreach($result as $command) { if($command['type'] == 'et2_load') { $data = $command['data']; break; } } // 'Edit' the data client side $data['data']['content'] = array('widget' => $value); // Let it validate Etemplate::ajax_process_content($data['data']['etemplate_exec_id'], $data['data']['content'], false); $content = static::$mocked_exec_result; static::$mocked_exec_result = array(); return $this->validateTest($content, $error ? array() : array('widget' => $value), $error ? array('widget' => $error) : array() ); } public function minProvider() { return Array( // User value, Min, Error array('', 0, FALSE), array(1.0, 0, FALSE), array(0.0, 0, FALSE), array(-1.0, 0, TRUE), array(1.5, 0, FALSE), array(1, 10, TRUE), array(10, 10, FALSE), array(1.5, 1.5, FALSE), array(0.5, 1.5, TRUE), ); } /** * Test for float maximum attribute * * @param String|numeric $value * @param float $max Maximum allowed value * @param boolean $error * * @dataProvider maxProvider */ public function testMax($value, $max, $error) { // Instanciate the template $etemplate = new Etemplate(); $etemplate->read(static::TEST_TEMPLATE, 'test'); // Content - doesn't really matter, we're changing it $content = array( 'widget' => 'Hello', 'widget_readonly' => 'World' ); $result = $this->mockedExec($etemplate, $content, array(), array(), array()); $etemplate->getElementById('widget')->attrs['min'] = null; $etemplate->getElementById('widget')->attrs['max'] = $max; // Check for the load $data = array(); foreach($result as $command) { if($command['type'] == 'et2_load') { $data = $command['data']; break; } } // 'Edit' the data client side $data['data']['content'] = array('widget' => $value); // Let it validate Etemplate::ajax_process_content($data['data']['etemplate_exec_id'], $data['data']['content'], false); $content = static::$mocked_exec_result; static::$mocked_exec_result = array(); return $this->validateTest($content, $error ? array() : array('widget' => $value), $error ? array('widget' => $error) : array() ); } public function maxProvider() { return Array( // User value, Max, Error array('', 0, FALSE), array(1.0, 0, TRUE), array(0, 0, FALSE), array(-1.0, 0, FALSE), array(1.5, 2, FALSE), array(1, 10, FALSE), array(10, 10, FALSE), array(2.5, 2, TRUE), array(1.5, 2.5, FALSE), array(3, 2.5, TRUE), ); } }