[BUGFIX] ContentObjectRenderer instantiates old class names
authorChristian Kuhn <lolli@schwarzbu.ch>
Thu, 29 Nov 2012 18:08:34 +0000 (19:08 +0100)
committerChristian Kuhn <lolli@schwarzbu.ch>
Thu, 29 Nov 2012 19:24:22 +0000 (20:24 +0100)
The content object renderer still instantiates content objects with
tslib_content_ prefix. The patch changes this to the namespaced
class. Additionally, all content objects are now tested for successful
instantiation with additional unit tests. While creating those tests
it became obvious that the ShockwaveFlashObject content object was
named incorrectly, so this is adapted along the way.

Change-Id: Ie12474df270b29e8e2d8d8894fa94d24747d94d8
Fixes: #43456
Releases: 6.1, 6.0
Reviewed-on: http://review.typo3.org/16863
Reviewed-by: Christian Kuhn
Tested-by: Christian Kuhn
typo3/sysext/cms/tslib/content/class.tslib_content_searchresult.php
typo3/sysext/cms/tslib/content/class.tslib_content_shockwaveflashobject.php
typo3/sysext/core/Migrations/Code/LegacyClassesForIde.php
typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
typo3/sysext/frontend/Classes/ContentObject/ShockwaveFlashContentObject.php [deleted file]
typo3/sysext/frontend/Classes/ContentObject/ShockwaveFlashObjectContentObject.php [new file with mode: 0644]
typo3/sysext/frontend/Migrations/Code/ClassAliasMap.php
typo3/sysext/frontend/Tests/Unit/ContentObject/ContentObjectRendererTest.php

index 1ac806e..c86bacb 100644 (file)
@@ -1,8 +1,8 @@
 <?php
 /*
- * @deprecated since 6.0, the classname tslib_content_ShockwaveFlashObject and this file is obsolete
+ * @deprecated since 6.0, the classname tslib_content_SearchResult and this file is obsolete
  * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/frontend/Classes/ContentObject/ShockwaveFlashContentObject.php
+ * typo3/sysext/frontend/Classes/ContentObject/SearchResultContentObject.php
  */
 require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('frontend') . 'Classes/ContentObject/SearchResultContentObject.php';
 ?>
\ No newline at end of file
index e5c299a..00c0092 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * @deprecated since 6.0, the classname tslib_content_ShockwaveFlashObject and this file is obsolete
  * and will be removed with 6.2. The class was renamed and is now located at:
- * typo3/sysext/frontend/Classes/ContentObject/ShockwaveFlashContentObject.php
+ * typo3/sysext/frontend/Classes/ContentObject/ShockwaveFlashObjectContentObject.php
  */
-require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('frontend') . 'Classes/ContentObject/ShockwaveFlashContentObject.php';
+require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('frontend') . 'Classes/ContentObject/ShockwaveFlashObjectContentObject.php';
 ?>
\ No newline at end of file
index 7195846..5900680 100644 (file)
@@ -5139,7 +5139,7 @@ class tslib_content_SearchResult extends \TYPO3\CMS\Frontend\ContentObject\Searc
 /**
  * @deprecated since 6.0 will be removed in 7.0
  */
