array( 'HTMLEditorFieldTest_DummyMediaFormFieldExtension' ) ); protected $extraDataObjects = array('HTMLEditorFieldTest_Object'); public function setUp() { parent::setUp(); // Set backend root to /HTMLEditorFieldTest AssetStoreTest_SpyStore::activate('HTMLEditorFieldTest'); // Set the File Name Filter replacements so files have the expected names Config::inst()->update('SilverStripe\\Assets\\FileNameFilter', 'default_replacements', array( '/\s/' => '-', // remove whitespace '/_/' => '-', // underscores to dashes '/[^A-Za-z0-9+.\-]+/' => '', // remove non-ASCII chars, only allow alphanumeric plus dash and dot '/[\-]{2,}/' => '-', // remove duplicate dashes '/^[\.\-_]+/' => '', // Remove all leading dots, dashes or underscores )); // Create a test files for each of the fixture references $files = File::get()->exclude('ClassName', 'SilverStripe\\Assets\\Folder'); foreach($files as $file) { $fromPath = FRAMEWORK_PATH . '/tests/forms/images/' . $file->Name; $destPath = AssetStoreTest_SpyStore::getLocalPath($file); // Only correct for test asset store Filesystem::makeFolder(dirname($destPath)); copy($fromPath, $destPath); } } public function tearDown() { AssetStoreTest_SpyStore::reset(); parent::tearDown(); } public function testBasicSaving() { $obj = new HTMLEditorFieldTest_Object(); $editor = new HTMLEditorField('Content'); $editor->setValue('
Simple Content
'); $editor->saveInto($obj); $this->assertEquals('Simple Content
', $obj->Content, 'Attributes are preserved.'); $editor->setValue('Unclosed Tag'); $editor->saveInto($obj); $this->assertEquals('
Unclosed Tag
', $obj->Content, 'Unclosed tags are closed.'); } public function testNullSaving() { $obj = new HTMLEditorFieldTest_Object(); $editor = new HTMLEditorField('Content'); $editor->setValue(null); $editor->saveInto($obj); $this->assertEquals('', $obj->Content, "Doesn't choke on empty/null values."); } public function testResizedImageInsertion() { $obj = new HTMLEditorFieldTest_Object(); $editor = new HTMLEditorField('Content'); $fileID = $this->idFromFixture('SilverStripe\\Assets\\Image', 'example_image'); $editor->setValue(sprintf( '[image src="assets/HTMLEditorFieldTest_example.jpg" width="10" height="20" id="%d"]', $fileID )); $editor->saveInto($obj); $parser = new CSSContentParser($obj->dbObject('Content')->forTemplate()); $xml = $parser->getByXpath('//img'); $this->assertEquals( 'HTMLEditorFieldTest example', (string)$xml[0]['alt'], 'Alt tags are added by default based on filename' ); $this->assertEquals('', (string)$xml[0]['title'], 'Title tags are added by default.'); $this->assertEquals(10, (int)$xml[0]['width'], 'Width tag of resized image is set.'); $this->assertEquals(20, (int)$xml[0]['height'], 'Height tag of resized image is set.'); $neededFilename = '/assets/HTMLEditorFieldTest/f5c7c2f814/HTMLEditorFieldTest-example__ResizedImageWyIxMCIsIjIwIl0.jpg'; $this->assertEquals($neededFilename, (string)$xml[0]['src'], 'Correct URL of resized image is set.'); $this->assertTrue(file_exists(BASE_PATH.DIRECTORY_SEPARATOR.$neededFilename), 'File for resized image exists'); $this->assertEquals(false, $obj->HasBrokenFile, 'Referenced image file exists.'); } public function testMultiLineSaving() { $obj = $this->objFromFixture('HTMLEditorFieldTest_Object', 'home'); $editor = new HTMLEditorField('Content'); $editor->setValue('First Paragraph
Second Paragraph
'); $editor->saveInto($obj); $this->assertEquals('First Paragraph
Second Paragraph
', $obj->Content); } public function testSavingLinksWithoutHref() { $obj = $this->objFromFixture('HTMLEditorFieldTest_Object', 'home'); $editor = new HTMLEditorField('Content'); $editor->setValue(''); $editor->saveInto($obj); $this->assertEquals ( '', $obj->Content, 'Saving a link without a href attribute works' ); } public function testGetAnchors() { if (!class_exists('Page')) { $this->markTestSkipped(); } $linkedPage = new Page(); $linkedPage->Title = 'Dummy'; $linkedPage->write(); $html = <<