2009-02-12 10:38:43 +01:00
|
|
|
<?php
|
2015-08-30 07:02:55 +02:00
|
|
|
|
2016-06-15 06:03:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
use SilverStripe\ORM\FieldType\DBHTMLText;
|
|
|
|
use SilverStripe\ORM\FieldType\DBField;
|
|
|
|
|
2015-08-30 07:02:55 +02:00
|
|
|
|
2009-02-12 10:38:43 +01:00
|
|
|
/**
|
2012-04-12 08:02:46 +02:00
|
|
|
* @package framework
|
2009-02-12 10:38:43 +01:00
|
|
|
* @subpackage tests
|
|
|
|
*/
|
2015-08-30 07:02:55 +02:00
|
|
|
class DBHTMLTextTest extends SapphireTest {
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2009-02-12 10:38:43 +01:00
|
|
|
/**
|
2009-02-12 10:40:14 +01:00
|
|
|
* Test {@link HTMLText->LimitCharacters()}
|
2009-02-12 10:38:43 +01:00
|
|
|
*/
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testLimitCharacters() {
|
2009-02-12 10:38:43 +01:00
|
|
|
$cases = array(
|
|
|
|
'The little brown fox jumped over the lazy cow.' => 'The little brown fox...',
|
2010-11-29 04:18:02 +01:00
|
|
|
'<p>This is some text in a paragraph.</p>' => 'This is some text in...',
|
|
|
|
'This text contains & in it' => 'This text contains &...'
|
2009-02-12 10:38:43 +01:00
|
|
|
);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2009-02-12 10:38:43 +01:00
|
|
|
foreach($cases as $originalValue => $expectedValue) {
|
2015-08-30 07:02:55 +02:00
|
|
|
$textObj = new DBHTMLText('Test');
|
2009-02-12 10:38:43 +01:00
|
|
|
$textObj->setValue($originalValue);
|
|
|
|
$this->assertEquals($expectedValue, $textObj->LimitCharacters());
|
|
|
|
}
|
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testSummaryBasics() {
|
2009-06-17 13:36:49 +02:00
|
|
|
$cases = array(
|
|
|
|
'<h1>Should not take header</h1><p>Should take paragraph</p>' => 'Should take paragraph',
|
|
|
|
'<p>Should strip <b>tags, but leave</b> text</p>' => 'Should strip tags, but leave text',
|
|
|
|
'<p>Unclosed tags <br>should not phase it</p>' => 'Unclosed tags should not phase it',
|
2011-03-21 22:29:48 +01:00
|
|
|
'<p>Second paragraph</p><p>should not cause errors or appear in output</p>' => 'Second paragraph',
|
2014-08-15 08:53:05 +02:00
|
|
|
'<img src="hello" /><p>Second paragraph</p><p>should not cause errors or appear in output</p>'
|
2012-09-26 23:34:00 +02:00
|
|
|
=> 'Second paragraph',
|
|
|
|
' <img src="hello" /><p>Second paragraph</p><p>should not cause errors or appear in output</p>'
|
|
|
|
=> 'Second paragraph',
|
|
|
|
'<p><img src="remove me">example <img src="include me">text words hello<img src="hello"></p>'
|
|
|
|
=> 'example text words hello',
|
2009-06-17 13:36:49 +02:00
|
|
|
);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2009-06-17 13:36:49 +02:00
|
|
|
foreach($cases as $originalValue => $expectedValue) {
|
2015-08-30 07:02:55 +02:00
|
|
|
$textObj = new DBHTMLText('Test');
|
2009-06-17 13:36:49 +02:00
|
|
|
$textObj->setValue($originalValue);
|
|
|
|
$this->assertEquals($expectedValue, $textObj->Summary());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testSummaryLimits() {
|
2009-06-17 13:36:49 +02:00
|
|
|
$cases = array(
|
|
|
|
'<p>A long paragraph should be cut off if limit is set</p>' => 'A long paragraph should be...',
|
|
|
|
'<p>No matter <i>how many <b>tags</b></i> are in it</p>' => 'No matter how many tags...',
|
|
|
|
'<p>A sentence is. nicer than hard limits</p>' => 'A sentence is.',
|
|
|
|
'<p>But not. If it\'s too short</p>' => 'But not. If it\'s too...'
|
|
|
|
);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2009-06-17 13:36:49 +02:00
|
|
|
foreach($cases as $originalValue => $expectedValue) {
|
2015-08-30 07:02:55 +02:00
|
|
|
$textObj = new DBHTMLText('Test');
|
2009-06-17 13:36:49 +02:00
|
|
|
$textObj->setValue($originalValue);
|
|
|
|
$this->assertEquals($expectedValue, $textObj->Summary(5, 3, '...'));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testSummaryEndings() {
|
2009-06-17 13:36:49 +02:00
|
|
|
$cases = array(
|
|
|
|
'...', ' -> more', ''
|
|
|
|
);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2009-06-17 13:36:49 +02:00
|
|
|
$orig = '<p>Cut it off, cut it off</p>';
|
|
|
|
$match = 'Cut it off, cut';
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2009-06-17 13:36:49 +02:00
|
|
|
foreach($cases as $add) {
|
2015-08-30 07:02:55 +02:00
|
|
|
$textObj = new DBHTMLText();
|
2009-06-17 13:36:49 +02:00
|
|
|
$textObj->setValue($orig);
|
|
|
|
$this->assertEquals($match.$add, $textObj->Summary(4, 0, $add));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testSummaryFlexTooBigShouldNotCauseError() {
|
2009-06-17 13:36:49 +02:00
|
|
|
$orig = '<p>Cut it off, cut it off</p>';
|
|
|
|
$match = 'Cut it off, cut';
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2015-08-30 07:02:55 +02:00
|
|
|
$textObj = new DBHTMLText();
|
2009-06-17 13:36:49 +02:00
|
|
|
$textObj->setValue($orig);
|
|
|
|
$this->assertEquals($match, $textObj->Summary(4, 10, ''));
|
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testSummaryInvalidHTML() {
|
2009-06-17 13:36:49 +02:00
|
|
|
$cases = array(
|
2012-09-26 23:34:00 +02:00
|
|
|
'It\'s got a <p<> tag, but<p junk true>This doesn\'t <a id="boo">make</b class="wa"> < ><any< sense</p>'
|
|
|
|
=> 'This doesn\'t make any',
|
2009-06-17 13:36:49 +02:00
|
|
|
'This doesn\'t <a style="much horray= true>even</b> < ><have< a <i>p tag' => 'This doesn\'t even have'
|
|
|
|
);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2009-06-17 13:36:49 +02:00
|
|
|
foreach($cases as $orig => $match) {
|
2015-08-30 07:02:55 +02:00
|
|
|
$textObj = new DBHTMLText();
|
2009-06-17 13:36:49 +02:00
|
|
|
$textObj->setValue($orig);
|
|
|
|
$this->assertEquals($match, $textObj->Summary(4, 0, ''));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testFirstSentence() {
|
2009-06-17 13:36:49 +02:00
|
|
|
$many = str_repeat('many ', 100);
|
|
|
|
$cases = array(
|
|
|
|
'<h1>should ignore</h1><p>First sentence. Second sentence.</p>' => 'First sentence.',
|
|
|
|
'<h1>should ignore</h1><p>First Mr. sentence. Second sentence.</p>' => 'First Mr. sentence.',
|
2012-09-26 23:34:00 +02:00
|
|
|
"<h1>should ignore</h1><p>Sentence with {$many}words. Second sentence.</p>"
|
|
|
|
=> "Sentence with {$many}words.",
|
2013-08-21 08:54:05 +02:00
|
|
|
'<p>This classic picture book features a repetitive format that lends itself to audience interaction.'.
|
|
|
|
' Illustrator Eric Carle submitted new, bolder artwork for the 25th anniversary edition.</p>'
|
2013-05-01 06:03:58 +02:00
|
|
|
=> 'This classic picture book features a repetitive format that lends itself to audience interaction.'
|
2009-06-17 13:36:49 +02:00
|
|
|
);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2009-06-17 13:36:49 +02:00
|
|
|
foreach($cases as $orig => $match) {
|
2015-08-30 07:02:55 +02:00
|
|
|
$textObj = new DBHTMLText();
|
2009-06-17 13:36:49 +02:00
|
|
|
$textObj->setValue($orig);
|
|
|
|
$this->assertEquals($match, $textObj->FirstSentence());
|
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
}
|
2012-01-31 01:07:24 +01:00
|
|
|
|
|
|
|
public function testRAW() {
|
2012-03-27 06:57:42 +02:00
|
|
|
$data = DBField::create_field('HTMLText', 'This & This');
|
2012-01-31 01:07:24 +01:00
|
|
|
$this->assertEquals($data->RAW(), 'This & This');
|
|
|
|
|
2012-03-27 06:57:42 +02:00
|
|
|
$data = DBField::create_field('HTMLText', 'This & This');
|
2012-01-31 01:07:24 +01:00
|
|
|
$this->assertEquals($data->RAW(), 'This & This');
|
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-01-31 01:07:24 +01:00
|
|
|
public function testXML() {
|
2012-03-27 06:57:42 +02:00
|
|
|
$data = DBField::create_field('HTMLText', 'This & This');
|
2012-01-31 01:07:24 +01:00
|
|
|
$this->assertEquals($data->XML(), 'This & This');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testHTML() {
|
2012-03-27 06:57:42 +02:00
|
|
|
$data = DBField::create_field('HTMLText', 'This & This');
|
2012-01-31 01:07:24 +01:00
|
|
|
$this->assertEquals($data->HTML(), 'This & This');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testJS() {
|
2012-03-27 06:57:42 +02:00
|
|
|
$data = DBField::create_field('HTMLText', '"this is a test"');
|
2012-01-31 01:07:24 +01:00
|
|
|
$this->assertEquals($data->JS(), '\"this is a test\"');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testATT() {
|
2012-03-27 06:57:42 +02:00
|
|
|
$data = DBField::create_field('HTMLText', '"this is a test"');
|
2012-01-31 01:07:24 +01:00
|
|
|
$this->assertEquals($data->ATT(), '"this is a test"');
|
|
|
|
}
|
2011-12-12 06:44:47 +01:00
|
|
|
|
|
|
|
function testExists() {
|
2015-08-30 07:02:55 +02:00
|
|
|
$h = new DBHTMLText();
|
2011-12-12 06:44:47 +01:00
|
|
|
$h->setValue("");
|
|
|
|
$this->assertFalse($h->exists());
|
|
|
|
$h->setValue("<p></p>");
|
|
|
|
$this->assertFalse($h->exists());
|
|
|
|
$h->setValue("<p> </p>");
|
|
|
|
$this->assertFalse($h->exists());
|
|
|
|
$h->setValue("<h2/>");
|
|
|
|
$this->assertFalse($h->exists());
|
|
|
|
$h->setValue("<h2></h2>");
|
|
|
|
$this->assertFalse($h->exists());
|
|
|
|
|
|
|
|
$h->setValue("something");
|
|
|
|
$this->assertTrue($h->exists());
|
|
|
|
$h->setValue("<img src=\"dummy.png\">");
|
|
|
|
$this->assertTrue($h->exists());
|
|
|
|
$h->setValue("<img src=\"dummy.png\"><img src=\"dummy.png\">");
|
|
|
|
$this->assertTrue($h->exists());
|
|
|
|
$h->setValue("<p><img src=\"dummy.png\"></p>");
|
|
|
|
$this->assertTrue($h->exists());
|
|
|
|
|
|
|
|
$h->setValue("<iframe src=\"http://www.google.com\"></iframe>");
|
|
|
|
$this->assertTrue($h->exists());
|
|
|
|
$h->setValue("<embed src=\"test.swf\">");
|
|
|
|
$this->assertTrue($h->exists());
|
|
|
|
$h->setValue("<object width=\"400\" height=\"400\" data=\"test.swf\"></object>");
|
|
|
|
$this->assertTrue($h->exists());
|
|
|
|
|
|
|
|
|
|
|
|
$h->setValue("<p>test</p>");
|
|
|
|
$this->assertTrue($h->exists());
|
|
|
|
}
|
2014-02-16 23:22:26 +01:00
|
|
|
|
|
|
|
function testWhitelist() {
|
2015-08-30 07:02:55 +02:00
|
|
|
$textObj = new DBHTMLText('Test', 'meta,link');
|
2014-02-16 23:22:26 +01:00
|
|
|
$this->assertEquals(
|
2014-04-09 04:48:02 +02:00
|
|
|
'<meta content="Keep"><link href="Also Keep">',
|
|
|
|
$textObj->whitelistContent('<meta content="Keep"><p>Remove</p><link href="Also Keep" />Remove Text'),
|
|
|
|
'Removes any elements not in whitelist excluding text elements'
|
|
|
|
);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2015-08-30 07:02:55 +02:00
|
|
|
$textObj = new DBHTMLText('Test', 'meta,link,text()');
|
2014-04-09 04:48:02 +02:00
|
|
|
$this->assertEquals(
|
|
|
|
'<meta content="Keep"><link href="Also Keep">Keep Text',
|
|
|
|
$textObj->whitelistContent('<meta content="Keep"><p>Remove</p><link href="Also Keep" />Keep Text'),
|
|
|
|
'Removes any elements not in whitelist including text elements'
|
2014-02-16 23:22:26 +01:00
|
|
|
);
|
|
|
|
}
|
2009-02-12 10:38:43 +01:00
|
|
|
}
|