-class tslib_content_ShockwaveFlashObject extends \TYPO3\CMS\Frontend\ContentObject\ShockwaveFlashContentObject {}
+class tslib_content_ShockwaveFlashObject extends \TYPO3\CMS\Frontend\ContentObject\ShockwaveFlashObjectContentObject {}
 
 /**
  * @deprecated since 6.0 will be removed in 7.0
index 54b0293..17b5ea3 100644 (file)
@@ -803,12 +803,15 @@ class ContentObjectRenderer {
                        'FLOWPLAYER' => 'FlowPlayer',
                        'QTOBJECT' => 'QuicktimeObject',
                        'SVG' => 'ScalableVectorGraphics',
-                       'EDITPANEL' => 'EditPanel'
+                       'EDITPANEL' => 'EditPanel',
                );
                $name = $classMapping[$name];
                if (!array_key_exists($name, $this->contentObjects)) {
                        try {
-                               $this->contentObjects[$name] = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('tslib_content_' . $name, $this);
+                               $this->contentObjects[$name] = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
+                                       'TYPO3\\CMS\\Frontend\\ContentObject\\' . $name . 'ContentObject',
+                                       $this
+                               );
                        } catch (\ReflectionException $e) {
                                $this->contentObjects[$name] = NULL;
                        }
diff --git a/typo3/sysext/frontend/Classes/ContentObject/ShockwaveFlashContentObject.php b/typo3/sysext/frontend/Classes/ContentObject/ShockwaveFlashContentObject.php
deleted file mode 100644 (file)
index 1d2b839..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-namespace TYPO3\CMS\Frontend\ContentObject;
-
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2010-2011 Xavier Perseguers <typo3@perseguers.ch>
- *  (c) 2010-2011 Steffen Kamper <steffen@typo3.org>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project is
- *  free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
- *  A copy is found in the textfile GPL.txt and important notices to the license
- *  from the author is found in LICENSE.txt distributed with these scripts.
- *
- *
- *  This script is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
-/**
- * Contains SWFOBJECT class object.
- *
- * @author Xavier Perseguers <typo3@perseguers.ch>
- * @author Steffen Kamper <steffen@typo3.org>
- */
-class ShockwaveFlashContentObject extends \TYPO3\CMS\Frontend\ContentObject\AbstractContentObject {
-
-       /**
-        * Rendering the cObject, SWFOBJECT
-        *
-        * @param array $conf Array of TypoScript properties
-        * @return string Output
-        */
-       public function render($conf = array()) {
-               $prefix = '';
-               if ($GLOBALS['TSFE']->baseUrl) {
-                       $prefix = $GLOBALS['TSFE']->baseUrl;
-               }
-               if ($GLOBALS['TSFE']->absRefPrefix) {
-                       $prefix = $GLOBALS['TSFE']->absRefPrefix;
-               }
-               $type = isset($conf['type.']) ? $this->cObj->stdWrap($conf['type'], $conf['type.']) : $conf['type'];
-               $typeConf = $conf[$type . '.'];
-               // Add SWFobject js-file
-               $GLOBALS['TSFE']->getPageRenderer()->addJsFile(TYPO3_mainDir . 'contrib/flashmedia/swfobject/swfobject.js');
-               $player = isset($typeConf['player.']) ? $this->cObj->stdWrap($typeConf['player'], $typeConf['player.']) : $typeConf['player'];
-               $installUrl = isset($conf['installUrl.']) ? $this->cObj->stdWrap($conf['installUrl'], $conf['installUrl.']) : $conf['installUrl'];
-               if (!$installUrl) {
-                       $installUrl = $prefix . TYPO3_mainDir . 'contrib/flashmedia/swfobject/expressInstall.swf';
-               }
-               $filename = isset($conf['file.']) ? $this->cObj->stdWrap($conf['file'], $conf['file.']) : $conf['file'];
-               $forcePlayer = isset($conf['forcePlayer.']) ? $this->cObj->stdWrap($conf['forcePlayer'], $conf['forcePlayer.']) : $conf['forcePlayer'];
-               if ($filename && $forcePlayer) {
-                       if (strpos($filename, '://') !== FALSE) {
-                               $conf['flashvars.']['file'] = $filename;
-                       } else {
-                               if ($prefix) {
-                                       $conf['flashvars.']['file'] = $prefix . $filename;
-                               } else {
-                                       $conf['flashvars.']['file'] = str_repeat('../', substr_count($player, '/')) . $filename;
-                               }
-                       }
-               } else {
-                       $player = $filename;
-               }
-               // Write calculated values in conf for the hook
-               $conf['player'] = $player;
-               $conf['installUrl'] = $installUrl;
-               $conf['filename'] = $filename;
-               $conf['prefix'] = $prefix;
-               // Merge with default parameters
-               $conf['flashvars.'] = array_merge((array) $typeConf['default.']['flashvars.'], (array) $conf['flashvars.']);
-               $conf['params.'] = array_merge((array) $typeConf['default.']['params.'], (array) $conf['params.']);
-               $conf['attributes.'] = array_merge((array) $typeConf['default.']['attributes.'], (array) $conf['attributes.']);
-               $conf['embedParams'] = 'flashvars, params, attributes';
-               // Hook for manipulating the conf array, it's needed for some players like flowplayer
-               if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/hooks/class.tx_cms_mediaitems.php']['swfParamTransform'])) {
-                       foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/hooks/class.tx_cms_mediaitems.php']['swfParamTransform'] as $classRef) {
-                               \TYPO3\CMS\Core\Utility\GeneralUtility::callUserFunction($classRef, $conf, $this);
-                       }
-               }
-               if (is_array($conf['flashvars.'])) {
-                       \TYPO3\CMS\Core\Utility\GeneralUtility::remapArrayKeys($conf['flashvars.'], $typeConf['mapping.']['flashvars.']);
-               }
-               $flashvars = 'var flashvars = ' . (count($conf['flashvars.']) ? json_encode($conf['flashvars.']) : '{}') . ';';
-               if (is_array($conf['params.'])) {
-                       \TYPO3\CMS\Core\Utility\GeneralUtility::remapArrayKeys($conf['params.'], $typeConf['mapping.']['params.']);
-               }
-               $params = 'var params = ' . (count($conf['params.']) ? json_encode($conf['params.']) : '{}') . ';';
-               if (is_array($conf['attributes.'])) {
-                       \TYPO3\CMS\Core\Utility\GeneralUtility::remapArrayKeys($conf['attributes.'], $typeConf['attributes.']['params.']);
-               }
-               $attributes = 'var attributes = ' . (count($conf['attributes.']) ? json_encode($conf['attributes.']) : '{}') . ';';
-               $flashVersion = isset($conf['flashVersion.']) ? $this->cObj->stdWrap($conf['flashVersion'], $conf['flashVersion.']) : $conf['flashVersion'];
-               if (!$flashVersion) {
-                       $flashVersion = '9';
-               }
-               $replaceElementIdString = uniqid('mmswf');
-               $GLOBALS['TSFE']->register['MMSWFID'] = $replaceElementIdString;
-               $alternativeContent = isset($conf['alternativeContent.']) ? $this->cObj->stdWrap($conf['alternativeContent'], $conf['alternativeContent.']) : $conf['alternativeContent'];
-               $layout = isset($conf['layout.']) ? $this->cObj->stdWrap($conf['layout'], $conf['layout.']) : $conf['layout'];
-               $content = str_replace('###ID###', $replaceElementIdString, $layout);
-               $content = str_replace('###SWFOBJECT###', '<div id="' . $replaceElementIdString . '">' . $alternativeContent . '</div>', $content);
-               $width = isset($conf['width.']) ? $this->cObj->stdWrap($conf['width'], $conf['width.']) : $conf['width'];
-               if (!$width) {
-                       $width = $conf[$type . '.']['defaultWidth'];
-               }
-               $height = isset($conf['height.']) ? $this->cObj->stdWrap($conf['height'], $conf['height.']) : $conf['height'];
-               if (!$height) {
-                       $height = $conf[$type . '.']['defaultHeight'];
-               }
-               $embed = 'swfobject.embedSWF("' . $conf['player'] . '", "' . $replaceElementIdString . '", "' . $width . '", "' . $height . '",
-                               "' . $flashVersion . '", "' . $installUrl . '", ' . $conf['embedParams'] . ');';
-               $script = $flashvars . $params . $attributes . $embed;
-               $GLOBALS['TSFE']->getPageRenderer()->addJsInlineCode($replaceElementIdString, $script);
-               if (isset($conf['stdWrap.'])) {
-                       $content = $this->cObj->stdWrap($content, $conf['stdWrap.']);
-               }
-               return $content;
-       }
-
-}
-
-
-?>
\ No newline at end of file
diff --git a/typo3/sysext/frontend/Classes/ContentObject/ShockwaveFlashObjectContentObject.php b/typo3/sysext/frontend/Classes/ContentObject/ShockwaveFlashObjectContentObject.php
new file mode 100644 (file)
index 0000000..4326a02
--- /dev/null
@@ -0,0 +1,135 @@
+<?php
+namespace TYPO3\CMS\Frontend\ContentObject;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2010-2011 Xavier Perseguers <typo3@perseguers.ch>
+ *  (c) 2010-2011 Steffen Kamper <steffen@typo3.org>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project is
+ *  free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ *  This script is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+/**
+ * Contains SWFOBJECT class object.
+ *
+ * @author Xavier Perseguers <typo3@perseguers.ch>
+ * @author Steffen Kamper <steffen@typo3.org>
+ */
+class ShockwaveFlashObjectContentObject extends \TYPO3\CMS\Frontend\ContentObject\AbstractContentObject {
+
+       /**
+        * Rendering the cObject, SWFOBJECT
+        *
+        * @param array $conf Array of TypoScript properties
+        * @return string Output
+        */
+       public function render($conf = array()) {
+               $prefix = '';
+               if ($GLOBALS['TSFE']->baseUrl) {
+                       $prefix = $GLOBALS['TSFE']->baseUrl;
+               }
+               if ($GLOBALS['TSFE']->absRefPrefix) {
+                       $prefix = $GLOBALS['TSFE']->absRefPrefix;
+               }
+               $type = isset($conf['type.']) ? $this->cObj->stdWrap($conf['type'], $conf['type.']) : $conf['type'];
+               $typeConf = $conf[$type . '.'];
+               // Add SWFobject js-file
+               $GLOBALS['TSFE']->getPageRenderer()->addJsFile(TYPO3_mainDir . 'contrib/flashmedia/swfobject/swfobject.js');
+               $player = isset($typeConf['player.']) ? $this->cObj->stdWrap($typeConf['player'], $typeConf['player.']) : $typeConf['player'];
+               $installUrl = isset($conf['installUrl.']) ? $this->cObj->stdWrap($conf['installUrl'], $conf['installUrl.']) : $conf['installUrl'];
+               if (!$installUrl) {
+                       $installUrl = $prefix . TYPO3_mainDir . 'contrib/flashmedia/swfobject/expressInstall.swf';
+               }
+               $filename = isset($conf['file.']) ? $this->cObj->stdWrap($conf['file'], $conf['file.']) : $conf['file'];
+               $forcePlayer = isset($conf['forcePlayer.']) ? $this->cObj->stdWrap($conf['forcePlayer'], $conf['forcePlayer.']) : $conf['forcePlayer'];
+               if ($filename && $forcePlayer) {
+                       if (strpos($filename, '://') !== FALSE) {
+                               $conf['flashvars.']['file'] = $filename;
+                       } else {
+                               if ($prefix) {
+                                       $conf['flashvars.']['file'] = $prefix . $filename;
+                               } else {
+                                       $conf['flashvars.']['file'] = str_repeat('../', substr_count($player, '/')) . $filename;
+                               }
+                       }
+               } else {
+                       $player = $filename;
+               }
+               // Write calculated values in conf for the hook
+               $conf['player'] = $player;
+               $conf['installUrl'] = $installUrl;
+               $conf['filename'] = $filename;
+               $conf['prefix'] = $prefix;
+               // Merge with default parameters
+               $conf['flashvars.'] = array_merge((array) $typeConf['default.']['flashvars.'], (array) $conf['flashvars.']);
+               $conf['params.'] = array_merge((array) $typeConf['default.']['params.'], (array) $conf['params.']);
+               $conf['attributes.'] = array_merge((array) $typeConf['default.']['attributes.'], (array) $conf['attributes.']);
+               $conf['embedParams'] = 'flashvars, params, attributes';
+               // Hook for manipulating the conf array, it's needed for some players like flowplayer
+               if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/hooks/class.tx_cms_mediaitems.php']['swfParamTransform'])) {
+                       foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/hooks/class.tx_cms_mediaitems.php']['swfParamTransform'] as $classRef) {
+                               \TYPO3\CMS\Core\Utility\GeneralUtility::callUserFunction($classRef, $conf, $this);
+                       }
+               }
+               if (is_array($conf['flashvars.'])) {
+                       \TYPO3\CMS\Core\Utility\GeneralUtility::remapArrayKeys($conf['flashvars.'], $typeConf['mapping.']['flashvars.']);
+               }
+               $flashvars = 'var flashvars = ' . (count($conf['flashvars.']) ? json_encode($conf['flashvars.']) : '{}') . ';';
+               if (is_array($conf['params.'])) {
+                       \TYPO3\CMS\Core\Utility\GeneralUtility::remapArrayKeys($conf['params.'], $typeConf['mapping.']['params.']);
+               }
+               $params = 'var params = ' . (count($conf['params.']) ? json_encode($conf['params.']) : '{}') . ';';
+               if (is_array($conf['attributes.'])) {
+                       \TYPO3\CMS\Core\Utility\GeneralUtility::remapArrayKeys($conf['attributes.'], $typeConf['attributes.']['params.']);
+               }
+               $attributes = 'var attributes = ' . (count($conf['attributes.']) ? json_encode($conf['attributes.']) : '{}') . ';';
+               $flashVersion = isset($conf['flashVersion.']) ? $this->cObj->stdWrap($conf['flashVersion'], $conf['flashVersion.']) : $conf['flashVersion'];
+               if (!$flashVersion) {
+                       $flashVersion = '9';
+               }
+               $replaceElementIdString = uniqid('mmswf');
+               $GLOBALS['TSFE']->register['MMSWFID'] = $replaceElementIdString;
+               $alternativeContent = isset($conf['alternativeContent.']) ? $this->cObj->stdWrap($conf['alternativeContent'], $conf['alternativeContent.']) : $conf['alternativeContent'];
+               $layout = isset($conf['layout.']) ? $this->cObj->stdWrap($conf['layout'], $conf['layout.']) : $conf['layout'];
+               $content = str_replace('###ID###', $replaceElementIdString, $layout);
+               $content = str_replace('###SWFOBJECT###', '<div id="' . $replaceElementIdString . '">' . $alternativeContent . '</div>', $content);
+               $width = isset($conf['width.']) ? $this->cObj->stdWrap($conf['width'], $conf['width.']) : $conf['width'];
+               if (!$width) {
+                       $width = $conf[$type . '.']['defaultWidth'];
+               }
+               $height = isset($conf['height.']) ? $this->cObj->stdWrap($conf['height'], $conf['height.']) : $conf['height'];
+               if (!$height) {
+                       $height = $conf[$type . '.']['defaultHeight'];
+               }
+               $embed = 'swfobject.embedSWF("' . $conf['player'] . '", "' . $replaceElementIdString . '", "' . $width . '", "' . $height . '",
+                               "' . $flashVersion . '", "' . $installUrl . '", ' . $conf['embedParams'] . ');';
+               $script = $flashvars . $params . $attributes . $embed;
+               $GLOBALS['TSFE']->getPageRenderer()->addJsInlineCode($replaceElementIdString, $script);
+               if (isset($conf['stdWrap.'])) {
+                       $content = $this->cObj->stdWrap($content, $conf['stdWrap.']);
+               }
+               return $content;
+       }
+
+}
+
+
+?>
\ No newline at end of file
index e34140b..ea82495 100644 (file)
@@ -49,7 +49,7 @@ return array(
        'tslib_content_ScalableVectorGraphics' => 'TYPO3\\CMS\\Frontend\\ContentObject\\ScalableVectorGraphicsContentObject',
        'tslib_search' => 'TYPO3\\CMS\\Frontend\\ContentObject\\SearchResultContentObject',
        'tslib_content_SearchResult' => 'TYPO3\\CMS\\Frontend\\ContentObject\\SearchResultContentObject',
-       'tslib_content_ShockwaveFlashObject' => 'TYPO3\\CMS\\Frontend\\ContentObject\\ShockwaveFlashContentObject',
+       'tslib_content_ShockwaveFlashObject' => 'TYPO3\\CMS\\Frontend\\ContentObject\\ShockwaveFlashObjectContentObject',
        'tslib_controlTable' => 'TYPO3\\CMS\\Frontend\\ContentObject\\TableRenderer',
        'tslib_content_Template' => 'TYPO3\\CMS\\Frontend\\ContentObject\\TemplateContentObject',
        'tslib_content_Text' => 'TYPO3\\CMS\\Frontend\\ContentObject\\TextContentObject',
index 48a3f8b..75bd60f 100644 (file)
@@ -34,23 +34,21 @@ class ContentObjectRendererTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
        /**
         * @var \PHPUnit_Framework_MockObject_MockObject|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface|\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
         */
-       private $cObj;
+       protected $cObj = NULL;
 
        /**
         * @var \PHPUnit_Framework_MockObject_MockObject|\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
         */
-       private $tsfe;
+       protected $tsfe = NULL;
 
        /**
         * @var \PHPUnit_Framework_MockObject_MockObject|\TYPO3\CMS\Core\TypoScript\TemplateService
         */
-       private $template;
+       protected $template = NULL;
 
        /**
-        * @var array
+        * Set up
         */
-       private $typoScriptImage = array('file' => 'typo3/clear.gif');
-
        public function setUp() {
                $this->template = $this->getMock('TYPO3\\CMS\\Core\\TypoScript\\TemplateService', array('getFileName', 'linkData'));
                $this->tsfe = $this->getMock('TYPO3\\CMS\\Frontend\\Controller\\TypoScriptFrontendController', array(), array(), '', FALSE);
@@ -96,7 +94,7 @@ class ContentObjectRendererTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
                $getImgResourceHookMock->expects($this->once())->method('getImgResourcePostProcess')->will($this->returnCallback(array($this, 'isGetImgResourceHookCalledCallback')));
                $getImgResourceHookObjects = array($getImgResourceHookMock);
                $this->cObj->_setRef('getImgResourceHookObjects', $getImgResourceHookObjects);
-               $this->cObj->IMAGE($this->typoScriptImage);
+               $this->cObj->IMAGE(array('file' => 'typo3/clear.gif'));
        }
 
        /**
@@ -114,6 +112,75 @@ class ContentObjectRendererTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
                return $imageResource;
        }
 
+
+       /*************************
+        * Tests concerning getContentObject
+        ************************/
+       public function getContentObjectValidContentObjectsDataProvider() {
+               return array(
+                       array('TEXT', 'Text'),
+                       array('CASE', 'Case'),
+                       array('CLEARGIF', 'ClearGif'),
+                       array('COBJ_ARRAY', 'ContentObjectArray'),
+                       array('COA', 'ContentObjectArray'),
+                       array('COA_INT', 'ContentObjectArrayInternal'),
+                       array('USER', 'User'),
+                       array('USER_INT', 'UserInternal'),
+                       array('FILE', 'File'),
+                       array('FILES', 'Files'),
+                       array('IMAGE', 'Image'),
+                       array('IMG_RESOURCE', 'ImageResource'),
+                       array('IMGTEXT', 'ImageText'),
+                       array('CONTENT', 'Content'),
+                       array('RECORDS', 'Records'),
+                       array('HMENU', 'HierarchicalMenu'),
+                       array('CTABLE', 'ContentTable'),
+                       array('OTABLE', 'OffsetTable'),
+                       array('COLUMNS', 'Columns'),
+                       array('HRULER', 'HorizontalRuler'),
+                       array('CASEFUNC', 'Case'),
+                       array('LOAD_REGISTER', 'LoadRegister'),
+                       array('RESTORE_REGISTER', 'RestoreRegister'),
+                       array('FORM', 'Form'),
+                       array('SEARCHRESULT', 'SearchResult'),
+                       array('TEMPLATE', 'Template'),
+                       array('FLUIDTEMPLATE', 'FluidTemplate'),
+                       array('MULTIMEDIA', 'Multimedia'),
+                       array('MEDIA', 'Media'),
+                       array('SWFOBJECT', 'ShockwaveFlashObject'),
+                       array('FLOWPLAYER', 'FlowPlayer'),
+                       array('QTOBJECT', 'QuicktimeObject'),
+                       array('SVG', 'ScalableVectorGraphics'),
+                       array('EDITPANEL', 'EditPanel'),
+               );
+       }
+
+       /**
+        * @test
+        * @dataProvider getContentObjectValidContentObjectsDataProvider
+        * @param string $name TypoScript name of content object
+        * @param string $className Expected class name
+        */
+       public function getContentObjectUsesExistingInstanceOfRequestedObjectType($name, $className) {
+               $fullClassName = 'TYPO3\\CMS\\Frontend\\ContentObject\\' . $className . 'ContentObject';
+               $contentObjectInstance = $this->getMock($fullClassName, array(), array(), '', FALSE);
+               $this->cObj->_set('contentObjects', array($className => $contentObjectInstance));
+               $this->assertSame($contentObjectInstance, $this->cObj->getContentObject($name));
+       }
+
+       /**
+        * @test
+        * @dataProvider getContentObjectValidContentObjectsDataProvider
+        * @param string $name TypoScript name of content object
+        * @param string $className Expected class name
+        */
+       public function getContentObjectCallsMakeInstanceForNewContentObjectInstance($name, $className) {
+               $fullClassName = 'TYPO3\\CMS\\Frontend\\ContentObject\\' . $className . 'ContentObject';
+               $contentObjectInstance = $this->getMock($fullClassName, array(), array(), '', FALSE);
+               \TYPO3\CMS\Core\Utility\GeneralUtility::addInstance($fullClassName, $contentObjectInstance);
+               $this->assertSame($contentObjectInstance, $this->cObj->getContentObject($name));
+       }
+
        //////////////////////////
        // Tests concerning FORM
        //////////////////////////