assertEqual(format_string("& &&&&& &&"), "& &&&&& &&"); $this->assertEqual(format_string("ANother & &&&&& Category"), "ANother & &&&&& Category"); $this->assertEqual(format_string("ANother & &&&&& Category", true), "ANother & &&&&& Category"); $this->assertEqual(format_string("Nick's Test Site & Other things", true), "Nick's Test Site & Other things"); // String entities $this->assertEqual(format_string("""), """); // Digital entities $this->assertEqual(format_string("&11234;"), "&11234;"); // Unicode entities $this->assertEqual(format_string("ᅻ"), "ᅻ"); } function test_s() { $this->assertEqual(s("This Breaks \" Strict"), "This Breaks " Strict"); $this->assertEqual(s("This Breaks \" Strict"), "This Breaks <a>" Strict</a>"); } function test_format_text_email() { $this->assertEqual("\n\nThis is a TEST", format_text_email('
This is a test
',FORMAT_HTML)); $this->assertEqual("\n\nThis is a TEST", format_text_email('This is a test
',FORMAT_HTML)); $this->assertEqual('& so is this', format_text_email('& so is this',FORMAT_HTML)); $tl = textlib_get_instance(); $this->assertEqual('Two bullets: '.$tl->code2utf8(8226).' *', format_text_email('Two bullets: • •',FORMAT_HTML)); $this->assertEqual($tl->code2utf8(0x7fd2).$tl->code2utf8(0x7fd2), format_text_email('習習',FORMAT_HTML)); } function test_highlight() { $this->assertEqual(highlight('good', 'This is good'), 'This is good'); $this->assertEqual(highlight('SpaN', 'span'), 'span'); $this->assertEqual(highlight('span', 'SpaN'), 'SpaN'); $this->assertEqual(highlight('span', 'span'), 'span'); $this->assertEqual(highlight('good is', 'He is good'), 'He is good'); $this->assertEqual(highlight('+good', 'This is good'), 'This is good'); $this->assertEqual(highlight('-good', 'This is good'), 'This is good'); $this->assertEqual(highlight('+good', 'This is goodness'), 'This is goodness'); $this->assertEqual(highlight('good', 'This is goodness'), 'This is goodness'); } function test_replace_ampersands() { $this->assertEqual(replace_ampersands_not_followed_by_entity("This & that "), "This & that "); $this->assertEqual(replace_ampersands_not_followed_by_entity("This   that "), "This   that "); } function test_strip_links() { $this->assertEqual(strip_links('this is a link'), 'this is a link'); } function test_wikify_links() { $this->assertEqual(wikify_links('this is a link'), 'this is a link [ http://someaddress.com/query ]'); } function test_fix_non_standard_entities() { $this->assertEqual(fix_non_standard_entities('£ä'), '£ä'); $this->assertEqual(fix_non_standard_entities('£ä'), '£ä'); } function test_prepare_url() { global $CFG, $PAGE; $fullexternalurl = 'http://www.externalsite.com/somepage.php'; $fullmoodleurl = $CFG->wwwroot . '/mod/forum/view.php?id=5'; $relativeurl1 = 'edit.php'; $relativeurl2 = '/edit.php'; $this->assertEqual($fullmoodleurl, prepare_url($fullmoodleurl)); $this->assertEqual($fullexternalurl, prepare_url($fullexternalurl)); $this->assertEqual("$CFG->wwwroot/admin/report/unittest/$relativeurl1", prepare_url($relativeurl1)); $this->assertEqual("$CFG->wwwroot$relativeurl2", prepare_url($relativeurl2)); // Use moodle_url object $this->assertEqual($fullmoodleurl, prepare_url(new moodle_url('/mod/forum/view.php', array('id' => 5)))); $this->assertEqual($fullexternalurl, prepare_url(new moodle_url($fullexternalurl))); $this->assertEqual("$CFG->wwwroot/admin/report/unittest/$relativeurl1", prepare_url(new moodle_url($relativeurl1))); $this->assertEqual("$CFG->wwwroot$relativeurl2", prepare_url(new moodle_url($relativeurl2))); } function test_compare_url() { $url1 = new moodle_url('index.php', array('var1' => 1, 'var2' => 2)); $url2 = new moodle_url('index2.php', array('var1' => 1, 'var2' => 2, 'var3' => 3)); $this->assertFalse($url1->compare($url2, URL_MATCH_BASE)); $this->assertFalse($url1->compare($url2, URL_MATCH_PARAMS)); $this->assertFalse($url1->compare($url2, URL_MATCH_EXACT)); $url2 = new moodle_url('index.php', array('var1' => 1, 'var3' => 3)); $this->assertTrue($url1->compare($url2, URL_MATCH_BASE)); $this->assertFalse($url1->compare($url2, URL_MATCH_PARAMS)); $this->assertFalse($url1->compare($url2, URL_MATCH_EXACT)); $url2 = new moodle_url('index.php', array('var1' => 1, 'var2' => 2, 'var3' => 3)); $this->assertTrue($url1->compare($url2, URL_MATCH_BASE)); $this->assertTrue($url1->compare($url2, URL_MATCH_PARAMS)); $this->assertFalse($url1->compare($url2, URL_MATCH_EXACT)); $url2 = new moodle_url('index.php', array('var2' => 2, 'var1' => 1)); $this->assertTrue($url1->compare($url2, URL_MATCH_BASE)); $this->assertTrue($url1->compare($url2, URL_MATCH_PARAMS)); $this->assertTrue($url1->compare($url2, URL_MATCH_EXACT)); } function old_convert_urls_into_links(&$text) { /// Make lone URLs into links. eg http://moodle.com/ $text = eregi_replace("([[:space:]]|^|\(|\[)([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])", "\\1\\2://\\3\\4", $text); /// eg www.moodle.com $text = eregi_replace("([[:space:]]|^|\(|\[)www\.([^[:space:]]*)([[:alnum:]#?/&=])", "\\1www.\\2\\3", $text); } function get_test_text(){ return <<text www.moodle.org</p> text' => 'URL:
text www.moodle.org</p> text',
//decimal url parameter
'URL: www.moodle.org?u=1.23' => 'URL: www.moodle.org?u=1.23',
//escaped space in url
'URL: www.moodle.org?u=test+param&' => 'URL: www.moodle.org?u=test+param&',
//odd characters in url param
'URL: www.moodle.org?param=:)' => 'URL: www.moodle.org?param=:)',
//multiple urls
'URL: http://moodle.org www.moodle.org'
=> 'URL: http://moodle.org www.moodle.org',
//containing anchor tags including a class parameter and a url to convert
'URL: http://moodle.org www.moodle.org http://moodle.org'
=> 'URL: http://moodle.org www.moodle.org http://moodle.org',
//subdomain
'http://subdomain.moodle.org - URL' => 'http://subdomain.moodle.org - URL',
//multiple subdomains
'http://subdomain.subdomain.moodle.org - URL' => 'http://subdomain.subdomain.moodle.org - URL',
//looks almost like a link but isnt
'This contains http, http:// and www but no actual links.'=>'This contains http, http:// and www but no actual links.',
//no link at all
'This is a story about moodle.coming to a cinema near you.'=>'This is a story about moodle.coming to a cinema near you.',
//utf 8 characters
'http://Iñtërnâtiônàlizætiøn.com?ô=nëø'=>'http://Iñtërnâtiônàlizætiøn.com?ô=nëø',
'www.Iñtërnâtiônàlizætiøn.com?ô=nëø'=>'www.Iñtërnâtiônàlizætiøn.com?ô=nëø',
//too hard to identify without additional regexs
'moodle.org' => 'moodle.org',
//some text with no link between related html tags
'no link here' => 'no link here',
//some text with a link between related html tags
'a link here www.moodle.org' => 'a link here www.moodle.org',
//some text containing a link within unrelated tags
'
This is some text. www.moodle.com then some more text
' => '
This is some text. www.moodle.com then some more text
',
//check we aren't modifying img tags
'image' => 'image
',
//partially escaped img tag
'partially escaped img tag <img src="http://moodle.org/logo/logo-240x60.gif" />' => 'partially escaped img tag <img src="http://moodle.org/logo/logo-240x60.gif" />',
//fully escaped img tag
htmlspecialchars('fully escaped img tag
') => 'fully escaped img tag <img src="http://moodle.org/logo/logo-240x60.gif" />',
);
foreach ($texts as $text => $correctresult) {
if(mb_detect_encoding($text)=='UTF-8') {
$text_for_msg = utf8_decode($text);
}
else {
$text_for_msg = $text;
}
//urldecode text or things like %28 cause sprintf's, looking for %s's, to throw an exception
$msg = "Testing text: ".urldecode($text_for_msg).": %s";
convert_urls_into_links($text);
//these decode's make all the strings non-garbled. The tests pass without them.
if(mb_detect_encoding($text)=='UTF-8') {
$text = utf8_decode($text);
}
if(mb_detect_encoding($correctresult)=='UTF-8') {
$correctresult = utf8_decode($correctresult);
}
$this->assertEqual($text, $correctresult, $msg);
}
//performance testing
$reps = 1000;
$time_start = microtime(true);
for($i=0;$i<$reps;$i++)
{
$text = $this->get_test_text();
convert_urls_into_links($text);
}
$time_end = microtime(true);
$new_time = $time_end - $time_start;
$time_start = microtime(true);
for($i=0;$i<$reps;$i++)
{
$text = $this->get_test_text();
$this->old_convert_urls_into_links($text);
}
$time_end = microtime(true);
$old_time = $time_end - $time_start;
$fast_enough = false;
if( $new_time < $old_time ) {
$fast_enough = true;
}
$this->assertEqual($fast_enough, true, 'Timing test:');
}
}