Index: tests/t3lib/t3lib_extmgm_testcase.php =================================================================== --- tests/t3lib/t3lib_extmgm_testcase.php (Revision 7196) +++ tests/t3lib/t3lib_extmgm_testcase.php (Arbeitskopie) @@ -401,5 +401,66 @@ 'newA, newB, fieldX', $GLOBALS['TCA'][$table]['palettes']['generatedFor-fieldA']['showitem'] ); } + + + ///////////////////////////////////////// + // Tests concerning getExtensionVersion + ///////////////////////////////////////// + + /** + * Data provider for negative getExtensionVersion() tests. + * + * @return array + */ + public function getExtensionVersionFaultyDataProvider() { + return array( + array(''), + array(0), + array(new stdClass()), + array(TRUE), + ); + } + + /** + * @test + * @expectedException InvalidArgumentException + * @dataProvider getExtensionVersionFaultyDataProvider + */ + public function getExtensionVersionForFaultyExtensionKeyThrowsException($key) { + t3lib_extMgm::getExtensionVersion($key); + } + + /** + * @test + */ + public function getExtensionVersionForNotLoadedExtensionReturnsEmptyString() { + t3lib_extMgm::clearExtensionKeyMap(); + + $uniqueSuffix = uniqid('test'); + $extensionKey = 'unloadedextension' . $uniqueSuffix; + + $this->assertEquals( + '', + t3lib_extMgm::getExtensionVersion($extensionKey) + ); + } + + /** + * @test + */ + public function getExtensionVersionForLoadedExtensionReturnsExtensionVersion() { + t3lib_extMgm::clearExtensionKeyMap(); + + $uniqueSuffix = uniqid('test'); + $extensionKey = 'unloadedextension' . $uniqueSuffix; + + $GLOBALS['TYPO3_LOADED_EXT'][$extensionKey] = array( + 'siteRelPath' => 'typo3_src/tests/t3lib/fixtures/', + ); + $this->assertEquals( + '1.2.3', + t3lib_extMgm::getExtensionVersion($extensionKey) + ); + } } ?> \ No newline at end of file Index: tests/t3lib/fixtures/ext_emconf.php =================================================================== --- tests/t3lib/fixtures/ext_emconf.php (Revision 0) +++ tests/t3lib/fixtures/ext_emconf.php (Revision 0) @@ -0,0 +1,37 @@ + '', + 'description' => 'This is a fixture extension configuration file used for unit tests.', + 'category' => '', + 'shy' => 1, + 'dependencies' => '', + 'conflicts' => '', + 'priority' => '', + 'loadOrder' => '', + 'module' => '', + 'state' => 'stable', + 'internal' => 1, + 'uploadfolder' => 0, + 'createDirs' => '', + 'modify_tables' => '', + 'clearCacheOnLoad' => 0, + 'lockType' => '', + 'author' => '', + 'author_email' => '', + 'author_company' => '', + 'CGLcompliance' => '', + 'CGLcompliance_note' => '', + 'version' => '1.2.3', + '_md5_values_when_last_written' => '', + 'constraints' => array( + 'depends' => array( + ), + 'conflicts' => array( + ), + 'suggests' => array( + ), + ), + 'suggests' => array( + ), +); +?> \ No newline at end of file Index: t3lib/class.t3lib_extmgm.php =================================================================== --- t3lib/class.t3lib_extmgm.php (Revision 7196) +++ t3lib/class.t3lib_extmgm.php (Arbeitskopie) @@ -229,8 +229,27 @@ self::$extensionKeyMap = NULL; } + /** + * Retrieves the version of an installed extension. + * If the extension is not installed, this function returns an empty string. + * + * @param string $key the key of the extension to look up, must not be empty + * @return string the extension version as a string in the format "x.y.z", + * will be an empty string if the extension is not loaded + */ + public static function getExtensionVersion($key) { + if (!is_string($key) || empty($key)) { + throw new InvalidArgumentException('Extension key must be a non-empty string.'); + } + if (!self::isLoaded($key)) { + return ''; + } + $_EXTKEY = $key; + include(t3lib_extMgm::extPath($key) . 'ext_emconf.php'); + return $EM_CONF[$key]['version']; + }