From 61dc1d26cd56f2f12a70e7af67e3ae35a209d48e Mon Sep 17 00:00:00 2001 From: "Eloy Lafuente (stronk7)" Date: Tue, 5 Nov 2013 00:32:50 +0100 Subject: [PATCH 1/2] MDL-40267 forms: added some tests for the range rule --- lib/tests/formslib_test.php | 83 +++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/lib/tests/formslib_test.php b/lib/tests/formslib_test.php index e368c647b74..1ad2776bd31 100644 --- a/lib/tests/formslib_test.php +++ b/lib/tests/formslib_test.php @@ -121,6 +121,89 @@ class core_formslib_testcase extends advanced_testcase { } } + public function test_range_rule() { + global $CFG; + + require_once('HTML/QuickForm/Rule/Range.php'); // Requires this pear stuff. + + $strictformsrequired = null; + if (isset($CFG->strictformsrequired)) { + $strictformsrequired = $CFG->strictformsrequired; + } + + $rule = new HTML_QuickForm_Rule_Range(); + + // First run the tests with strictformsrequired off. + $CFG->strictformsrequired = false; + // Passes. + $rule->setName('minlength'); // Let's verify some min lengths. + $this->assertTrue($rule->validate('12', 2)); + $this->assertTrue($rule->validate('123', 2)); + $this->assertTrue($rule->validate('áé', 2)); + $this->assertTrue($rule->validate('áéí', 2)); + $rule->setName('maxlength'); // Let's verify some max lengths. + $this->assertTrue($rule->validate('1', 2)); + $this->assertTrue($rule->validate('12', 2)); + $this->assertTrue($rule->validate('á', 2)); + $this->assertTrue($rule->validate('áé', 2)); + $rule->setName('----'); // Let's verify some ranges. + $this->assertTrue($rule->validate('', array(0, 2))); + $this->assertTrue($rule->validate('1', array(0, 2))); + $this->assertTrue($rule->validate('12', array(0, 2))); + $this->assertTrue($rule->validate('á', array(0, 2))); + $this->assertTrue($rule->validate('áé', array(0, 2))); + + // Fail. + $rule->setName('minlength'); // Let's verify some min lengths. + $this->assertFalse($rule->validate('', 2)); + $this->assertFalse($rule->validate('1', 2)); + $this->assertFalse($rule->validate('á', 2)); + $rule->setName('maxlength'); // Let's verify some max lengths. + $this->assertFalse($rule->validate('123', 2)); + $this->assertFalse($rule->validate('áéí', 2)); + $rule->setName('----'); // Let's verify some ranges. + $this->assertFalse($rule->validate('', array(1, 2))); + $this->assertFalse($rule->validate('123', array(1, 2))); + $this->assertFalse($rule->validate('áéí', array(1, 2))); + + // Now run the same tests with it on to make sure things work as expected. + $CFG->strictformsrequired = true; + // Passes. + $rule->setName('minlength'); // Let's verify some min lengths. + $this->assertTrue($rule->validate('12', 2)); + $this->assertTrue($rule->validate('123', 2)); + $this->assertTrue($rule->validate('áé', 2)); + $this->assertTrue($rule->validate('áéí', 2)); + $rule->setName('maxlength'); // Let's verify some min lengths. + $this->assertTrue($rule->validate('1', 2)); + $this->assertTrue($rule->validate('12', 2)); + $this->assertTrue($rule->validate('á', 2)); + $this->assertTrue($rule->validate('áé', 2)); + $rule->setName('----'); // Let's verify some ranges. + $this->assertTrue($rule->validate('', array(0, 2))); + $this->assertTrue($rule->validate('1', array(0, 2))); + $this->assertTrue($rule->validate('12', array(0, 2))); + $this->assertTrue($rule->validate('á', array(0, 2))); + $this->assertTrue($rule->validate('áé', array(0, 2))); + + // Fail. + $rule->setName('minlength'); // Let's verify some min lengths. + $this->assertFalse($rule->validate('', 2)); + $this->assertFalse($rule->validate('1', 2)); + $this->assertFalse($rule->validate('á', 2)); + $rule->setName('maxlength'); // Let's verify some min lengths. + $this->assertFalse($rule->validate('123', 2)); + $this->assertFalse($rule->validate('áéí', 2)); + $rule->setName('----'); // Let's verify some ranges. + $this->assertFalse($rule->validate('', array(1, 2))); + $this->assertFalse($rule->validate('123', array(1, 2))); + $this->assertFalse($rule->validate('áéí', array(1, 2))); + + if (isset($strictformsrequired)) { + $CFG->strictformsrequired = $strictformsrequired; + } + } + public function test_generate_id_select() { $el = new MoodleQuickForm_select('choose_one', 'Choose one', array(1 => 'One', '2' => 'Two')); From 528ed758e6f212c66e095aecd3f7c54199dda086 Mon Sep 17 00:00:00 2001 From: Dan Poltawski Date: Tue, 5 Nov 2013 10:03:16 +0800 Subject: [PATCH 2/2] MDL-40267 forms: fix utf8 string length rules --- lib/pear/HTML/QuickForm/Rule/Range.php | 4 ++-- lib/pear/README_MOODLE.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pear/HTML/QuickForm/Rule/Range.php b/lib/pear/HTML/QuickForm/Rule/Range.php index 67a11802e39..e2db391cbd1 100644 --- a/lib/pear/HTML/QuickForm/Rule/Range.php +++ b/lib/pear/HTML/QuickForm/Rule/Range.php @@ -36,7 +36,7 @@ class HTML_QuickForm_Rule_Range extends HTML_QuickForm_Rule */ function validate($value, $options = null) { - $length = strlen($value); + $length = core_text::strlen($value); switch ($this->name) { case 'minlength': return ($length >= $options); case 'maxlength': return ($length <= $options); @@ -61,4 +61,4 @@ class HTML_QuickForm_Rule_Range extends HTML_QuickForm_Rule } // end func getValidationScript } // end class HTML_QuickForm_Rule_Range -?> \ No newline at end of file +?> diff --git a/lib/pear/README_MOODLE.txt b/lib/pear/README_MOODLE.txt index e97f631e8a0..537071def41 100644 --- a/lib/pear/README_MOODLE.txt +++ b/lib/pear/README_MOODLE.txt @@ -20,4 +20,4 @@ Full of our custom hacks, no way to upgrade to latest upstream. Most probably we will stop using this library in the future. MDL-20876 - replaced split() with explode() or preg_split() where appropriate - +MDL-40267 - Moodle core_text strlen functions used for range rule rule to be utf8 safe.