MDL-53140 forms: Added the float form element to the form API
[moodle.git] / lib / form / tests / float_test.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Unit tests for float form element.
19  *
20  * @package    core_form
21  * @category   test
22  * @copyright  2019 Shamim Rezaie <shamim@moodle.com>
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
26 defined('MOODLE_INTERNAL') || die();
28 global $CFG;
29 require_once($CFG->libdir . '/form/float.php');
31 /**
32  * Unit tests for MoodleQuickForm_float
33  *
34  * Contains test cases for testing MoodleQuickForm_float
35  *
36  * @package    core_form
37  * @copyright  2019 Shamim Rezaie <shamim@moodle.com>
38  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
39  */
40 class core_form_float_testcase extends advanced_testcase {
42     /**
43      * Define a local decimal separator.
44      *
45      * It is not possible to directly change the result of get_string in
46      * a unit test. Instead, we create a language pack for language 'xx' in
47      * dataroot and make langconfig.php with the string we need to change.
48      * The example separator used here is 'X'.
49      */
50     protected function define_local_decimal_separator() {
51         global $SESSION, $CFG;
53         $SESSION->lang = 'xx';
54         $langconfig = "<?php\n\$string['decsep'] = 'X';";
55         $langfolder = $CFG->dataroot . '/lang/xx';
56         check_dir_exists($langfolder);
57         file_put_contents($langfolder . '/langconfig.php', $langconfig);
58     }
60     /**
61      * Testcase to check generated timestamp
62      */
63     public function test_exportValue() {
64         $element = new MoodleQuickForm_float('testel');
66         $value = ['testel' => 3.14];
67         $this->assertEquals(3.14, $element->exportValue($value));
69         $value = ['testel' => '3.14'];
70         $this->assertEquals(3.14, $element->exportValue($value));
72         $value = ['testel' => '-3.14'];
73         $this->assertEquals(-3.14, $element->exportValue($value));
75         $value = ['testel' => '3.14blah'];
76         $this->assertEquals(false, $element->exportValue($value));
78         $value = ['testel' => 'blah'];
79         $this->assertEquals(false, $element->exportValue($value));
81         // Tests with a localised decimal separator.
82         $this->define_local_decimal_separator();
84         $value = ['testel' => 3.14];
85         $this->assertEquals(3.14, $element->exportValue($value));
87         $value = ['testel' => '3X14'];
88         $this->assertEquals(3.14, $element->exportValue($value));
90         $value = ['testel' => '-3X14'];
91         $this->assertEquals(-3.14, $element->exportValue($value));
93         $value = ['testel' => '3X14blah'];
94         $this->assertEquals(false, $element->exportValue($value));
96         $value = ['testel' => 'blah'];
97         $this->assertEquals(false, $element->exportValue($value));
98     }
99 }