mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
BUGFIX Fixed Text->LimitWordCount() not returning the correct number of words in the truncated text.
MINOR Added TextTest for testing Text class methods git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.3@69220 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
576f7e15c6
commit
358fbd418e
@ -23,13 +23,14 @@ class Text extends DBField {
|
||||
* {@link LimitWordCountXML()} instead.
|
||||
*
|
||||
* @param int $numWords Number of words to limit by
|
||||
* @param string $add Ellipsis to add to the end of truncated string
|
||||
* @return string
|
||||
*/
|
||||
function LimitWordCount($numWords = 26, $add = '...') {
|
||||
$this->value = Convert::xml2raw($this->value);
|
||||
$ret = explode(' ', $this->value, $numWords);
|
||||
$ret = explode(' ', $this->value, $numWords + 1);
|
||||
|
||||
if(count($ret) < $numWords - 1) {
|
||||
if(count($ret) <= $numWords - 1) {
|
||||
$ret = $this->value;
|
||||
} else {
|
||||
array_pop($ret);
|
||||
@ -56,7 +57,7 @@ class Text extends DBField {
|
||||
* has the potential to return malformed HTML.
|
||||
*
|
||||
* @param int $limit Number of characters to limit by
|
||||
* @param string $add Ellipsis to add to the end of limited string
|
||||
* @param string $add Ellipsis to add to the end of truncated string
|
||||
* @return string
|
||||
*/
|
||||
function LimitCharacters($limit = 20, $add = "...") {
|
||||
|
49
tests/fieldtypes/TextTest.php
Normal file
49
tests/fieldtypes/TextTest.php
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
/**
|
||||
* @package sapphire
|
||||
* @subpackage tests
|
||||
*/
|
||||
class TextTest extends SapphireTest {
|
||||
|
||||
/**
|
||||
* Test {@link Text->LimitWordCount()}
|
||||
*/
|
||||
function testLimitWordCount() {
|
||||
$cases = array(
|
||||
/* Standard words limited, ellipsis added if truncated */
|
||||
'The little brown fox jumped over the lazy cow.' => 'The little brown...',
|
||||
|
||||
/* Words less than the limt word count don't get truncated, ellipsis not added */
|
||||
'Two words' => 'Two words', // Two words shouldn't have an ellipsis
|
||||
'One' => 'One', // Neither should one word
|
||||
'' => '', // No words produces nothing!
|
||||
|
||||
/* HTML tags get stripped out, leaving the raw text */
|
||||
'<p>Text inside a paragraph tag should also work</p>' => 'Text inside a...',
|
||||
'<p><span>Text nested inside another tag should also work</span></p>' => 'Text nested inside...'
|
||||
);
|
||||
|
||||
foreach($cases as $originalValue => $expectedValue) {
|
||||
$textObj = new Text('Test');
|
||||
$textObj->setValue($originalValue);
|
||||
$this->assertEquals($expectedValue, $textObj->LimitWordCount(3));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test {@link Text->LimitWordCountXML()}
|
||||
*/
|
||||
/*function testLimitWordCountXML() {
|
||||
$cases = array(
|
||||
// @todo add cases to test by
|
||||
);
|
||||
|
||||
foreach($cases as $originalValue => $expectedValue) {
|
||||
$textObj = new Text('Test');
|
||||
$textObj->setValue($originalValue);
|
||||
$this->assertEquals($expectedValue, $textObj->LimitWordCountXML(3));
|
||||
}
|
||||
}*/
|
||||
|
||||
}
|
||||
?>
|
Loading…
x
Reference in New Issue
Block a user