[TASK] Update caching framework to latest FLOW3 version
authorSusanne Moog <typo3@susannemoog.de>
Sun, 29 May 2011 14:58:28 +0000 (16:58 +0200)
committerSusanne Moog <typo3@susannemoog.de>
Mon, 30 May 2011 20:11:20 +0000 (22:11 +0200)
Except to a database structure change of the experimental PDO backend all
changes are backwards compatible for existing extensions usages if the
current API is not misused.

Notable changes:
- A new "context" variable for backends constructors was introduced. In v4 it
  is always set to "production" in production environment and to "Testing" for
  unit tests. Other than that it is unused and was ported to keep v4 and
  FLOW3 in sync.
- File backend now uses different directories for a code and data caches.
- Files created by the file backend have a .php suffix for code caches.
- In file backend, FLOW3 removed the cacheDirectory() method. It is kept
  for v4 to enable us to have cache directories outside of the document root.
- File backend unit tests use vfs (virtual file system). This way no more
  files are created by unit tests in the file system that must be cleaned up.
- t3lib_cache_Manager has a new method injectCacheFactory(), used by
  t3lib_cache_Factory. t3lib_cache, tslib_fe and init.php reflect this change.
- t3lib_cache_Factory calls initializeObject() of frontends and backends if the
  method exists. Some __construct() calls are moved to this method.
- Some code and unit tests now use name spacing for global objects.
- t3lib_cache_Manager has new protected methods to call all configured caches
  on flushCaches() and flushCachesByTag().
- Pdo backend changed its database structure and uses a "context" field instead
  of "scope" now.
- Lots of minor variable renamings, comment changes and annotation fixes.

Change-Id: Ib1be85fbbe0cb198201fb09bbdb9f9e42c097d35
Resolves: #26263
Reviewed-on: http://review.typo3.org/1722
Reviewed-by: Björn Pedersen
Tested-by: Björn Pedersen
Reviewed-by: Susanne Moog
Tested-by: Susanne Moog
38 files changed:
t3lib/cache/backend/class.t3lib_cache_backend_abstractbackend.php
t3lib/cache/backend/class.t3lib_cache_backend_apcbackend.php
t3lib/cache/backend/class.t3lib_cache_backend_dbbackend.php
t3lib/cache/backend/class.t3lib_cache_backend_filebackend.php
t3lib/cache/backend/class.t3lib_cache_backend_memcachedbackend.php
t3lib/cache/backend/class.t3lib_cache_backend_nullbackend.php
t3lib/cache/backend/class.t3lib_cache_backend_pdobackend.php
t3lib/cache/backend/class.t3lib_cache_backend_redisbackend.php
t3lib/cache/backend/class.t3lib_cache_backend_transientmemorybackend.php
t3lib/cache/backend/interfaces/interface.t3lib_cache_backend_backend.php
t3lib/cache/backend/interfaces/interface.t3lib_cache_backend_phpcapablebackend.php
t3lib/cache/backend/resources/ddl.sql
t3lib/cache/class.t3lib_cache_factory.php
t3lib/cache/class.t3lib_cache_manager.php
t3lib/cache/frontend/class.t3lib_cache_frontend_abstractfrontend.php
t3lib/cache/frontend/class.t3lib_cache_frontend_phpfrontend.php
t3lib/cache/frontend/class.t3lib_cache_frontend_stringfrontend.php
t3lib/cache/frontend/class.t3lib_cache_frontend_variablefrontend.php
t3lib/cache/frontend/interfaces/interface.t3lib_cache_frontend_frontend.php
t3lib/cache/last_synched_revision
t3lib/class.t3lib_cache.php
tests/t3lib/cache/backend/class.t3lib_cache_backend_abstractbackendTest.php
tests/t3lib/cache/backend/class.t3lib_cache_backend_apcbackendTest.php
tests/t3lib/cache/backend/class.t3lib_cache_backend_dbbackendTest.php
tests/t3lib/cache/backend/class.t3lib_cache_backend_filebackendTest.php
tests/t3lib/cache/backend/class.t3lib_cache_backend_memcachedbackendTest.php
tests/t3lib/cache/backend/class.t3lib_cache_backend_pdobackendTest.php
tests/t3lib/cache/backend/class.t3lib_cache_backend_redisbackendTest.php
tests/t3lib/cache/backend/class.t3lib_cache_backend_transientmemorybackendTest.php
tests/t3lib/cache/class.t3lib_cache_factoryTest.php
tests/t3lib/cache/class.t3lib_cache_managerTest.php
tests/t3lib/cache/frontend/class.t3lib_cache_frontend_abstractfrontendTest.php
tests/t3lib/cache/frontend/class.t3lib_cache_frontend_phpfrontendTest.php
tests/t3lib/cache/frontend/class.t3lib_cache_frontend_stringfrontendTest.php
tests/t3lib/cache/frontend/class.t3lib_cache_frontend_variablefrontendTest.php
tests/t3lib/cache/last_synched_revision
typo3/init.php
typo3/sysext/cms/tslib/class.tslib_fe.php

index 7663835..cbd6481 100644 (file)
@@ -39,7 +39,6 @@ abstract class t3lib_cache_backend_AbstractBackend implements t3lib_cache_backen
 
        /**
         * Reference to the cache which uses this backend
-        *
         * @var t3lib_cache_frontend_Frontend
         */
        protected $cache;
@@ -50,8 +49,18 @@ abstract class t3lib_cache_backend_AbstractBackend implements t3lib_cache_backen
        protected $cacheIdentifier;
 
        /**
-        * Default lifetime of a cache entry in seconds
+        * The current application context
         *
+        * TYPO3 v4 note: This variable is currently unused in v4 context and set to
+        * "production" always by t3lib_cache. It is only kept to stay in sync with
+        * FLOW3 code.
+        *
+        * @var string
+        */
+       protected $context;
+
+       /**
+        * Default lifetime of a cache entry in seconds
         * @var integer
         */
        protected $defaultLifetime = 3600;
@@ -59,17 +68,24 @@ abstract class t3lib_cache_backend_AbstractBackend implements t3lib_cache_backen
        /**
         * Constructs this backend
         *
+        * @param string $context FLOW3's application context
         * @param array $options Configuration options - depends on the actual backend
+        * @throws \InvalidArgumentException
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
-       public function __construct(array $options = array()) {
+       public function __construct($context, array $options = array()) {
+               $this->context = $context;
                if (is_array($options) || $options instanceof ArrayAccess) {
                        foreach ($options as $optionKey => $optionValue) {
                                $methodName = 'set' . ucfirst($optionKey);
                                if (method_exists($this, $methodName)) {
                                        $this->$methodName($optionValue);
                                } else {
-                                       throw new InvalidArgumentException('Invalid cache backend option "' . $optionKey . '" for backend of type "' . get_class($this) . '"', 1235837747);
+                                       throw new \InvalidArgumentException(
+                                               'Invalid cache backend option "' . $optionKey . '" for backend of type "' . get_class($this) . '"',
+                                               1231267498
+                                       );
                                }
                        }
                }
@@ -78,9 +94,10 @@ abstract class t3lib_cache_backend_AbstractBackend implements t3lib_cache_backen
        /**
         * Sets a reference to the cache frontend which uses this backend
         *
-        * @param t3lib_cache_frontend_Frontend The frontend for this backend
+        * @param t3lib_cache_frontend_Frontend $cache The frontend for this backend
         * @return void
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function setCache(t3lib_cache_frontend_Frontend $cache) {
                $this->cache = $cache;
@@ -93,10 +110,11 @@ abstract class t3lib_cache_backend_AbstractBackend implements t3lib_cache_backen
         * @param integer $defaultLifetime Default lifetime of this cache backend in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
         * @return void
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function setDefaultLifetime($defaultLifetime) {
                if (!is_int($defaultLifetime) || $defaultLifetime < 0) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The default lifetime must be given as a positive integer.',
                                1233072774
                        );
@@ -112,16 +130,15 @@ abstract class t3lib_cache_backend_AbstractBackend implements t3lib_cache_backen
         * @param integer $lifetime The lifetime in seconds
         * @return \DateTime The expiry time
         * @author Robert Lemke <robert@typo3.org>
-        * @internal
         */
        protected function calculateExpiryTime($lifetime = NULL) {
                if ($lifetime === self::UNLIMITED_LIFETIME || ($lifetime === NULL && $this->defaultLifetime === self::UNLIMITED_LIFETIME)) {
-                       $expiryTime = new DateTime(self::DATETIME_EXPIRYTIME_UNLIMITED, new DateTimeZone('UTC'));
+                       $expiryTime = new \DateTime(self::DATETIME_EXPIRYTIME_UNLIMITED, new \DateTimeZone('UTC'));
                } else {
                        if ($lifetime === NULL) {
                                $lifetime = $this->defaultLifetime;
                        }
-                       $expiryTime = new DateTime('now +' . $lifetime . ' seconds', new DateTimeZone('UTC'));
+                       $expiryTime = new \DateTime('now +' . $lifetime . ' seconds', new \DateTimeZone('UTC'));
                }
 
                return $expiryTime;
index 705f8d8..aeb2fb2 100644 (file)
  * @package TYPO3
  * @subpackage t3lib_cache
  * @api
+ * @scope prototype
  */
 class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend {
 
        /**
         * A prefix to seperate stored data from other data possible stored in the APC
-        *
         * @var string
         */
        protected $identifierPrefix;
@@ -61,11 +61,12 @@ class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend
        /**
         * Constructs this backend
         *
+        * @param string $context FLOW3's application context
         * @param array $options Configuration options - unused here
         * @author Robert Lemke <robert@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
         */
-       public function __construct(array $options = array()) {
+       public function __construct($context, array $options = array()) {
                if (!extension_loaded('apc')) {
                        throw new t3lib_cache_Exception(
                                'The PHP extension "apc" must be installed and loaded in order to use the APC backend.',
@@ -73,20 +74,20 @@ class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend
                        );
                }
 
-               parent::__construct($options);
+               parent::__construct($context, $options);
        }
 
        /**
         * Initializes the identifier prefix when setting the cache.
         *
-        * @param t3lib_cache_frontend_Frontend $cache The frontend for this backend
+        * @param t3lib_cache_frontend_Frontend $cache
         * @return void
         * @author Robert Lemke <robert@typo3.org>
         */
        public function setCache(t3lib_cache_frontend_Frontend $cache) {
                parent::setCache($cache);
                $processUser = extension_loaded('posix') ? posix_getpwuid(posix_geteuid()) : array('name' => 'default');
-               $pathHash = t3lib_div::shortMD5(PATH_site . $processUser['name'], 12);
+               $pathHash = t3lib_div::shortMD5(PATH_site . $processUser['name'] . $this->context, 12);
                $this->identifierPrefix = 'TYPO3_' . $pathHash;
        }
 
@@ -99,10 +100,11 @@ class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend
         * @param integer $lifetime Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
         * @return void
         * @throws t3lib_cache_Exception if no cache frontend has been set.
-        * @throws InvalidArgumentException if the identifier is not valid
+        * @throws \InvalidArgumentException if the identifier is not valid
         * @throws t3lib_cache_exception_InvalidData if $data is not a string
         * @author Christian Jul Jensen <julle@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function set($entryIdentifier, $data, array $tags = array(), $lifetime = NULL) {
                if (!$this->cache instanceof t3lib_cache_frontend_Frontend) {
@@ -140,6 +142,7 @@ class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend
         * @param string $entryIdentifier An identifier which describes the cache entry to load
         * @return mixed The cache entry's content as a string or FALSE if the cache entry could not be loaded
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function get($entryIdentifier) {
                $success = FALSE;
@@ -154,6 +157,7 @@ class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend
         * @param string $entryIdentifier An identifier specifying the cache entry
         * @return boolean TRUE if such an entry exists, FALSE if not
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function has($entryIdentifier) {
                $success = FALSE;
@@ -170,10 +174,10 @@ class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend
         * @return boolean TRUE if (at least) an entry could be removed or FALSE if no entry was found
         * @author Christian Jul Jensen <julle@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function remove($entryIdentifier) {
                $this->removeIdentifierFromAllTags($entryIdentifier);
-
                return apc_delete($this->identifierPrefix . $entryIdentifier);
        }
 
@@ -184,11 +188,11 @@ class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend
         * @param string $tag The tag to search for
         * @return array An array with identifiers of all matching entries. An empty array if no entries matched
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function findIdentifiersByTag($tag) {
                $success = FALSE;
                $identifiers = apc_fetch($this->identifierPrefix . 'tag_' . $tag, $success);
-
                if ($success === FALSE) {
                        return array();
                } else {
@@ -229,13 +233,13 @@ class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend
         *
         * @param string $identifier Identifier to find tags by
         * @return array Array with tags
+        * @author Dmitry Dulepov
         * @author Karsten Dambekalns <karsten@typo3.org>
         */
        protected function findTagsByIdentifier($identifier) {
                $success = FALSE;
                $tags = apc_fetch($this->identifierPrefix . 'ident_' . $identifier, $success);
-
-               return ($success ? (array) $tags : array());
+               return ($success ? (array)$tags : array());
        }
 
        /**
@@ -243,6 +247,7 @@ class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend
         *
         * @return void
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function flush() {
                if (!$this->cache instanceof t3lib_cache_frontend_Frontend) {
@@ -256,16 +261,15 @@ class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend
        }
 
        /**
-        * Removes all cache entries of this cache which are tagged by the specified
-        * tag.
+        * Removes all cache entries of this cache which are tagged by the specified tag.
         *
         * @param string $tag The tag the entries must have
         * @return void
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function flushByTag($tag) {
                $identifiers = $this->findIdentifiersByTag($tag);
-
                foreach ($identifiers as $identifier) {
                        $this->remove($identifier);
                }
@@ -274,7 +278,7 @@ class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend
        /**
         * Removes all cache entries of this cache which are tagged by the specified tag.
         *
-        * @param array The tags the entries must have
+        * @param array $tags The tags the entries must have
         * @return void
         * @author Ingo Renner <ingo@typo3.org>
         */
@@ -316,7 +320,7 @@ class t3lib_cache_backend_ApcBackend extends t3lib_cache_backend_AbstractBackend
         * @param string $entryIdentifier
         * @param array $tags
         * @author Karsten Dambekalns <karsten@typo3.org>
-        * @author Dmitry Dulepov <dmitry.@typo3.org>
+        * @author Dmitry Dulepov <dmitry@typo3.org>
         */
        protected function removeIdentifierFromAllTags($entryIdentifier) {
                        // Get tags for this identifier
index 3b55268..a0337ca 100644 (file)
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
  * A caching backend which stores cache entries in database tables
  *
  * @package TYPO3
  * @subpackage t3lib_cache
  * @api
+ * @scope prototype
  */
 class t3lib_cache_backend_DbBackend extends t3lib_cache_backend_AbstractBackend {
 
@@ -55,10 +55,11 @@ class t3lib_cache_backend_DbBackend extends t3lib_cache_backend_AbstractBackend
        /**
         * Constructs this backend
         *
+        * @param string $context FLOW3's application context
         * @param array $options Configuration options - depends on the actual backend
         */
-       public function __construct(array $options = array()) {
-               parent::__construct($options);
+       public function __construct($context, array $options = array()) {
+               parent::__construct($context, $options);
 
                if (!$this->cacheTable) {
                        throw new t3lib_cache_Exception(
index b0cbdce..f0a5608 100644 (file)
@@ -22,7 +22,6 @@
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
  * A caching backend which stores cache entries in files
  *
@@ -31,6 +30,7 @@
  * @package TYPO3
  * @subpackage t3lib_cache
  * @api
+ * @scope prototype
  */
 class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBackend implements t3lib_cache_backend_PhpCapableBackend {
 
@@ -42,52 +42,64 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
        const DATASIZE_DIGITS = 10;
 
        /**
-        * @var string Directory where the files are stored
+        * Directory where the files are stored
+        *
+        * @var string
         */
        protected $cacheDirectory = '';
 
        /**
-        * @var string Absolute path to root, usually document root of website
-        */
-       protected $root = '/';
-
-       /**
-        * Maximum allowed file path length in the current environment.
+        * TYPO3 v4 note: This variable is only available in v5
+        * Temporary path to cache directory before setCache() was called. It is
+        * set by setCacheDirectory() and used in setCache() method which calls
+        * the directory creation if needed. The variable is not used afterwards,
+        * the final cache directory path is stored in $this->cacheDirectory then.
         *
-        * @var integer
+        * @var string Temporary path to cache directory
         */
-       protected $maximumPathLength = NULL;
+       protected $temporaryCacheDirectory = '';
 
        /**
-        * Constructs this backend
+        * A file extension to use for each cache entry.
         *
-        * @param array $options Configuration options - depends on the actual backend
+        * @var string
         */
-       public function __construct(array $options = array()) {
-               parent::__construct($options);
+       protected $cacheEntryFileExtension = '';
 
-               if (is_null($this->maximumPathLength)) {
-                       $this->maximumPathLength = t3lib_div::getMaximumPathLength();
-               }
-       }
 
        /**
         * Sets a reference to the cache frontend which uses this backend and
-        * initializes the default cache directory
+        * initializes the default cache directory.
         *
-        * @void
+        * TYPO3 v4 note: This method is different between TYPO3 v4 and FLOW3
+        * because the Environment class to get the path to a temporary directory
+        * does not exist in v4.
+        *
+        * @param t3lib_cache_frontend_Frontend $cache The cache frontend
+        * @return void
         * @author Robert Lemke <robert@typo3.org>
         */
        public function setCache(t3lib_cache_frontend_Frontend $cache) {
                parent::setCache($cache);
 
-               if (empty($this->cacheDirectory)) {
-                       $cacheDirectory = 'typo3temp/cache/';
-                       try {
-                               $this->setCacheDirectory($cacheDirectory);
-                       } catch (t3lib_cache_Exception $exception) {
-                       }
+               if (empty($this->temporaryCacheDirectory)) {
+                               // If no cache directory was given with cacheDirectory
+                               // configuration option, set it to a path below typo3temp/
+                       $temporaryCacheDirectory = PATH_site . 'typo3temp/';
+               } else {
+                       $temporaryCacheDirectory = $this->temporaryCacheDirectory;
+               }
+
+               $codeOrData = ($cache instanceof t3lib_cache_frontend_PhpFrontend) ? 'Code' : 'Data';
+               $finalCacheDirectory = $temporaryCacheDirectory . 'Cache/' . $codeOrData . '/' . $this->cacheIdentifier . '/';
+
+               if (!is_dir($finalCacheDirectory)) {
+                       $this->createFinalCacheDirectory($finalCacheDirectory);
                }
+               unset($this->temporaryCacheDirectory);
+               $this->cacheDirectory = $finalCacheDirectory;
+
+               $this->cacheEntryFileExtension = ($cache instanceof t3lib_cache_frontend_PhpFrontend) ? '.php' : '';
        }
 
        /**
@@ -95,13 +107,28 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         * assumed that the directory is below the TYPO3_DOCUMENT_ROOT. However, an
         * absolute path can be selected, too.
         *
-        * @param string The directory. If a relative path is given, it's assumed it's in TYPO3_DOCUMENT_ROOT. If an absolute path is given it is taken as is.
+        * This method does not exist in FLOW3 anymore, but it is needed in
+        * TYPO3 v4 to enable a cache path outside of document root. The final
+        * cache path is checked and created in createFinalCachDirectory(),
+        * called by setCache() method, which is done _after_ the cacheDirectory
+        * option was handled.
+        *
+        * @param string $cacheDirectory The cache base directory. If a relative path
+        *              is given, it is assumed it is in TYPO3_DOCUMENT_ROOT. If an absolute
+        *              path is given it is taken as is.
         * @return void
-        * @throws t3lib_cache_Exception if the directory does not exist, is not writable or could not be created.
-        * @author Robert Lemke <robert@typo3.org>
-        * @author Ingo Renner <ingo@typo3.org>
+        * @throws t3lib_cache_Exception if the directory is not within allowed
+        *              open_basedir path.
+        * @author Christian Kuhn <lolli@schwarzbu.ch>
         */
        public function setCacheDirectory($cacheDirectory) {
+                       // Skip handling if directory is a stream ressource
+                       // This is used by unit tests with vfs:// directoryies
+               if (strpos($cacheDirectory, '://')) {
+                       $this->temporaryCacheDirectory = $cacheDirectory;
+                       return;
+               }
+
                $documentRoot = PATH_site;
 
                if (($open_basedir = ini_get('open_basedir'))) {
@@ -156,32 +183,34 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
                if ($cacheDirectory[strlen($cacheDirectory) - 1] !== '/') {
                        $cacheDirectory .= '/';
                }
-               $cacheDirectory .= $this->cacheIdentifier;
-               if ($cacheDirectory[strlen($cacheDirectory) - 1] !== '/') {
-                       $cacheDirectory .= '/';
-               }
 
-               if (!is_writable($documentRoot . $cacheDirectory)) {
-                       t3lib_div::mkdir_deep(
-                               $documentRoot,
-                               $cacheDirectory
-                       );
-               }
-               if (!is_dir($documentRoot . $cacheDirectory)) {
-                       throw new t3lib_cache_Exception(
-                               'The directory "' . $documentRoot . $cacheDirectory . '" does not exist.',
-                               1203965199
+               $this->temporaryCacheDirectory = $documentRoot . $cacheDirectory . $this->cacheIdentifier . '/';
+       }
+
+       /**
+        * Create the final cache directory if it does not exist. This method
+        * exists in TYPO3 v4 only.
+        *
+        * @param string $finalCacheDirectory Absolute path to final cache directory
+        * @return void
+        * @throws \t3lib_cache_Exception If directory is not writable after creation
+        */
+       protected function createFinalCacheDirectory($finalCacheDirectory) {
+               try {
+                       t3lib_div::mkdir_deep($finalCacheDirectory);
+               } catch (\RuntimeException $e) {
+                       throw new \t3lib_cache_Exception(
+                               'The directory "' . $finalCacheDirectory . '" can not be created.',
+                               1303669848,
+                               $e
                        );
                }
-               if (!is_writable($documentRoot . $cacheDirectory)) {
-                       throw new t3lib_cache_Exception(
-                               'The directory "' . $documentRoot . $cacheDirectory . '" is not writable.',
+               if (!is_writable($finalCacheDirectory)) {
+                       throw new \t3lib_cache_Exception(
+                               'The directory "' . $finalCacheDirectory . '" is not writable.',
                                1203965200
                        );
                }
-
-               $this->root = $documentRoot;
-               $this->cacheDirectory = $cacheDirectory;
        }
 
        /**
@@ -192,7 +221,7 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         * @api
         */
        public function getCacheDirectory() {
-               return $this->root . $this->cacheDirectory;
+               return $this->cacheDirectory;
        }
 
        /**
@@ -209,13 +238,6 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         * @api
         */
        public function set($entryIdentifier, $data, array $tags = array(), $lifetime = NULL) {
-               if (!$this->cache instanceof t3lib_cache_frontend_Frontend) {
-                       throw new t3lib_cache_Exception(
-                               'No cache frontend has been set yet via setCache().',
-                               1204111375
-                       );
-               }
-
                if (!is_string($data)) {
                        throw new t3lib_cache_Exception_InvalidData(
                                'The specified data is of type "' . gettype($data) . '" but a string is expected.',
@@ -224,20 +246,27 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
                }
 
                if ($entryIdentifier !== basename($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified entry identifier must not contain a path segment.',
                                1282073032
                        );
                }
 
+               if ($entryIdentifier === '') {
+                       throw new \InvalidArgumentException(
+                               'The specified entry identifier must not be empty.',
+                               1298114280
+                       );
+               }
+
                $this->remove($entryIdentifier);
 
-               $temporaryCacheEntryPathAndFilename = $this->root . $this->cacheDirectory . uniqid() . '.temp';
-               if (strlen($temporaryCacheEntryPathAndFilename) > $this->maximumPathLength) {
+               $temporaryCacheEntryPathAndFilename = $this->cacheDirectory . uniqid() . '.temp';
+               if (strlen($temporaryCacheEntryPathAndFilename) > t3lib_div::getMaximumPathLength()) {
                        throw new t3lib_cache_Exception(
                                'The length of the temporary cache file path "' . $temporaryCacheEntryPathAndFilename .
                                '" is ' . strlen($temporaryCacheEntryPathAndFilename) . ' characters long and exceeds the maximum path length of ' .
-                               $this->maximumPathLength . '. Please consider setting the temporaryDirectoryBase option to a shorter path. ',
+                               t3lib_div::getMaximumPathLength() . '. Please consider setting the temporaryDirectoryBase option to a shorter path. ',
                                1248710426
                        );
                }
@@ -254,7 +283,7 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
                }
 
                $i = 0;
-               $cacheEntryPathAndFilename = $this->root . $this->cacheDirectory . $entryIdentifier;
+               $cacheEntryPathAndFilename = $this->cacheDirectory . $entryIdentifier . $this->cacheEntryFileExtension;
                        // @TODO: Figure out why the heck this is done and maybe find a smarter solution, report to FLOW3
                while (!rename($temporaryCacheEntryPathAndFilename, $cacheEntryPathAndFilename) && $i < 5) {
                        $i++;
@@ -274,19 +303,20 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         *
         * @param string $entryIdentifier An identifier which describes the cache entry to load
         * @return mixed The cache entry's content as a string or FALSE if the cache entry could not be loaded
+        * @throws \InvalidArgumentException If identifier is invalid
         * @author Robert Lemke <robert@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
         * @api
         */
        public function get($entryIdentifier) {
                if ($entryIdentifier !== basename($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified entry identifier must not contain a path segment.',
                                1282073033
                        );
                }
 
-               $pathAndFilename = $this->root . $this->cacheDirectory . $entryIdentifier;
+               $pathAndFilename = $this->cacheDirectory . $entryIdentifier . $this->cacheEntryFileExtension;
                if ($this->isCacheFileExpired($pathAndFilename)) {
                        return FALSE;
                }
@@ -297,20 +327,20 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
        /**
         * Checks if a cache entry with the specified identifier exists.
         *
-        * @param string $entryIdentifier Specifies the cache entry to remove
-        * @return boolean TRUE if (at least) an entry could be removed or FALSE if no entry was found
+        * @param string $entryIdentifier
+        * @return boolean TRUE if such an entry exists, FALSE if not
         * @author Robert Lemke <robert@typo3.org>
         * @api
         */
        public function has($entryIdentifier) {
                if ($entryIdentifier !== basename($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified entry identifier must not contain a path segment.',
                                1282073034
                        );
                }
 
-               return !$this->isCacheFileExpired($this->root . $this->cacheDirectory . $entryIdentifier);
+               return !$this->isCacheFileExpired($this->cacheDirectory . $entryIdentifier . $this->cacheEntryFileExtension);
        }
 
        /**
@@ -324,14 +354,20 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         */
        public function remove($entryIdentifier) {
                if ($entryIdentifier !== basename($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified entry identifier must not contain a path segment.',
                                1282073035
                        );
                }
+               if ($entryIdentifier === '') {
+                       throw new \InvalidArgumentException(
+                               'The specified entry identifier must not be empty.',
+                               1298114279
+                       );
+               }
 
-               $pathAndFilename = $this->root . $this->cacheDirectory . $entryIdentifier;
-               if (!file_exists($pathAndFilename)) {
+               $pathAndFilename = $this->cacheDirectory . $entryIdentifier . $this->cacheEntryFileExtension;
+               if (file_exists($pathAndFilename) === FALSE) {
                        return FALSE;
                }
                if (unlink($pathAndFilename) === FALSE) {
@@ -347,13 +383,13 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         * @param string $searchedTag The tag to search for
         * @return array An array with identifiers of all matching entries. An empty array if no entries matched
         * @author Robert Lemke <robert@typo3.org>
-        * @author Karsten Dambekalns <karsten@typo3.org>
         * @api
         */
        public function findIdentifiersByTag($searchedTag) {
                $entryIdentifiers = array();
                $now = $GLOBALS['EXEC_TIME'];
-               for ($directoryIterator = t3lib_div::makeInstance('DirectoryIterator', $this->root . $this->cacheDirectory); $directoryIterator->valid(); $directoryIterator->next()) {
+               $cacheEntryFileExtensionLength = strlen($this->cacheEntryFileExtension);
+               for ($directoryIterator = t3lib_div::makeInstance('DirectoryIterator', $this->cacheDirectory); $directoryIterator->valid(); $directoryIterator->next()) {
                        if ($directoryIterator->isDot()) {
                                continue;
                        }
@@ -366,7 +402,11 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
                                continue;
                        }
                        if (in_array($searchedTag, explode(' ', substr($metaData, self::EXPIRYTIME_LENGTH, -self::DATASIZE_DIGITS)))) {
-                               $entryIdentifiers[] = $directoryIterator->getFilename();
+                               if ($cacheEntryFileExtensionLength > 0) {
+                                       $entryIdentifiers[] = substr($directoryIterator->getFilename(), 0, - $cacheEntryFileExtensionLength);
+                               } else {
+                                       $entryIdentifiers[] = $directoryIterator->getFilename();
+                               }
                        }
                }
                return $entryIdentifiers;
@@ -384,7 +424,9 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         */
        public function findIdentifiersByTags(array $searchedTags) {
                $entryIdentifiers = array();
-               for ($directoryIterator = t3lib_div::makeInstance('DirectoryIterator', $this->root . $this->cacheDirectory); $directoryIterator->valid(); $directoryIterator->next()) {
+               $now = $GLOBALS['EXEC_TIME'];
+               $cacheEntryFileExtensionLength = strlen($this->cacheEntryFileExtension);
+               for ($directoryIterator = t3lib_div::makeInstance('DirectoryIterator', $this->cacheDirectory); $directoryIterator->valid(); $directoryIterator->next()) {
                        if ($directoryIterator->isDot()) {
                                continue;
                        }
@@ -393,11 +435,15 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
                        $metaData = file_get_contents($cacheEntryPathAndFilename, NULL, NULL, $index);
 
                        $expiryTime = (integer) substr($metaData, 0, self::EXPIRYTIME_LENGTH);
-                       if ($expiryTime !== 0 && $expiryTime < $GLOBALS['EXEC_TIME']) {
+                       if ($expiryTime !== 0 && $expiryTime < $now) {
                                continue;
                        }
                        if (in_array($searchedTags, explode(' ', substr($metaData, self::EXPIRYTIME_LENGTH, -self::DATASIZE_DIGITS)))) {
-                               $entryIdentifiers[] = $directoryIterator->getFilename();
+                               if ($cacheEntryFileExtensionLength > 0) {
+                                       $entryIdentifiers[] = substr($directoryIterator->getFilename(), 0, - $cacheEntryFileExtensionLength);
+                               } else {
+                                       $entryIdentifiers[] = $directoryIterator->getFilename();
+                               }
                        }
                }
                return $entryIdentifiers;
@@ -412,7 +458,7 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         * @api
         */
        public function flush() {
-               t3lib_div::rmdir($this->root . $this->cacheDirectory, TRUE);
+               t3lib_div::rmdir($this->cacheDirectory, TRUE);
        }
 
        /**
@@ -420,6 +466,7 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         *
         * @param string $tag The tag the entries must have
         * @return void
+        * @author Robert Lemke <robert@typo3.org>
         * @author Ingo Renner <ingo@typo3.org>
         * @api
         */
@@ -455,9 +502,10 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         * @param string $cacheEntryPathAndFilename
         * @return boolean
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        protected function isCacheFileExpired($cacheEntryPathAndFilename) {
-               if (!file_exists($cacheEntryPathAndFilename)) {
+               if (file_exists($cacheEntryPathAndFilename) === FALSE) {
                        return TRUE;
                }
                $index = (integer) file_get_contents($cacheEntryPathAndFilename, NULL, NULL, filesize($cacheEntryPathAndFilename) - self::DATASIZE_DIGITS, self::DATASIZE_DIGITS);
@@ -473,20 +521,17 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         * @api
         */
        public function collectGarbage() {
-               if (!$this->cache instanceof t3lib_cache_frontend_Frontend) {
-                       throw new t3lib_cache_Exception(
-                               'Yet no cache frontend has been set via setCache().',
-                               1222686150
-                       );
-               }
-
-               $pattern = $this->root . $this->cacheDirectory . '*';
-               $filesFound = glob($pattern);
+               for ($directoryIterator = new \DirectoryIterator($this->cacheDirectory); $directoryIterator->valid(); $directoryIterator->next()) {
+                       if ($directoryIterator->isDot()) {
+                               continue;
+                       }
 
-               if (is_array($filesFound)) {
-                       foreach ($filesFound as $cacheFilename) {
-                               if ($this->isCacheFileExpired($cacheFilename)) {
-                                       $this->remove(basename($cacheFilename));
+                       if ($this->isCacheFileExpired($directoryIterator->getPathname())) {
+                               $cacheEntryFileExtensionLength = strlen($this->cacheEntryFileExtension);
+                               if ($cacheEntryFileExtensionLength > 0) {
+                                       $this->remove(substr($directoryIterator->getFilename(), 0, - $cacheEntryFileExtensionLength));
+                               } else {
+                                       $this->remove($directoryIterator->getFilename());
                                }
                        }
                }
@@ -500,18 +545,10 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         * @param string $entryIdentifier The cache entry identifier
         * @return mixed The file names (including path) as an array if one or more entries could be found, otherwise FALSE
         * @author Robert Lemke <robert@typo3.org>
-        * @throws t3lib_cache_Exception if no frontend has been set
         * @internal
         */
        protected function findCacheFilesByIdentifier($entryIdentifier) {
-               if (!$this->cache instanceof t3lib_cache_frontend_Frontend) {
-                       throw new t3lib_cache_Exception(
-                               'Yet no cache frontend has been set via setCache().',
-                               1204111376
-                       );
-               }
-
-               $pattern = $this->root . $this->cacheDirectory . $entryIdentifier;
+               $pattern = $this->cacheDirectory . $entryIdentifier;
                $filesFound = glob($pattern);
                if ($filesFound === FALSE || count($filesFound) === 0) {
                        return FALSE;
@@ -529,13 +566,13 @@ class t3lib_cache_backend_FileBackend extends t3lib_cache_backend_AbstractBacken
         */
        public function requireOnce($entryIdentifier) {
                if ($entryIdentifier !== basename($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified entry identifier must not contain a path segment.',
                                1282073036
                        );
                }
 
-               $pathAndFilename = $this->root . $this->cacheDirectory . $entryIdentifier;
+               $pathAndFilename = $this->cacheDirectory . $entryIdentifier . $this->cacheEntryFileExtension;
                return ($this->isCacheFileExpired($pathAndFilename)) ? FALSE : require_once($pathAndFilename);
        }
 }
index a7bf418..d323753 100644 (file)
@@ -22,7 +22,6 @@
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
  * A caching backend which stores cache entries by using Memcached.
  *
@@ -51,6 +50,7 @@
  * @package TYPO3
  * @subpackage t3lib_cache
  * @api
+ * @scope prototype
  */
 class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractBackend {
 
@@ -63,7 +63,7 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
        /**
         * Instance of the PHP Memcache class
         *
-        * @var Memcache
+        * @var \Memcache
         */
        protected $memcache;
 
@@ -83,29 +83,21 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
        protected $flags;
 
        /**
-        * A prefix to seperate stored data from other data possibly stored in the
-        * memcache. This prefix must be unique for each site in the tree. Default
-        * implementation uses MD5 of the current site path to make identifier prefix
-        * unique.
+        * A prefix to seperate stored data from other data possibly stored in the memcache
         *
-        * @var string
+        * @var string
         */
        protected $identifierPrefix;
 
        /**
-        * Indicates whther the server is connected
-        *
-        * @var boolean
-        */
-       protected $serverConnected = FALSE;
-
-       /**
         * Constructs this backend
         *
+        * @param string $context FLOW3's application context
         * @param array $options Configuration options - depends on the actual backend
+        * @throws t3lib_cache_Exception if memcache is not installed
         * @author Robert Lemke <robert@typo3.org>
         */
-       public function __construct(array $options = array()) {
+       public function __construct($context, array $options = array()) {
                if (!extension_loaded('memcache')) {
                        throw new t3lib_cache_Exception(
                                'The PHP extension "memcache" must be installed and loaded in ' .
@@ -114,54 +106,17 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
                        );
                }
 
-               parent::__construct($options);
-
-               $this->memcache = new Memcache();
-               $defaultPort = ini_get('memcache.default_port');
-
-               if (!count($this->servers)) {
-                       throw new t3lib_cache_Exception(
-                               'No servers were given to Memcache',
-                               1213115903
-                       );
-               }
-
-               foreach ($this->servers as $serverConfiguration) {
-                       if (substr($serverConfiguration, 0, 7) == 'unix://') {
-                               $host = $serverConfiguration;
-                               $port = 0;
-                       } else {
-                               if (substr($serverConfiguration, 0, 6) === 'tcp://') {
-                                       $serverConfiguration = substr($serverConfiguration, 6);
-                               }
-                               if (strstr($serverConfiguration, ':') !== FALSE) {
-                                       list($host, $port) = explode(':', $serverConfiguration, 2);
-                               } else {
-                                       $host = $serverConfiguration;
-                                       $port = $defaultPort;
-                               }
-                       }
-
-                       if ($this->serverConnected) {
-                               $this->memcache->addserver($host, $port);
-                       } else {
-                                       // pconnect throws PHP warnings when it cannot connect!
-                               $this->serverConnected = @$this->memcache->pconnect($host, $port);
-                       }
-               }
-
-               if (!$this->serverConnected) {
-                       t3lib_div::sysLog('Unable to connect to any Memcached server', 'core', 3);
-               }
+               parent::__construct($context, $options);
        }
 
        /**
         * Setter for servers to be used. Expects an array,  the values are expected
         * to be formatted like "<host>[:<port>]" or "unix://<path>"
         *
-        * @param       array   An array of servers to add.
-        * @return      void
+        * @param array $servers An array of servers to add.
+        * @return void
         * @author Christian Jul Jensen <julle@typo3.org>
+        * @api
         */
        protected function setServers(array $servers) {
                $this->servers = $servers;
@@ -173,6 +128,7 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
         * @param boolean $useCompression
         * @return void
         * @author Christian Jul Jensen <julle@typo3.org>
+        * @api
         */
        protected function setCompression($useCompression) {
                if ($useCompression === TRUE) {
@@ -183,12 +139,50 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
        }
 
        /**
+        * Initializes the identifier prefix
+        *
+        * @return void
+        * @throws t3lib_cache_Exception
+        * @author Karsten Dambekalns <karsten@typo3.org>
+        * @author Dmitry Dulepov <dmitry@typo3.org>
+        */
+       public function initializeObject() {
+               if (!count($this->servers)) {
+                       throw new t3lib_cache_Exception(
+                               'No servers were given to Memcache',
+                               1213115903
+                       );
+               }
+
+               $this->memcache = new \Memcache();
+               $defaultPort = ini_get('memcache.default_port');
+
+               foreach ($this->servers as $server) {
+                       if (substr($server, 0, 7) == 'unix://') {
+                               $host = $server;
+                               $port = 0;
+                       } else {
+                               if (substr($server, 0, 6) === 'tcp://') {
+                                       $server = substr($server, 6);
+                               }
+                               if (strstr($server, ':') !== FALSE) {
+                                       list($host, $port) = explode(':', $server, 2);
+                               } else {
+                                       $host = $server;
+                                       $port = $defaultPort;
+                               }
+                       }
+
+                       $this->memcache->addserver($host, $port);
+               }
+       }
+
+       /**
         * Initializes the identifier prefix when setting the cache.
         *
         * @param t3lib_cache_frontend_Frontend $cache The frontend for this backend
         * @return void
         * @author Robert Lemke <robert@typo3.org>
-        * @author Dmitry Dulepov
         */
        public function setCache(t3lib_cache_frontend_Frontend $cache) {
                parent::setCache($cache);
@@ -198,22 +192,23 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
        /**
         * Saves data in the cache.
         *
-        * @param string An identifier for this specific cache entry
-        * @param string The data to be stored
-        * @param array Tags to associate with this cache entry
-        * @param integer Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
+        * @param string $entryIdentifier An identifier for this specific cache entry
+        * @param string $data The data to be stored
+        * @param array $tags Tags to associate with this cache entry
+        * @param integer $lifetime Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
         * @return void
         * @throws t3lib_cache_Exception if no cache frontend has been set.
-        * @throws InvalidArgumentException if the identifier is not valid or the final memcached key is longer than 250 characters
+        * @throws \InvalidArgumentException if the identifier is not valid or the final memcached key is longer than 250 characters
         * @throws t3lib_cache_exception_InvalidData if $data is not a string
         * @author Christian Jul Jensen <julle@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function set($entryIdentifier, $data, array $tags = array(), $lifetime = NULL) {
                if (strlen($this->identifierPrefix . $entryIdentifier) > 250) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'Could not set value. Key more than 250 characters (' . $this->identifierPrefix . $entryIdentifier . ').',
-                               1235839340
+                               1232969508
                        );
                }
 
@@ -234,7 +229,6 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
 
                $tags[] = '%MEMCACHEBE%' . $this->cacheIdentifier;
                $expiration = $lifetime !== NULL ? $lifetime : $this->defaultLifetime;
-
                        // Memcached consideres values over 2592000 sec (30 days) as UNIX timestamp
                        // thus $expiration should be converted from lifetime to UNIX timestamp
                if ($expiration > 2592000) {
@@ -292,36 +286,35 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
        /**
         * Loads data from the cache.
         *
-        * @param string An identifier which describes the cache entry to load
+        * @param string $entryIdentifier An identifier which describes the cache entry to load
         * @return mixed The cache entry's content as a string or FALSE if the cache entry could not be loaded
         * @author Christian Jul Jensen <julle@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function get($entryIdentifier) {
                $value = $this->memcache->get($this->identifierPrefix . $entryIdentifier);
-
                if (substr($value, 0, 14) === 'TYPO3*chunked:') {
                        list(, $chunkCount) = explode(':', $value);
                        $value = '';
-
                        for ($chunkNumber = 1; $chunkNumber < $chunkCount; $chunkNumber++) {
                                $value .= $this->memcache->get($this->identifierPrefix . $entryIdentifier . '_chunk_' . $chunkNumber);
                        }
                }
-
                return $value;
        }
 
        /**
         * Checks if a cache entry with the specified identifier exists.
         *
-        * @param string An identifier specifying the cache entry
+        * @param string $entryIdentifier An identifier specifying the cache entry
         * @return boolean TRUE if such an entry exists, FALSE if not
         * @author Christian Jul Jensen <julle@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function has($entryIdentifier) {
-               return $this->serverConnected && $this->memcache->get($this->identifierPrefix . $entryIdentifier) !== FALSE;
+               return $this->memcache->get($this->identifierPrefix . $entryIdentifier) !== FALSE;
        }
 
        /**
@@ -329,10 +322,11 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
         * Usually this only affects one entry but if - for what reason ever -
         * old entries for the identifier still exist, they are removed as well.
         *
-        * @param string Specifies the cache entry to remove
+        * @param string $entryIdentifier Specifies the cache entry to remove
         * @return boolean TRUE if (at least) an entry could be removed or FALSE if no entry was found
         * @author Christian Jul Jensen <julle@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function remove($entryIdentifier) {
                $this->removeIdentifierFromAllTags($entryIdentifier);
@@ -343,13 +337,13 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
         * Finds and returns all cache entry identifiers which are tagged by the
         * specified tag.
         *
-        * @param string The tag to search for
+        * @param string $tag The tag to search for
         * @return array An array of entries with all matching entries. An empty array if no entries matched
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function findIdentifiersByTag($tag) {
                $identifiers = $this->memcache->get($this->identifierPrefix . 'tag_' . $tag);
-
                if ($identifiers !== FALSE) {
                        return (array) $identifiers;
                } else {
@@ -357,14 +351,14 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
                }
        }
 
-
        /**
         * Finds and returns all cache entry identifiers which are tagged by the
         * specified tags.
         *
-        * @param array Array of tags to search for
+        * @param array $tags Array of tags to search for
         * @return array An array with identifiers of all matching entries. An empty array if no entries matched
         * @author Ingo Renner <ingo@typo3.org>
+        * @api
         */
        public function findIdentifiersByTags(array $tags) {
                $taggedEntries = array();
@@ -388,6 +382,7 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
         *
         * @return void
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function flush() {
                if (!$this->cache instanceof t3lib_cache_frontend_Frontend) {
@@ -403,22 +398,22 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
         * @param string $tag The tag the entries must have
         * @return void
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function flushByTag($tag) {
                $identifiers = $this->findIdentifiersByTag($tag);
-
                foreach ($identifiers as $identifier) {
                        $this->remove($identifier);
                }
        }
 
-
        /**
         * Removes all cache entries of this cache which are tagged by the specified tag.
         *
-        * @param array The tags the entries must have
+        * @param array $tags The tags the entries must have
         * @return void
         * @author Ingo Renner <ingo@typo3.org>
+        * @api
         */
        public function flushByTags(array $tags) {
                foreach ($tags as $tag) {
@@ -430,28 +425,29 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
         * Associates the identifier with the given tags
         *
         * @param string $entryIdentifier
-        * @param array Array of tags
+        * @param array $tags
         * @author Karsten Dambekalns <karsten@typo3.org>
-        * @author      Dmitry Dulepov <dmitry@typo3.org>
-        * @internal
+        * @author Dmitry Dulepov <dmitry@typo3.org>
         */
        protected function addIdentifierToTags($entryIdentifier, array $tags) {
-               if ($this->serverConnected) {
-                       foreach ($tags as $tag) {
-                                       // Update tag-to-identifier index
-                               $identifiers = $this->findIdentifiersByTag($tag);
-                               if (array_search($entryIdentifier, $identifiers) === FALSE) {
-                                       $identifiers[] = $entryIdentifier;
-                                       $this->memcache->set($this->identifierPrefix . 'tag_' . $tag,
-                                                                                $identifiers);
-                               }
+               foreach ($tags as $tag) {
+                               // Update tag-to-identifier index
+                       $identifiers = $this->findIdentifiersByTag($tag);
+                       if (array_search($entryIdentifier, $identifiers) === FALSE) {
+                               $identifiers[] = $entryIdentifier;
+                               $this->memcache->set(
+                                       $this->identifierPrefix . 'tag_' . $tag,
+                                       $identifiers
+                               );
+                       }
 
-                                       // Update identifier-to-tag index
-                               $existingTags = $this->findTagsByIdentifier($entryIdentifier);
-                               if (array_search($tag, $existingTags) === FALSE) {
-                                       $this->memcache->set($this->identifierPrefix . 'ident_' . $entryIdentifier,
-                                                                                array_merge($existingTags, $tags));
-                               }
+                               // Update identifier-to-tag index
+                       $existingTags = $this->findTagsByIdentifier($entryIdentifier);
+                       if (array_search($tag, $existingTags) === FALSE) {
+                               $this->memcache->set(
+                                       $this->identifierPrefix . 'ident_' . $entryIdentifier,
+                                       array_merge($existingTags, $tags)
+                               );
                        }
                }
        }
@@ -462,48 +458,43 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
         * @param string $entryIdentifier
         * @param array Array of tags
         * @author Karsten Dambekalns <karsten@typo3.org>
-        * @author      Dmitry Dulepov <dmitry@typo3.org>
-        * @internal
+        * @author Dmitry Dulepov <dmitry@typo3.org>
         */
        protected function removeIdentifierFromAllTags($entryIdentifier) {
-               if ($this->serverConnected) {
-                               // Get tags for this identifier
-                       $tags = $this->findTagsByIdentifier($entryIdentifier);
-                               // Deassociate tags with this identifier
-                       foreach ($tags as $tag) {
-                               $identifiers = $this->findIdentifiersByTag($tag);
-                                       // Formally array_search() below should never return FALSE
-                                       // due to the behavior of findTagsForIdentifier(). But if
-                                       // reverse index is corrupted, we still can get 'FALSE' from
-                                       // array_search(). This is not a problem because we are
-                                       // removing this identifier from anywhere.
-                               if (($key = array_search($entryIdentifier, $identifiers)) !== FALSE) {
-                                       unset($identifiers[$key]);
-
-                                       if (count($identifiers)) {
-                                               $this->memcache->set(
-                                                       $this->identifierPrefix . 'tag_' . $tag,
-                                                       $identifiers
-                                               );
-                                       } else {
-                                               $this->memcache->delete($this->identifierPrefix . 'tag_' . $tag, 0);
-                                       }
+                       // Get tags for this identifier
+               $tags = $this->findTagsByIdentifier($entryIdentifier);
+                       // Deassociate tags with this identifier
+               foreach ($tags as $tag) {
+                       $identifiers = $this->findIdentifiersByTag($tag);
+                               // Formally array_search() below should never return FALSE due to
+                               // the behavior of findTagsByIdentifier(). But if reverse index is
+                               // corrupted, we still can get 'FALSE' from array_search(). This is
+                               // not a problem because we are removing this identifier from
+                               // anywhere.
+                       if (($key = array_search($entryIdentifier, $identifiers)) !== FALSE) {
+                               unset($identifiers[$key]);
+                               if (count($identifiers)) {
+                                       $this->memcache->set(
+                                               $this->identifierPrefix . 'tag_' . $tag,
+                                               $identifiers
+                                       );
+                               } else {
+                                       $this->memcache->delete($this->identifierPrefix . 'tag_' . $tag, 0);
                                }
                        }
-
-                               // Clear reverse tag index for this identifier
-                       $this->memcache->delete($this->identifierPrefix . 'ident_' . $entryIdentifier, 0);
                }
+                       // Clear reverse tag index for this identifier
+               $this->memcache->delete($this->identifierPrefix . 'ident_' . $entryIdentifier, 0);
        }
 
        /**
         * Finds all tags for the given identifier. This function uses reverse tag
         * index to search for tags.
         *
-        * @param       string  Identifier to find tags by
-        * @return      array   Array with tags
+        * @param string $identifier Identifier to find tags by
+        * @return array
         * @author Dmitry Dulepov <dmitry@typo3.org>
-        * @internal
+        * @api
         */
        protected function findTagsByIdentifier($identifier) {
                $tags = $this->memcache->get($this->identifierPrefix . 'ident_' . $identifier);
@@ -514,6 +505,7 @@ class t3lib_cache_backend_MemcachedBackend extends t3lib_cache_backend_AbstractB
         * Does nothing, as memcached does GC itself
         *
         * @return void
+        * @api
         */
        public function collectGarbage() {
        }
index 91381c1..c35323d 100644 (file)
@@ -22,7 +22,6 @@
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
  * A caching backend which forgets everything immediately
  *
  * @package TYPO3
  * @subpackage t3lib_cache
  * @api
+ * @scope prototype
  */
 class t3lib_cache_backend_NullBackend extends t3lib_cache_backend_AbstractBackend {
 
        /**
         * Acts as if it would save data
         *
-        * @param string ignored
-        * @param string ignored
-        * @param array ignored
-        * @param integer ignored
+        * @param string $entryIdentifier ignored
+        * @param string $data ignored
+        * @param array $tags ignored
+        * @param integer $lifetime ignored
         * @return void
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function set($entryIdentifier, $data, array $tags = array(), $lifetime = NULL) {
        }
@@ -50,9 +51,10 @@ class t3lib_cache_backend_NullBackend extends t3lib_cache_backend_AbstractBacken
        /**
         * Returns False
         *
-        * @param string ignored
+        * @param string $entryIdentifier ignored
         * @return boolean FALSE
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function get($entryIdentifier) {
                return FALSE;
@@ -61,9 +63,10 @@ class t3lib_cache_backend_NullBackend extends t3lib_cache_backend_AbstractBacken
        /**
         * Returns False
         *
-        * @param string ignored
+        * @param string $entryIdentifier ignored
         * @return boolean FALSE
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function has($entryIdentifier) {
                return FALSE;
@@ -72,9 +75,10 @@ class t3lib_cache_backend_NullBackend extends t3lib_cache_backend_AbstractBacken
        /**
         * Does nothing
         *
-        * @param string ignored
+        * @param string $entryIdentifier ignored
         * @return boolean FALSE
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function remove($entryIdentifier) {
                return FALSE;
@@ -83,9 +87,10 @@ class t3lib_cache_backend_NullBackend extends t3lib_cache_backend_AbstractBacken
        /**
         * Returns an empty array
         *
-        * @param string ignored
+        * @param string $tag ignored
         * @return array An empty array
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function findIdentifiersByTag($tag) {
                return array();
@@ -94,9 +99,10 @@ class t3lib_cache_backend_NullBackend extends t3lib_cache_backend_AbstractBacken
        /**
         * Returns an empty array
         *
-        * @param string ignored
+        * @param array $tags ignored
         * @return array An empty array
         * @author Ingo Renner <ingo@typo3.org>
+        * @api
         */
        public function findIdentifiersByTags(array $tags) {
                return array();
@@ -107,6 +113,7 @@ class t3lib_cache_backend_NullBackend extends t3lib_cache_backend_AbstractBacken
         *
         * @return void
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function flush() {
        }
@@ -114,9 +121,10 @@ class t3lib_cache_backend_NullBackend extends t3lib_cache_backend_AbstractBacken
        /**
         * Does nothing
         *
-        * @param string ignored
+        * @param string $tag ignored
         * @return void
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function flushByTag($tag) {
        }
@@ -124,9 +132,10 @@ class t3lib_cache_backend_NullBackend extends t3lib_cache_backend_AbstractBacken
        /**
         * Does nothing
         *
-        * @param array ignored
+        * @param array $tags ignored
         * @return void
         * @author Ingo Renner <ingo@typo3.org>
+        * @api
         */
        public function flushByTags(array $tags) {
        }
@@ -136,6 +145,7 @@ class t3lib_cache_backend_NullBackend extends t3lib_cache_backend_AbstractBacken
         *
         * @return void
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function collectGarbage() {
        }
index b667a97..4f484a2 100644 (file)
@@ -49,12 +49,6 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
        protected $password;
 
        /**
-        * Used to seperate stored data by user, SAPI, context, ...
-        * @var string
-        */
-       protected $scope;
-
-       /**
         * @var PDO
         */
        protected $databaseHandle;
@@ -65,18 +59,6 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
        protected $pdoDriver;
 
        /**
-        * Constructs this backend
-        *
-        * @param array $options Configuration options - depends on the actual backend
-        * @author Christian Kuhn <lolli@schwarzbu.ch>
-        */
-       public function __construct(array $options = array()) {
-               parent::__construct($options);
-
-               $this->connect();
-       }
-
-       /**
         * Sets the DSN to use
         *
         * @param string $DSN The DSN to use for connecting to the DB
@@ -113,17 +95,13 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
        }
 
        /**
-        * Initializes the identifier prefix when setting the cache.
+        * Initialize the cache backend.
         *
-        * @param t3lib_cache_frontend_Frontend $cache
-        * @return void
-        * @author Robert Lemke <robert@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @return void
         */
-       public function setCache(t3lib_cache_frontend_Frontend $cache) {
-               parent::setCache($cache);
-               $processUser = extension_loaded('posix') ? posix_getpwuid(posix_geteuid()) : array('name' => 'default');
-               $this->scope = t3lib_div::shortMD5(PATH_site . $processUser['name'], 12);
+       public function initializeObject() {
+               $this->connect();
        }
 
        /**
@@ -135,6 +113,7 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
         * @param integer $lifetime Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
         * @return void
         * @throws t3lib_cache_Exception if no cache frontend has been set.
+        * @throws \InvalidArgumentException if the identifier is not valid
         * @throws t3lib_cache_exception_InvalidData if $data is not a string
         * @author Karsten Dambekalns <karsten@typo3.org>
         * @api
@@ -161,10 +140,10 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
                $lifetime = ($lifetime === NULL) ? $this->defaultLifetime : $lifetime;
 
                $statementHandle = $this->databaseHandle->prepare(
-                       'INSERT INTO "cache" ("identifier", "scope", "cache", "created", "lifetime", "content") VALUES (?, ?, ?, ?, ?, ?)'
+                       'INSERT INTO "cache" ("identifier", "context", "cache", "created", "lifetime", "content") VALUES (?, ?, ?, ?, ?, ?)'
                );
                $result = $statementHandle->execute(
-                       array($entryIdentifier, $this->scope, $this->cacheIdentifier, $GLOBALS['EXEC_TIME'], $lifetime, $data)
+                       array($entryIdentifier, $this->context, $this->cacheIdentifier, $GLOBALS['EXEC_TIME'], $lifetime, $data)
                );
 
                if ($result === FALSE) {
@@ -175,12 +154,12 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
                }
 
                $statementHandle = $this->databaseHandle->prepare(
-                       'INSERT INTO "tags" ("identifier", "scope", "cache", "tag") VALUES (?, ?, ?, ?)'
+                       'INSERT INTO "tags" ("identifier", "context", "cache", "tag") VALUES (?, ?, ?, ?)'
                );
 
                foreach ($tags as $tag) {
                        $result = $statementHandle->execute(
-                               array($entryIdentifier, $this->scope, $this->cacheIdentifier, $tag)
+                               array($entryIdentifier, $this->context, $this->cacheIdentifier, $tag)
                        );
                        if ($result === FALSE) {
                                throw new t3lib_cache_Exception(
@@ -201,10 +180,10 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
         */
        public function get($entryIdentifier) {
                $statementHandle = $this->databaseHandle->prepare(
-                       'SELECT "content" FROM "cache" WHERE "identifier"=? AND "scope"=? AND "cache"=?' . $this->getNotExpiredStatement()
+                       'SELECT "content" FROM "cache" WHERE "identifier"=? AND "context"=? AND "cache"=?' . $this->getNotExpiredStatement()
                );
                $statementHandle->execute(
-                       array($entryIdentifier, $this->scope, $this->cacheIdentifier)
+                       array($entryIdentifier, $this->context, $this->cacheIdentifier)
                );
                return $statementHandle->fetchColumn();
        }
@@ -219,10 +198,10 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
         */
        public function has($entryIdentifier) {
                $statementHandle = $this->databaseHandle->prepare(
-                       'SELECT COUNT("identifier") FROM "cache" WHERE "identifier"=? AND "scope"=? AND "cache"=?' . $this->getNotExpiredStatement()
+                       'SELECT COUNT("identifier") FROM "cache" WHERE "identifier"=? AND "context"=? AND "cache"=?' . $this->getNotExpiredStatement()
                );
                $statementHandle->execute(
-                       array($entryIdentifier, $this->scope, $this->cacheIdentifier)
+                       array($entryIdentifier, $this->context, $this->cacheIdentifier)
                );
                return ($statementHandle->fetchColumn() > 0);
        }
@@ -239,17 +218,17 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
         */
        public function remove($entryIdentifier) {
                $statementHandle = $this->databaseHandle->prepare(
-                       'DELETE FROM "tags" WHERE "identifier"=? AND "scope"=? AND "cache"=?'
+                       'DELETE FROM "tags" WHERE "identifier"=? AND "context"=? AND "cache"=?'
                );
                $statementHandle->execute(
-                       array($entryIdentifier, $this->scope, $this->cacheIdentifier)
+                       array($entryIdentifier, $this->context, $this->cacheIdentifier)
                );
 
                $statementHandle = $this->databaseHandle->prepare(
-                       'DELETE FROM "cache" WHERE "identifier"=? AND "scope"=? AND "cache"=?'
+                       'DELETE FROM "cache" WHERE "identifier"=? AND "context"=? AND "cache"=?'
                );
                $statementHandle->execute(
-                       array($entryIdentifier, $this->scope, $this->cacheIdentifier)
+                       array($entryIdentifier, $this->context, $this->cacheIdentifier)
                );
 
                return ($statementHandle->rowCount() > 0);
@@ -263,19 +242,11 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
         * @api
         */
        public function flush() {
-               $statementHandle = $this->databaseHandle->prepare(
-                       'DELETE FROM "tags" WHERE "scope"=? AND "cache"=?'
-               );
-               $statementHandle->execute(
-                       array($this->scope, $this->cacheIdentifier)
-               );
+               $statementHandle = $this->databaseHandle->prepare('DELETE FROM "tags" WHERE "context"=? AND "cache"=?');
+               $statementHandle->execute(array($this->context, $this->cacheIdentifier));
 
-               $statementHandle = $this->databaseHandle->prepare(
-                       'DELETE FROM "cache" WHERE "scope"=? AND "cache"=?'
-               );
-               $statementHandle->execute(
-                       array($this->scope, $this->cacheIdentifier)
-               );
+               $statementHandle = $this->databaseHandle->prepare('DELETE FROM "cache" WHERE "context"=? AND "cache"=?');
+               $statementHandle->execute(array($this->context, $this->cacheIdentifier));
        }
 
        /**
@@ -288,17 +259,17 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
         */
        public function flushByTag($tag) {
                $statementHandle = $this->databaseHandle->prepare(
-                       'DELETE FROM "cache" WHERE "scope"=? AND "cache"=? AND "identifier" IN (SELECT "identifier" FROM "tags" WHERE "scope"=? AND "cache"=? AND "tag"=?)'
+                       'DELETE FROM "cache" WHERE "context"=? AND "cache"=? AND "identifier" IN (SELECT "identifier" FROM "tags" WHERE "context"=? AND "cache"=? AND "tag"=?)'
                );
                $statementHandle->execute(
-                       array($this->scope, $this->cacheIdentifier, $this->scope, $this->cacheIdentifier, $tag)
+                       array($this->context, $this->cacheIdentifier, $this->context, $this->cacheIdentifier, $tag)
                );
 
                $statementHandle = $this->databaseHandle->prepare(
-                       'DELETE FROM "tags" WHERE "scope"=? AND "cache"=? AND "tag"=?'
+                       'DELETE FROM "tags" WHERE "context"=? AND "cache"=? AND "tag"=?'
                );
                $statementHandle->execute(
-                       array($this->scope, $this->cacheIdentifier, $tag)
+                       array($this->context, $this->cacheIdentifier, $tag)
                );
        }
 
@@ -328,12 +299,12 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
         */
        public function findIdentifiersByTag($tag) {
                $statementHandle = $this->databaseHandle->prepare(
-                       'SELECT "identifier" FROM "tags" WHERE "scope"=?  AND "cache"=? AND "tag"=?'
+                       'SELECT "identifier" FROM "tags" WHERE "context"=?  AND "cache"=? AND "tag"=?'
                );
                $statementHandle->execute(
-                       array($this->scope, $this->cacheIdentifier, $tag)
+                       array($this->context, $this->cacheIdentifier, $tag)
                );
-               return $statementHandle->fetchAll(PDO::FETCH_COLUMN);
+               return $statementHandle->fetchAll(\PDO::FETCH_COLUMN);
        }
 
        /**
@@ -374,18 +345,18 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
         */
        public function collectGarbage() {
                $statementHandle = $this->databaseHandle->prepare(
-                       'DELETE FROM "tags" WHERE "scope"=? AND "cache"=? AND "identifier" IN ' .
-                       '(SELECT "identifier" FROM "cache" WHERE "scope"=? AND "cache"=? AND "lifetime" > 0 AND "created" + "lifetime" < ' . $GLOBALS['EXEC_TIME'] . ')'
+                       'DELETE FROM "tags" WHERE "context"=? AND "cache"=? AND "identifier" IN ' .
+                       '(SELECT "identifier" FROM "cache" WHERE "context"=? AND "cache"=? AND "lifetime" > 0 AND "created" + "lifetime" < ' . $GLOBALS['EXEC_TIME'] . ')'
                );
                $statementHandle->execute(
-                       array($this->scope, $this->cacheIdentifier, $this->scope, $this->cacheIdentifier)
+                       array($this->context, $this->cacheIdentifier, $this->context, $this->cacheIdentifier)
                );
 
                $statementHandle = $this->databaseHandle->prepare(
-                       'DELETE FROM "cache" WHERE "scope"=? AND "cache"=? AND "lifetime" > 0 AND "created" + "lifetime" < ' . $GLOBALS['EXEC_TIME']
+                       'DELETE FROM "cache" WHERE "context"=? AND "cache"=? AND "lifetime" > 0 AND "created" + "lifetime" < ' . $GLOBALS['EXEC_TIME']
                );
                $statementHandle->execute(
-                       array($this->scope, $this->cacheIdentifier)
+                       array($this->context, $this->cacheIdentifier)
                );
        }
 
@@ -417,12 +388,12 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
                                $this->databaseHandle = t3lib_div::makeInstance('PDO', $this->dataSourceName, $this->username, $this->password);
                        }
 
-                       $this->databaseHandle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+                       $this->databaseHandle->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
 
                        if ($this->pdoDriver === 'mysql') {
                                $this->databaseHandle->exec('SET SESSION sql_mode=\'ANSI\';');
                        }
-               } catch (PDOException $e) {
+               } catch (\PDOException $e) {
                }
        }
 
@@ -430,14 +401,14 @@ class t3lib_cache_backend_PdoBackend extends t3lib_cache_backend_AbstractBackend
         * Creates the tables needed for the cache backend.
         *
         * @return void
-        * @throws RuntimeException if something goes wrong
+        * @throws \RuntimeException if something goes wrong
         * @author Karsten Dambekalns <karsten@typo3.org>
         */
        protected function createCacheTables() {
                try {
                        t3lib_PdoHelper::importSql($this->databaseHandle, $this->pdoDriver, PATH_t3lib . 'cache/backend/resources/ddl.sql');
-               } catch (PDOException $e) {
-                       throw new RuntimeException(
+               } catch (\PDOException $e) {
+                       throw new \RuntimeException(
                                'Could not create cache tables with DSN "' . $this->dataSourceName . '". PDO error: ' . $e->getMessage(),
                                1259576985
                        );
index bf23f39..d72ae52 100644 (file)
@@ -87,69 +87,81 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
        const FAKED_UNLIMITED_LIFETIME = 31536000;
 
        /**
-        * @var string Key prefix for identifier->data entries
+        * Key prefix for identifier->data entries
+        * @var string
         */
        const IDENTIFIER_DATA_PREFIX = 'identData:';
 
        /**
-        * @var string Key prefix for identifier->tags sets
+        * Key prefix for identifier->tags sets
+        * @var string
         */
        const IDENTIFIER_TAGS_PREFIX = 'identTags:';
 
        /**
-        * @var string Key prefix for tag->identifiers sets
+        * Key prefix for tag->identifiers sets
+        * @var string
         */
        const TAG_IDENTIFIERS_PREFIX = 'tagIdents:';
 
        /**
-        * @var Redis Instance of the PHP redis class
+        * Instance of the PHP redis class
+        * @var \Redis
         */
        protected $redis;
 
        /**
-        * @var boolean Indicates wether the server is connected
+        * Indicates wether the server is connected
+        * @var boolean
         */
        protected $connected = FALSE;
 
        /**
-        * @var string Hostname / IP of the Redis server, defaults to 127.0.0.1.
+        * Hostname / IP of the Redis server, defaults to 127.0.0.1.
+        * @var string
         */
        protected $hostname = '127.0.0.1';
 
        /**
-        * @var integer Port of the Redis server, defaults to 6379
+        * Port of the Redis server, defaults to 6379
+        * @var integer
         */
        protected $port = 6379;
 
        /**
-        * @var integer Number of selected database, defaults to 0
+        * Number of selected database, defaults to 0
+        * @var integer
         */
        protected $database = 0;
 
        /**
-        * @var string Password for redis authentication
+        * Password for redis authentication
+        * @var string
         */
        protected $password = '';
 
        /**
-        * @var boolean Indicates wether data is compressed or not (requires php zlib)
+        * Indicates wether data is compressed or not (requires php zlib)
+        * @var boolean
         */
        protected $compression = FALSE;
 
        /**
-        * @var integer -1 to 9, indicates zlib compression level: -1 = default level 6, 0 = no compression, 9 maximum compression
+        * -1 to 9, indicates zlib compression level: -1 = default level 6, 0 = no compression, 9 maximum compression
+        * @var integer
         */
        protected $compressionLevel = -1;
 
        /**
         * Construct this backend
         *
+        * @param string $context FLOW3's application context
         * @param array $options Configuration options
         * @throws t3lib_cache_Exception if php redis module is not loaded
         * @author Christopher Hlubek <hlubek@networkteam.com>
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         */
-       public function __construct(array $options = array()) {
+       public function __construct($context, array $options = array()) {
                if (!extension_loaded('redis')) {
                        throw new t3lib_cache_Exception(
                                'The PHP extension "redis" must be installed and loaded in order to use the redis backend.',
@@ -157,9 +169,7 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
                        );
                }
 
-               parent::__construct($options);
-
-               $this->initializeObject();
+               parent::__construct($context, $options);
        }
 
        /**
@@ -169,13 +179,13 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
         * @throws t3lib_cache_Exception if access to redis with password is denied or if database selection fails
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         */
-       protected function initializeObject() {
-               $this->redis = new Redis();
+       public function initializeObject() {
+               $this->redis = new \Redis();
 
                try {
                        $this->connected = $this->redis->connect($this->hostname, $this->port);
                } catch (Exception $e) {
-                       t3lib_div::sysLog('Unable to connect to redis server.', 'core', 3);
+                       t3lib_div::sysLog('Could not connect to redis server.', 'core', 3);
                }
 
                if ($this->connected) {
@@ -232,19 +242,19 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
         *
         * @param integer $database Database
         * @return void
-        * @throws InvalidArgumentException if database number is not valid
+        * @throws \InvalidArgumentException if database number is not valid
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         * @api
         */
        public function setDatabase($database) {
                if (!is_integer($database)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified database number is of type "' . gettype($database) . '" but an integer is expected.',
                                1279763057
                        );
                }
                if ($database < 0) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified database "' . $database . '" must be greater or equal than zero.',
                                1279763534
                        );
@@ -270,13 +280,13 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
         *
         * @param boolean $compression TRUE to enable compression
         * @return void
-        * @throws InvalidArgumentException if compression parameter is not of type boolean
+        * @throws \InvalidArgumentException if compression parameter is not of type boolean
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         * @api
         */
        public function setCompression($compression) {
                if (!is_bool($compression)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified compression of type "' . gettype($compression) . '" but a boolean is expected.',
                                1289679153
                        );
@@ -292,13 +302,13 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
         *
         * @param integer $compressionLevel -1 to 9: Compression level
         * @return void
-        * @throws InvalidArgumentException if compressionLevel parameter is not within allowed bounds
+        * @throws \InvalidArgumentException if compressionLevel parameter is not within allowed bounds
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         * @api
         */
        public function setCompressionLevel($compressionLevel) {
                if (!is_integer($compressionLevel)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified compression of type "' . gettype($compressionLevel) . '" but an integer is expected.',
                                1289679154
                        );
@@ -307,7 +317,7 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
                if ($compressionLevel >= -1 && $compressionLevel <= 9) {
                        $this->compressionLevel = $compressionLevel;
                } else {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified compression level must be an integer between -1 and 9.',
                                1289679155
                        );
@@ -325,7 +335,7 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
         * @param array $tags Tags to associate with this cache entry
         * @param integer $lifetime Lifetime of this cache entry in seconds. If NULL is specified, default lifetime is used. "0" means unlimited lifetime.
         * @return void
-        * @throws InvalidArgumentException if identifier is not valid
+        * @throws \InvalidArgumentException if identifier is not valid
         * @throws t3lib_cache_Exception_InvalidData if data is not a string
         * @author Christopher Hlubek <hlubek@networkteam.com>
         * @author Christian Kuhn <lolli@schwarzbu.ch>
@@ -333,7 +343,7 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
         */
        public function set($entryIdentifier, $data, array $tags = array(), $lifetime = NULL) {
                if (!is_string($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified identifier is of type "' . gettype($entryIdentifier) . '" but a string is expected.',
                                1279470252
                        );
@@ -349,13 +359,13 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
                $lifetimeIsInteger = is_integer($lifetime);
 
                if (!$lifetimeIsNull && !$lifetimeIsInteger) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified lifetime is of type "' . gettype($lifetime) . '" but a string or NULL is expected.',
                                1279488008
                        );
                }
                if ($lifetimeIsInteger && $lifetime < 0) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified lifetime "' . $lifetime . '" must be greater or equal than zero.',
                                1279487573
                        );
@@ -380,7 +390,7 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
                        }
 
                        if (count($removeTags) > 0 || count($addTags) > 0) {
-                               $queue = $this->redis->multi(Redis::PIPELINE);
+                               $queue = $this->redis->multi(\Redis::PIPELINE);
                                foreach ($removeTags as $tag) {
                                        $queue->sRemove(self::IDENTIFIER_TAGS_PREFIX . $entryIdentifier, $tag);
                                        $queue->sRemove(self::TAG_IDENTIFIERS_PREFIX . $tag, $entryIdentifier);
@@ -402,14 +412,14 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
         *
         * @param string $entryIdentifier An identifier which describes the cache entry to load
         * @return mixed The cache entry's content as a string or FALSE if the cache entry could not be loaded
-        * @throws InvalidArgumentException if identifier is not a string
+        * @throws \InvalidArgumentException if identifier is not a string
         * @author Christopher Hlubek <hlubek@networkteam.com>
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         * @api
         */
        public function get($entryIdentifier) {
                if (!is_string($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified identifier is of type "' . gettype($entryIdentifier) . '" but a string is expected.',
                                1279470253
                        );
@@ -434,14 +444,14 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
         *
         * @param string $entryIdentifier Identifier specifying the cache entry
         * @return boolean TRUE if such an entry exists, FALSE if not
-        * @throws InvalidArgumentException if identifier is not a string
+        * @throws \InvalidArgumentException if identifier is not a string
         * @author Christopher Hlubek <hlubek@networkteam.com>
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         * @api
         */
        public function has($entryIdentifier) {
                if (!is_string($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified identifier is of type "' . gettype($entryIdentifier) . '" but a string is expected.',
                                1279470254
                        );
@@ -457,14 +467,14 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
         *
         * @param string $entryIdentifier Specifies the cache entry to remove
         * @return boolean TRUE if (at least) an entry could be removed or FALSE if no entry was found
-        * @throws InvalidArgumentException if identifier is not a string
+        * @throws \InvalidArgumentException if identifier is not a string
         * @author Christopher Hlubek <hlubek@networkteam.com>
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         * @api
         */
        public function remove($entryIdentifier) {
                if (!is_string($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified identifier is of type "' . gettype($entryIdentifier) . '" but a string is expected.',
                                1279470255
                        );
@@ -475,7 +485,7 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
                        if ($this->redis->exists(self::IDENTIFIER_DATA_PREFIX . $entryIdentifier)) {
                                $assignedTags = $this->redis->sMembers(self::IDENTIFIER_TAGS_PREFIX . $entryIdentifier);
 
-                               $queue = $this->redis->multi(Redis::PIPELINE);
+                               $queue = $this->redis->multi(\Redis::PIPELINE);
                                foreach ($assignedTags as $tag) {
                                        $queue->sRemove(self::TAG_IDENTIFIERS_PREFIX . $tag, $entryIdentifier);
                                }
@@ -497,14 +507,14 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
         *
         * @param string $tag The tag to search for
         * @return array An array of entries with all matching entries. An empty array if no entries matched
-        * @throws InvalidArgumentException if tag is not a string
+        * @throws \InvalidArgumentException if tag is not a string
         * @author Christopher Hlubek <hlubek@networkteam.com>
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         * @api
         */
        public function findIdentifiersByTag($tag) {
                if (!is_string($tag)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified tag is of type "' . gettype($tag) . '" but a string is expected.',
                                1279569759
                        );
@@ -566,16 +576,16 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
         * Scales O(1) with number of cache entries
         * Scales O(n^2) with number of tag entries
         *
-        * @param string $tags Tag the entries must have
+        * @param string $tag Tag the entries must have
         * @return void
-        * @throws InvalidArgumentException if identifier is not a string
+        * @throws \InvalidArgumentException if identifier is not a string
         * @author Christopher Hlubek <hlubek@networkteam.com>
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         * @api
         */
        public function flushByTag($tag) {
                if (!is_string($tag)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                'The specified tag is of type "' . gettype($tag) . '" but a string is expected.',
                                1279578078
                        );
@@ -637,7 +647,7 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
                                // Check if the data entry still exists
                        if (!$this->redis->exists(self::IDENTIFIER_DATA_PREFIX . $identifier)) {
                                $tagsToRemoveIdentifierFrom = $this->redis->sMembers($identifierToTagsKey);
-                               $queue = $this->redis->multi(Redis::PIPELINE);
+                               $queue = $this->redis->multi(\Redis::PIPELINE);
                                $queue->delete($identifierToTagsKey);
                                foreach ($tagsToRemoveIdentifierFrom as $tag) {
                                        $queue->sRemove(self::TAG_IDENTIFIERS_PREFIX . $tag, $identifier);
@@ -682,7 +692,7 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
 
                        // Diff all identifiers that must be removed from tag to identifiers sets off from a
                        // tag to identifiers set and store result in same tag to identifiers set again
-               $queue = $this->redis->multi(Redis::PIPELINE);
+               $queue = $this->redis->multi(\Redis::PIPELINE);
                foreach ($identifiers as $identifier) {
                        $queue->sAdd($uniqueTempKey, $identifier);
                }
@@ -698,5 +708,4 @@ class t3lib_cache_backend_RedisBackend extends t3lib_cache_backend_AbstractBacke
                $queue->exec();
        }
 }
-
 ?>
\ No newline at end of file
index 35e6084..7fd9a99 100644 (file)
@@ -22,7 +22,6 @@
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
  * A caching backend which stores cache entries during one script run.
  *
@@ -31,6 +30,7 @@
  * @package TYPO3
  * @subpackage t3lib_cache
  * @api
+ * @scope prototype
  */
 class t3lib_cache_backend_TransientMemoryBackend extends t3lib_cache_backend_AbstractBackend {
 
@@ -54,6 +54,7 @@ class t3lib_cache_backend_TransientMemoryBackend extends t3lib_cache_backend_Abs
         * @return void
         * @throws t3lib_cache_Exception if no cache frontend has been set.
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function set($entryIdentifier, $data, array $tags = array(), $lifetime = NULL) {
                if (!$this->cache instanceof t3lib_cache_frontend_Frontend) {
@@ -74,6 +75,7 @@ class t3lib_cache_backend_TransientMemoryBackend extends t3lib_cache_backend_Abs
         * @param string $entryIdentifier An identifier which describes the cache entry to load
         * @return mixed The cache entry's content as a string or FALSE if the cache entry could not be loaded
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function get($entryIdentifier) {
                return (isset($this->entries[$entryIdentifier])) ? $this->entries[$entryIdentifier] : FALSE;
@@ -85,6 +87,7 @@ class t3lib_cache_backend_TransientMemoryBackend extends t3lib_cache_backend_Abs
         * @param string $entryIdentifier An identifier specifying the cache entry
         * @return boolean TRUE if such an entry exists, FALSE if not
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function has($entryIdentifier) {
                return isset($this->entries[$entryIdentifier]);
@@ -96,6 +99,7 @@ class t3lib_cache_backend_TransientMemoryBackend extends t3lib_cache_backend_Abs
         * @param string $entryIdentifier Specifies the cache entry to remove
         * @return boolean TRUE if the entry could be removed or FALSE if no entry was found
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function remove($entryIdentifier) {
                if (isset($this->entries[$entryIdentifier])) {
@@ -118,6 +122,7 @@ class t3lib_cache_backend_TransientMemoryBackend extends t3lib_cache_backend_Abs
         * @param string $tag The tag to search for
         * @return array An array with identifiers of all matching entries. An empty array if no entries matched
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function findIdentifiersByTag($tag) {
                if (isset($this->tagsAndEntries[$tag])) {
@@ -133,9 +138,10 @@ class t3lib_cache_backend_TransientMemoryBackend extends t3lib_cache_backend_Abs
         * The asterisk ("*") is allowed as a wildcard at the beginning and the end
         * of a tag.
         *
-        * @param array Array of tags to search for, the "*" wildcard is supported
+        * @param array $tags Array of tags to search for, the "*" wildcard is supported
         * @return array An array with identifiers of all matching entries. An empty array if no entries matched
-        * @author      Ingo Renner <ingo@typo3.org>
+        * @author Ingo Renner <ingo@typo3.org>
+        * @api
         */
        public function findIdentifiersByTags(array $tags) {
                $taggedEntries = array();
@@ -159,6 +165,7 @@ class t3lib_cache_backend_TransientMemoryBackend extends t3lib_cache_backend_Abs
         *
         * @return void
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function flush() {
                $this->entries = array();
@@ -171,6 +178,7 @@ class t3lib_cache_backend_TransientMemoryBackend extends t3lib_cache_backend_Abs
         * @param string $tag The tag the entries must have
         * @return void
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function flushByTag($tag) {
                $identifiers = $this->findIdentifiersByTag($tag);
@@ -182,9 +190,10 @@ class t3lib_cache_backend_TransientMemoryBackend extends t3lib_cache_backend_Abs
        /**
         * Removes all cache entries of this cache which are tagged by the specified tags.
         *
-        * @param       array   The tags the entries must have
+        * @param array $tags The tags the entries must have
         * @return void
-        * @author      Ingo Renner <ingo@typo3.org>
+        * @author Ingo Renner <ingo@typo3.org>
+        * @api
         */
        public function flushByTags(array $tags) {
                foreach ($tags as $tag) {
@@ -197,6 +206,7 @@ class t3lib_cache_backend_TransientMemoryBackend extends t3lib_cache_backend_Abs
         *
         * @return void
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function collectGarbage() {
        }
index b01df5d..80da783 100644 (file)
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
- * interface for a Cache Backend
+ * A contract for a Cache Backend
  *
- * @author     Ingo Renner <ingo@typo3.org>
+ * @author Ingo Renner <ingo@typo3.org>
  * @package TYPO3
- * @api
  * @subpackage t3lib
+ * @api
  */
 interface t3lib_cache_backend_Backend {
 
@@ -41,20 +40,22 @@ interface t3lib_cache_backend_Backend {
         *
         * @param t3lib_cache_frontend_Frontend $cache The frontend for this backend
         * @return void
+        * @api
         */
        public function setCache(t3lib_cache_frontend_Frontend $cache);
 
        /**
         * Saves data in the cache.
         *
-        * @param string An identifier for this specific cache entry
-        * @param string The data to be stored
-        * @param array Tags to associate with this cache entry
-        * @param integer Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
+        * @param string $entryIdentifier An identifier for this specific cache entry
+        * @param string $data The data to be stored
+        * @param array $tags Tags to associate with this cache entry
+        * @param integer $lifetime Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
         * @return void
         * @throws t3lib_cache_Exception if no cache frontend has been set.
-        * @throws InvalidArgumentException if the identifier is not valid
+        * @throws \InvalidArgumentException if the identifier is not valid
         * @throws t3lib_cache_Exception_InvalidData if the data is not a string
+        * @api
         */
        public function set($entryIdentifier, $data, array $tags = array(), $lifetime = NULL);
 
@@ -63,14 +64,16 @@ interface t3lib_cache_backend_Backend {
         *
         * @param string $entryIdentifier An identifier which describes the cache entry to load
         * @return mixed The cache entry's content as a string or FALSE if the cache entry could not be loaded
+        * @api
         */
        public function get($entryIdentifier);
 
        /**
         * Checks if a cache entry with the specified identifier exists.
         *
-        * @param string $entryIdentifier: An identifier specifying the cache entry
+        * @param string $entryIdentifier An identifier specifying the cache entry
         * @return boolean TRUE if such an entry exists, FALSE if not
+        * @api
         */
        public function has($entryIdentifier);
 
@@ -79,8 +82,9 @@ interface t3lib_cache_backend_Backend {
         * Usually this only affects one entry but if - for what reason ever -
         * old entries for the identifier still exist, they are removed as well.
         *
-        * @param string $entryIdentifier: Specifies the cache entry to remove
+        * @param string $entryIdentifier Specifies the cache entry to remove
         * @return boolean TRUE if (at least) an entry could be removed or FALSE if no entry was found
+        * @api
         */
        public function remove($entryIdentifier);
 
@@ -88,6 +92,7 @@ interface t3lib_cache_backend_Backend {
         * Removes all cache entries of this cache.
         *
         * @return void
+        * @api
         */
        public function flush();
 
@@ -96,15 +101,17 @@ interface t3lib_cache_backend_Backend {
         *
         * @param string $tag The tag the entries must have
         * @return void
+        * @api
         */
        public function flushByTag($tag);
 
        /**
         * Removes all cache entries of this cache which are tagged by the specified tags.
         *
-        * @param       array   The tags the entries must have
+        * @param array $tags The tags the entries must have
         * @return void
-        * @author      Ingo Renner <ingo@typo3.org>
+        * @author Ingo Renner <ingo@typo3.org>
+        * @api
         */
        public function flushByTags(array $tags);
 
@@ -114,6 +121,7 @@ interface t3lib_cache_backend_Backend {
         *
         * @param string $tag The tag to search for
         * @return array An array with identifiers of all matching entries. An empty array if no entries matched
+        * @api
         */
        public function findIdentifiersByTag($tag);
 
@@ -123,9 +131,10 @@ interface t3lib_cache_backend_Backend {
         * The asterisk ("*") is allowed as a wildcard at the beginning and the end
         * of a tag.
         *
-        * @param array Array of tags to search for, the "*" wildcard is supported
+        * @param array $tags Array of tags to search for, the "*" wildcard is supported
         * @return array An array with identifiers of all matching entries. An empty array if no entries matched
-        * @author      Ingo Renner <ingo@typo3.org>
+        * @author Ingo Renner <ingo@typo3.org>
+        * @api
         */
        public function findIdentifiersByTags(array $tags);
 
@@ -133,10 +142,9 @@ interface t3lib_cache_backend_Backend {
         * Does garbage collection
         *
         * @return void
+        * @api
         */
        public function collectGarbage();
 
 }
-
-
 ?>
\ No newline at end of file
index a868ceb..1c7cd2c 100644 (file)
@@ -25,7 +25,6 @@
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
  * A contract for a cache backend which is capable of storing, retrieving and
  * including PHP source code.
@@ -45,5 +44,4 @@ interface t3lib_cache_backend_PhpCapableBackend extends t3lib_cache_backend_Back
        public function requireOnce($entryIdentifier);
 
 }
-
 ?>
\ No newline at end of file
index 8609b6a..72e26be 100644 (file)
@@ -3,20 +3,20 @@ BEGIN;
 CREATE TABLE "cache" (
   "identifier" VARCHAR(250) NOT NULL,
   "cache" VARCHAR(250) NOT NULL,
-  "scope" CHAR(12) NOT NULL,
+  "context" VARCHAR(150) NOT NULL,
   "created" INTEGER UNSIGNED NOT NULL,
   "lifetime" INTEGER UNSIGNED DEFAULT '0' NOT NULL,
   "content" TEXT,
-  PRIMARY KEY ("identifier", "cache", "scope")
+  PRIMARY KEY ("identifier", "cache", "context")
 );
 
 CREATE TABLE "tags" (
   "identifier" VARCHAR(250) NOT NULL,
   "cache" VARCHAR(250) NOT NULL,
-  "scope" CHAR(12) NOT NULL,
+  "context" VARCHAR(150) NOT NULL,
   "tag" VARCHAR(250) NOT NULL
 );
-CREATE INDEX "identifier" ON "tags" ("identifier", "cache", "scope");
+CREATE INDEX "identifier" ON "tags" ("identifier", "cache", "context");
 CREATE INDEX "tag" ON "tags" ("tag");
 
-COMMIT;
+COMMIT;
\ No newline at end of file
index fb03204..190ce9b 100644 (file)
@@ -22,7 +22,6 @@
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
  * This cache factory takes care of instantiating a cache frontend and injecting
  * a certain cache backend. After creation of the new cache, the cache object
  *
  * @package TYPO3
  * @subpackage t3lib_cache
+ * @scope singleton
  * @api
  */
 class t3lib_cache_Factory implements t3lib_Singleton {
 
        /**
+        * The current FLOW3 context ("production", "development" etc.)
+        *
+        * TYPO3 v4 note: This variable is always set to "production"
+        * in TYPO3 v4 and only kept in v4 to keep v4 and FLOW3 in sync.
+        *
+        * @var string
+        */
+       protected $context;
+
+       /**
         * A reference to the cache manager
         *
         * @var t3lib_cache_Manager
@@ -44,17 +54,16 @@ class t3lib_cache_Factory implements t3lib_Singleton {
        protected $cacheManager;
 
        /**
-        * Injects the cache manager.
-        *
-        * This is called by the cache manager itself
+        * Constructs this cache factory
         *
+        * @param string $context The current FLOW3 context
         * @param t3lib_cache_Manager $cacheManager The cache manager
-        * @return void
         * @author Robert Lemke <robert@typo3.org>
-        * @internal
         */
-       public function setCacheManager(t3lib_cache_Manager $cacheManager) {
+       public function __construct($context, t3lib_cache_Manager $cacheManager) {
+               $this->context = $context;
                $this->cacheManager = $cacheManager;
+               $this->cacheManager->injectCacheFactory($this);
        }
 
        /**
@@ -62,21 +71,24 @@ class t3lib_cache_Factory implements t3lib_Singleton {
         * After creating the cache, it will be registered at the cache manager.
         *
         * @param string $cacheIdentifier The name / identifier of the cache to create
-        * @param string $cacheName Name of the cache frontend
-        * @param string $backendName Name of the cache backend
+        * @param string $cacheObjectName Object name of the cache frontend
+        * @param string $backendObjectName Object name of the cache backend
         * @param array $backendOptions (optional) Array of backend options
         * @return t3lib_cache_frontend_Frontend The created cache frontend
+        * @throws t3lib_cache_exception_InvalidBackend if the cache backend is not valid
+        * @throws t3lib_cache_exception_InvalidCache if the cache frontend is not valid
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
-       public function create($cacheIdentifier, $cacheName, $backendName, array $backendOptions = array()) {
+       public function create($cacheIdentifier, $cacheObjectName, $backendObjectName, array $backendOptions = array()) {
 
-               $backendReference = $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheBackends'][$backendName];
+               $backendReference = $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheBackends'][$backendObjectName];
 
                if (strpos($backendReference, ':') === FALSE) {
                        $backendClassReference = $backendReference;
                } else {
                        t3lib_div::deprecationLog("Configuring cacheBackend with filename is deprecated since TYPO3 4.5. Use the autoloader instead.");
-                               // loading the cache backend file and class
+                               // Loading the cache backend file and class
                        list($backendFile, $backendClassReference) = explode(
                                ':',
                                $backendReference
@@ -88,16 +100,21 @@ class t3lib_cache_Factory implements t3lib_Singleton {
                        }
                }
 
-               $backend = t3lib_div::makeInstance($backendClassReference, $backendOptions);
+               $backend = t3lib_div::makeInstance($backendClassReference, $this->context, $backendOptions);
 
                if (!$backend instanceof t3lib_cache_backend_Backend) {
-                       throw new t3lib_cache_exception_InvalidCache(
-                               '"' . $backendName . '" is not a valid cache backend.',
+                       throw new t3lib_cache_exception_InvalidBackend(
+                               '"' . $backendObjectName . '" is not a valid cache backend.',
                                1216304301
                        );
                }
 
-               $cacheReference = $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheFrontends'][$cacheName];
+               if (is_callable(array($backend, 'initializeObject'))) {
+                       $backend->initializeObject();
+               }
+
+
+               $cacheReference = $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheFrontends'][$cacheObjectName];
 
                if (strpos($cacheReference, ':') === FALSE) {
                        $cacheClassReference = $cacheReference;
@@ -116,14 +133,17 @@ class t3lib_cache_Factory implements t3lib_Singleton {
                }
                $cache = t3lib_div::makeInstance($cacheClassReference, $cacheIdentifier, $backend);
 
-
                if (!$cache instanceof t3lib_cache_frontend_Frontend) {
                        throw new t3lib_cache_exception_InvalidCache(
-                               '"' . $cacheName . '" is not a valid cache.',
+                               '"' . $cacheObjectName . '" is not a valid cache.',
                                1216304300
                        );
                }
 
+               if (is_callable(array($cache, 'initializeObject'))) {
+                       $cache->initializeObject();
+               }
+
                $this->cacheManager->registerCache($cache);
 
                return $cache;
index 9eba2f6..3b2336f 100644 (file)
@@ -22,7 +22,6 @@
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
  * The Cache Manager
  *
  *
  * @package TYPO3
  * @subpackage t3lib_cache
+ * @scope singleton
  * @api
  */
 class t3lib_cache_Manager implements t3lib_Singleton {
+
        /**
         * @var t3lib_cache_Factory
         */
@@ -49,6 +50,15 @@ class t3lib_cache_Manager implements t3lib_Singleton {
        protected $cacheConfigurations = array();
 
        /**
+        * @param t3lib_cache_Factory $cacheFactory
+        * @return void
+        * @author Robert Lemke <robert@typo3.org>
+        */
+       public function injectCacheFactory(t3lib_cache_Factory $cacheFactory) {
+               $this->cacheFactory = $cacheFactory;
+       }
+
+       /**
         * Sets configurations for caches. The key of each entry specifies the
         * cache identifier and the value is an array of configuration options.
         * Possible options are:
@@ -60,59 +70,31 @@ class t3lib_cache_Manager implements t3lib_Singleton {
         * If one of the options is not specified, the default value is assumed.
         * Existing cache configurations are preserved.
         *
-        * @param       array   The cache configurations to set
-        * @return      void
-        * @author      Robert Lemke <robert@typo3.org>
-        * @internal
+        * @param array $cacheConfigurations The cache configurations to set
+        * @return void
+        * @throws \InvalidArgumentException If $cacheConfigurations is not an array
+        * @author Robert Lemke <robert@typo3.org>
         */
        public function setCacheConfigurations(array $cacheConfigurations) {
                foreach ($cacheConfigurations as $identifier => $configuration) {
                        if (!is_array($configuration)) {
-                               throw new InvalidArgumentException('The cache configuration for cache "' . $identifier . '" was not an array as expected.', 1235838075);
+                               throw new \InvalidArgumentException(
+                                       'The cache configuration for cache "' . $identifier . '" was not an array as expected.',
+                                       1231259656
+                               );
                        }
                        $this->cacheConfigurations[$identifier] = $configuration;
                }
        }
 
        /**
-        * Injects the cache factory
-        *
-        * @param       t3lib_cache_Factory     The cache factory
-        * @return void
-        * @author Robert Lemke <robert@typo3.org>
-        * @author Ingo Renner <ingo@typo3.org>
-        * @internal
-        */
-       public function setCacheFactory(t3lib_cache_Factory $cacheFactory) {
-               $this->cacheFactory = $cacheFactory;
-               $this->cacheFactory->setCacheManager($this);
-       }
-
-       /**
-        * Initializes the cache manager
-        *
-        * @return void
-        * @author Robert Lemke <robert@typo3.org>
-        * @internal
-        */
-       public function initialize() {
-               foreach ($this->cacheConfigurations as $identifier => $configuration) {
-                       $this->cacheFactory->create(
-                               $identifier,
-                               $configuration['frontend'],
-                               $configuration['backend'],
-                               $configuration['backendOptions']
-                       );
-               }
-       }
-
-       /**
         * Registers a cache so it can be retrieved at a later point.
         *
-        * @param t3lib_cache_frontend_Frontend The cache frontend to be registered
+        * @param t3lib_cache_frontend_Frontend $cache The cache frontend to be registered
         * @return void
         * @throws t3lib_cache_exception_DuplicateIdentifier if a cache with the given identifier has already been registered.
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function registerCache(t3lib_cache_frontend_Frontend $cache) {
                $identifier = $cache->getIdentifier();
@@ -130,31 +112,37 @@ class t3lib_cache_Manager implements t3lib_Singleton {
        /**
         * Returns the cache specified by $identifier
         *
-        * @param string Identifies which cache to return
-        * @return t3lib_cache_frontend_Cache The specified cache frontend
+        * @param string $identifier Identifies which cache to return
+        * @return t3lib_cache_frontend_Frontend The specified cache frontend
         * @throws t3lib_cache_exception_NoSuchCache
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function getCache($identifier) {
-               if (!isset($this->caches[$identifier])) {
+               if ($this->hasCache($identifier) === FALSE) {
                        throw new t3lib_cache_exception_NoSuchCache(
                                'A cache with identifier "' . $identifier . '" does not exist.',
                                1203699034
                        );
                }
 
+               if (!isset($this->caches[$identifier])) {
+                       $this->createCache($identifier);
+               }
+
                return $this->caches[$identifier];
        }
 
        /**
         * Checks if the specified cache has been registered.
         *
-        * @param string The identifier of the cache
+        * @param string $identifier The identifier of the cache
         * @return boolean TRUE if a cache with the given identifier exists, otherwise FALSE
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function hasCache($identifier) {
-               return isset($this->caches[$identifier]);
+               return isset($this->caches[$identifier]) || isset($this->cacheConfigurations[$identifier]);
        }
 
        /**
@@ -162,8 +150,10 @@ class t3lib_cache_Manager implements t3lib_Singleton {
         *
         * @return void
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function flushCaches() {
+               $this->createAllCaches();
                foreach ($this->caches as $cache) {
                        $cache->flush();
                }
@@ -173,15 +163,94 @@ class t3lib_cache_Manager implements t3lib_Singleton {
         * Flushes entries tagged by the specified tag of all registered
         * caches.
         *
-        * @param string Tag to search for
+        * @param string $tag Tag to search for
         * @return void
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function flushCachesByTag($tag) {
+               $this->createAllCaches();
                foreach ($this->caches as $cache) {
                        $cache->flushByTag($tag);
                }
        }
+
+       /**
+        * TYPO3 v4 note: This method is a direct backport from FLOW3 and currently
+        * unused in TYPO3 v4 context.
+        *
+        * Flushes entries tagged with class names if their class source files have changed.
+        *
+        * This method is used as a slot for a signal sent by the class file monitor defined
+        * in the bootstrap.
+        *
+        * @param string $fileMonitorIdentifier Identifier of the File Monitor (must be "FLOW3_ClassFiles")
+        * @param array $changedFiles A list of full paths to changed files
+        * @return void
+        * @author Robert Lemke <robert@typo3.org>
+        */
+       public function flushClassFileCachesByChangedFiles($fileMonitorIdentifier, array $changedFiles) {
+               if ($fileMonitorIdentifier !== 'FLOW3_ClassFiles') {
+                       return;
+               }
+
+               $this->flushCachesByTag(self::getClassTag());
+               foreach ($changedFiles as $pathAndFilename => $status) {
+                       $matches = array();
+                       if (1 === preg_match('/.+\/(.+)\/Classes\/(.+)\.php/', $pathAndFilename, $matches)) {
+                               $className = 'F3\\' . $matches[1] . '\\' . str_replace('/', '\\', $matches[2]);
+                               $this->flushCachesByTag(self::getClassTag($className));
+                       }
+               }
+       }
+
+       /**
+        * TYPO3 v4 note: This method is a direct backport from FLOW3 and currently
+        * unused in TYPO3 v4 context.
+        *
+        * Renders a tag which can be used to mark a cache entry as "depends on this class".
+        * Whenever the specified class is modified, all cache entries tagged with the
+        * class are flushed.
+        *
+        * If an empty string is specified as class name, the returned tag means
+        * "this cache entry becomes invalid if any of the known classes changes".
+        *
+        * @param string $className The class name
+        * @return string Class Tag
+        * @author Robert Lemke <robert@typo3.org>
+        * @api
+        */
+       public static function getClassTag($className = '') {
+               return ($className === '') ? t3lib_cache_frontend_Frontend::TAG_CLASS : t3lib_cache_frontend_Frontend::TAG_CLASS . str_replace('\\', '_', $className);
+       }
+
+       /**
+        * Instantiates all registered caches.
+        *
+        * @return void
+        * @author Robert Lemke <robert@typo3.org>
+        */
+       protected function createAllCaches() {
+               foreach (array_keys($this->cacheConfigurations) as $identifier) {
+                       if (!isset($this->caches[$identifier])) {
+                               $this->createCache($identifier);
+                       }
+               }
+       }
+
+       /**
+        * Instantiates the cache for $identifier.
+        *
+        * @param string $identifier
+        * @return void
+        * @author Robert Lemke <robert@typo3.org>
+        */
+       protected function createCache($identifier) {
+               $frontend = $this->cacheConfigurations[$identifier]['frontend'];
+               $backend = $this->cacheConfigurations[$identifier]['backend'];
+               $backendOptions = $this->cacheConfigurations[$identifier]['backendOptions'];
+               $this->cacheFactory->create($identifier, $frontend, $backend, $backendOptions);
+       }
 }
 
 
index c87f976..22f7825 100644 (file)
@@ -22,7 +22,6 @@
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
  * An abstract cache
  *
  * @package TYPO3
  * @subpackage t3lib_cache
  * @api
+ * @scope prototype
  */
 abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_frontend_Frontend {
 
        /**
-        * @var string Identifies this cache
+        * Identifies this cache
+        * @var string
         */
        protected $identifier;
 
@@ -47,17 +48,15 @@ abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_fron
        /**
         * Constructs the cache
         *
-        * @param string A identifier which describes this cache
-        * @param t3lib_cache_backend_Backend Backend to be used for this cache
+        * @param string $identifier A identifier which describes this cache
+        * @param t3lib_cache_backend_Backend $backend Backend to be used for this cache
         * @author Robert Lemke <robert@typo3.org>
-        * @throws InvalidArgumentException if the identifier doesn't match PATTERN_ENTRYIDENTIFIER
-        * @internal
+        * @throws \InvalidArgumentException if the identifier doesn't match PATTERN_ENTRYIDENTIFIER
         */
        public function __construct($identifier, t3lib_cache_backend_Backend $backend) {
                if (!preg_match(self::PATTERN_ENTRYIDENTIFIER, $identifier)) {
-                       throw new InvalidArgumentException('"' . $identifier . '" is not a valid cache identifier.', 1203584729);
+                       throw new \InvalidArgumentException('"' . $identifier . '" is not a valid cache identifier.', 1203584729);
                }
-
                $this->identifier = $identifier;
                $this->backend = $backend;
                $this->backend->setCache($this);
@@ -68,6 +67,7 @@ abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_fron
         *
         * @return string The identifier for this cache
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function getIdentifier() {
                return $this->identifier;
@@ -78,6 +78,7 @@ abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_fron
         *
         * @return t3lib_cache_backend_Backend The backend used by this cache
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function getBackend() {
                return $this->backend;
@@ -88,17 +89,18 @@ abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_fron
         *
         * @param string $entryIdentifier An identifier specifying the cache entry
         * @return boolean TRUE if such an entry exists, FALSE if not
+        * @throws \InvalidArgumentException If $entryIdentifier is invalid
         * @author Robert Lemke <robert@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function has($entryIdentifier) {
                if (!$this->isValidEntryIdentifier($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                '"' . $entryIdentifier . '" is not a valid cache entry identifier.',
                                1233058486
                        );
                }
-
                return $this->backend->has($entryIdentifier);
        }
 
@@ -109,15 +111,15 @@ abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_fron
         * @return boolean TRUE if such an entry exists, FALSE if not
         * @author Sebastian Kurfürst <sebastian@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function remove($entryIdentifier) {
                if (!$this->isValidEntryIdentifier($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                '"' . $entryIdentifier . '" is not a valid cache entry identifier.',
                                1233058495
                        );
                }
-
                return $this->backend->remove($entryIdentifier);
        }
 
@@ -126,6 +128,7 @@ abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_fron
         *
         * @return void
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function flush() {
                $this->backend->flush();
@@ -138,10 +141,11 @@ abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_fron
         * @return void
         * @author Robert Lemke <robert@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function flushByTag($tag) {
                if (!$this->isValidTag($tag)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                '"' . $tag . '" is not a valid tag for a cache entry.',
                                1233057359
                        );
@@ -153,9 +157,10 @@ abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_fron
        /**
         * Removes all cache entries of this cache which are tagged by the specified tag.
         *
-        * @param       array   Array of tags to search for and to remove the cache entries, the "*" wildcard is supported
+        * @param array $tags Array of tags to search for and to remove the cache entries, the "*" wildcard is supported
         * @return void
         * @author Ingo Renner <ingo@typo3.org>
+        * @api
         */
        public function flushByTags(array $tags) {
                $this->backend->flushByTags($tags);
@@ -166,6 +171,7 @@ abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_fron
         *
         * @return void
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function collectGarbage() {
                $this->backend->collectGarbage();
@@ -176,15 +182,16 @@ abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_fron
         * Whenever the specified class is modified, all cache entries tagged with the
         * class are flushed.
         *
-        * If an empty string is specified as class name, the returned tag means
-        * "depends on any class".
+        * If an empty string is specified as class name, the returned tag means "depends on any class".
         *
-        * @param string The class name
+        * @param string $className The class name
         * @return string Class Tag
         * @author Robert Lemke <robert@typo3.org>
+        * @api
+        * @deprecated since TYPO3 4.6 - Use t3lib_cache_Manager::getClassTag() instead
         */
        public function getClassTag($className = '') {
-               return ($className === '') ? self::TAG_CLASS : self::TAG_CLASS . str_replace('\\', '_', $className);
+               return t3lib_cache_Manager::getClassTag($className);
        }
 
        /**
@@ -193,6 +200,7 @@ abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_fron
         * @param string $identifier An identifier to be checked for validity
         * @return boolean
         * @author Christian Jul Jensen <julle@typo3.org>
+        * @api
         */
        public function isValidEntryIdentifier($identifier) {
                return preg_match(self::PATTERN_ENTRYIDENTIFIER, $identifier) === 1;
@@ -204,6 +212,7 @@ abstract class t3lib_cache_frontend_AbstractFrontend implements t3lib_cache_fron
         * @param string $tag An identifier to be checked for validity
         * @return boolean
         * @author Robert Lemke <robert@typo3.org>
+        * @api
         */
        public function isValidTag($tag) {
                return preg_match(self::PATTERN_TAG, $tag) === 1;
index ee512c6..e25f012 100644 (file)
@@ -22,7 +22,6 @@
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
  * A cache frontend tailored to PHP code.
  *
@@ -53,12 +52,14 @@ class t3lib_cache_frontend_PhpFrontend extends t3lib_cache_frontend_StringFronte
         * @param array $tags Tags to associate with this cache entry
         * @param integer $lifetime Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
         * @return void
+        * @throws \InvalidArgumentException If $entryIdentifier or $tags is invalid
+        * @throws t3lib_cache_exception_InvalidData If $sourceCode is not a string
         * @author Robert Lemke <robert@typo3.org>
         * @api
         */
-       public function set($entryIdentifier, $sourceCode, $tags = array(), $lifetime = NULL) {
+       public function set($entryIdentifier, $sourceCode, array $tags = array(), $lifetime = NULL) {
                if (!$this->isValidEntryIdentifier($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                '"' . $entryIdentifier . '" is not a valid cache entry identifier.',
                                1264023823
                        );
@@ -71,7 +72,7 @@ class t3lib_cache_frontend_PhpFrontend extends t3lib_cache_frontend_StringFronte
                }
                foreach ($tags as $tag) {
                        if (!$this->isValidTag($tag)) {
-                               throw new InvalidArgumentException(
+                               throw new \InvalidArgumentException(
                                        '"' . $tag . '" is not a valid tag for a cache entry.',
                                        1264023825
                                );
index 3118944..55d1a03 100644 (file)
@@ -22,7 +22,6 @@
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
  * A cache frontend for strings. Nothing else.
  *
  * @package TYPO3
  * @subpackage t3lib_cache
  * @api
+ * @scope prototype
  */
 class t3lib_cache_frontend_StringFrontend extends t3lib_cache_frontend_AbstractFrontend {
 
        /**
-        * Saves the value of a PHP variable in the cache. Note that the variable
-        * will be serialized if necessary.
+        * Saves the value of a PHP variable in the cache.
         *
-        * @param string An identifier used for this cache entry
-        * @param string The variable to cache
-        * @param array Tags to associate with this cache entry
-        * @param integer Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
+        * @param string $entryIdentifier An identifier used for this cache entry
+        * @param string $string The variable to cache
+        * @param array $tags Tags to associate with this cache entry
+        * @param integer $lifetime Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
         * @return void
+        * @throws \InvalidArgumentException if the identifier or tag is not valid
+        * @throws t3lib_cache_exception_InvalidData if the variable to cache is not of type string
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
-       public function set($entryIdentifier, $string, $tags = array(), $lifetime = NULL) {
+       public function set($entryIdentifier, $string, array $tags = array(), $lifetime = NULL) {
                if (!$this->isValidEntryIdentifier($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                '"' . $entryIdentifier . '" is not a valid cache entry identifier.',
                                1233057566
                        );
@@ -62,7 +64,7 @@ class t3lib_cache_frontend_StringFrontend extends t3lib_cache_frontend_AbstractF
 
                foreach ($tags as $tag) {
                        if (!$this->isValidTag($tag)) {
-                               throw new InvalidArgumentException(
+                               throw new \InvalidArgumentException(
                                        '"' . $tag . '" is not a valid tag for a cache entry.',
                                        1233057512
                                );
@@ -73,15 +75,17 @@ class t3lib_cache_frontend_StringFrontend extends t3lib_cache_frontend_AbstractF
        }
 
        /**
-        * Loads a variable value from the cache.
+        * Finds and returns a variable value from the cache.
         *
-        * @param string Identifier of the cache entry to fetch
+        * @param string $entryIdentifier Identifier of the cache entry to fetch
         * @return string The value
+        * @throws \InvalidArgumentException if the cache identifier is not valid
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function get($entryIdentifier) {
                if (!$this->isValidEntryIdentifier($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                '"' . $entryIdentifier . '" is not a valid cache entry identifier.',
                                1233057752
                        );
@@ -95,11 +99,13 @@ class t3lib_cache_frontend_StringFrontend extends t3lib_cache_frontend_AbstractF
         *
         * @param string $tag The tag to search for
         * @return array An array with the content of all matching entries. An empty array if no entries matched
+        * @throws \InvalidArgumentException if the tag is not valid
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function getByTag($tag) {
                if (!$this->isValidTag($tag)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                '"' . $tag . '" is not a valid tag for a cache entry.',
                                1233057772
                        );
@@ -107,11 +113,9 @@ class t3lib_cache_frontend_StringFrontend extends t3lib_cache_frontend_AbstractF
 
                $entries = array();
                $identifiers = $this->backend->findIdentifiersByTag($tag);
-
                foreach ($identifiers as $identifier) {
                        $entries[] = $this->backend->get($identifier);
                }
-
                return $entries;
        }
 
index 9d5d3ed..e667bd8 100644 (file)
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
- * A cache for any kinds of PHP variables
+ * A cache frontend for any kinds of PHP variables
  *
  * This file is a backport from FLOW3
  *
  * @package TYPO3
  * @subpackage t3lib_cache
  * @api
+ * @scope prototype
  */
 class t3lib_cache_frontend_VariableFrontend extends t3lib_cache_frontend_AbstractFrontend {
 
        /**
-        * If the extension "igbinary" is installed, use it for increased performance
+        * If the extension "igbinary" is installed, use it for increased performance.
+        * Caching the result of extension_loaded() here is faster than calling extension_loaded() multiple times.
         *
         * @var boolean
         */
        protected $useIgBinary = FALSE;
 
        /**
-        * Constructs the cache
-        *
-        * @param string A identifier which describes this cache
-        * @param t3lib_cache_backend_Backend Backend to be used for this cache
-        * @author Robert Lemke <robert@typo3.org>
-        * @throws InvalidArgumentException if the identifier doesn't match PATTERN_ENTRYIDENTIFIER
-        * @internal
-        */
-       public function __construct($identifier, t3lib_cache_backend_Backend $backend) {
-               parent::__construct($identifier, $backend);
-               $this->initializeObject();
-       }
-
-       /**
         * Initializes this cache frontend
         *
         * @return void
@@ -74,12 +61,14 @@ class t3lib_cache_frontend_VariableFrontend extends t3lib_cache_frontend_Abstrac
         * @param array $tags Tags to associate with this cache entry
         * @param integer $lifetime Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
         * @return void
+        * @throws \InvalidArgumentException if the identifier or tag is not valid
         * @author Robert Lemke <robert@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
-       public function set($entryIdentifier, $variable, $tags = array(), $lifetime = NULL) {
+       public function set($entryIdentifier, $variable, array $tags = array(), $lifetime = NULL) {
                if (!$this->isValidEntryIdentifier($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                '"' . $entryIdentifier . '" is not a valid cache entry identifier.',
                                1233058264
                        );
@@ -87,7 +76,7 @@ class t3lib_cache_frontend_VariableFrontend extends t3lib_cache_frontend_Abstrac
 
                foreach ($tags as $tag) {
                        if (!$this->isValidTag($tag)) {
-                               throw new InvalidArgumentException(
+                               throw new \InvalidArgumentException(
                                        '"' . $tag . '" is not a valid tag for a cache entry.',
                                        1233058269
                                );
@@ -102,22 +91,28 @@ class t3lib_cache_frontend_VariableFrontend extends t3lib_cache_frontend_Abstrac
        }
 
        /**
-        * Loads a variable value from the cache.
+        * Finds and returns a variable value from the cache.
         *
-        * @param string Identifier of the cache entry to fetch
+        * @param string $entryIdentifier Identifier of the cache entry to fetch
         * @return mixed The value
+        * @throws \InvalidArgumentException if the identifier is not valid
         * @author Robert Lemke <robert@typo3.org>
-        * @throws t3lib_cache_exception_ClassAlreadyLoaded if the class already exists
+        * @api
         */
        public function get($entryIdentifier) {
                if (!$this->isValidEntryIdentifier($entryIdentifier)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                '"' . $entryIdentifier . '" is not a valid cache entry identifier.',
                                1233058294
                        );
                }
 
-               return ($this->useIgBinary === TRUE) ? igbinary_unserialize($this->backend->get($entryIdentifier)) : unserialize($this->backend->get($entryIdentifier));
+               $rawResult = $this->backend->get($entryIdentifier);
+               if ($rawResult === FALSE) {
+                       return FALSE;
+               } else {
+                       return ($this->useIgBinary === TRUE) ? igbinary_unserialize($rawResult) : unserialize($rawResult);
+               }
        }
 
        /**
@@ -125,11 +120,13 @@ class t3lib_cache_frontend_VariableFrontend extends t3lib_cache_frontend_Abstrac
         *
         * @param string $tag The tag to search for
         * @return array An array with the content of all matching entries. An empty array if no entries matched
+        * @throws \InvalidArgumentException if the tag is not valid
         * @author Karsten Dambekalns <karsten@typo3.org>
+        * @api
         */
        public function getByTag($tag) {
                if (!$this->isValidTag($tag)) {
-                       throw new InvalidArgumentException(
+                       throw new \InvalidArgumentException(
                                '"' . $tag . '" is not a valid tag for a cache entry.',
                                1233058312
                        );
@@ -137,11 +134,12 @@ class t3lib_cache_frontend_VariableFrontend extends t3lib_cache_frontend_Abstrac
 
                $entries = array();
                $identifiers = $this->backend->findIdentifiersByTag($tag);
-
                foreach ($identifiers as $identifier) {
-                       $entries[] = ($this->useIgBinary === TRUE) ? igbinary_unserialize($this->backend->get($identifier)) : unserialize($this->backend->get($identifier));
+                       $rawResult = $this->backend->get($identifier);
+                       if ($rawResult !== FALSE) {
+                               $entries[] = ($this->useIgBinary === TRUE) ? igbinary_unserialize($rawResult) : unserialize($rawResult);
+                       }
                }
-
                return $entries;
        }
 
index 76ca9ca..b07c5cf 100644 (file)
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
- * interface for a Cache Frontend
+ * Contract for a Cache (frontend)
  *
- * @author     Ingo Renner <ingo@typo3.org>
+ * @author Ingo Renner <ingo@typo3.org>
  * @package TYPO3
- * @api
  * @subpackage t3lib_cache
+ * @api
  */
 interface t3lib_cache_frontend_Frontend {
 
@@ -42,6 +41,11 @@ interface t3lib_cache_frontend_Frontend {
        const TAG_CLASS = '%CLASS%';
 
        /**
+        * "Magic" tag for package-related entries
+        */
+       const TAG_PACKAGE = '%PACKAGE%';
+
+       /**
         * Pattern an entry identifer must match.
         */
        const PATTERN_ENTRYIDENTIFIER = '/^[a-zA-Z0-9_%\-&]{1,250}$/';
@@ -55,6 +59,7 @@ interface t3lib_cache_frontend_Frontend {
         * Returns this cache's identifier
         *
         * @return string The identifier for this cache
+        * @api
         */
        public function getIdentifier();
 
@@ -68,75 +73,81 @@ interface t3lib_cache_frontend_Frontend {
        /**
         * Saves data in the cache.
         *
-        * @param       string  Something which identifies the data - depends on concrete cache
-        * @param       mixed   The data to cache - also depends on the concrete cache implementation
-        * @param       array   Tags to associate with this cache entry
-        * @param       integer Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
-        * @return      void
+        * @param string $entryIdentifier Something which identifies the data - depends on concrete cache
+        * @param mixed $data The data to cache - also depends on the concrete cache implementation
+        * @param array $tags Tags to associate with this cache entry
+        * @param integer $lifetime Lifetime of this cache entry in seconds. If NULL is specified, the default lifetime is used. "0" means unlimited liftime.
+        * @return void
+        * @api
         */
-       public function set($entryIdentifier, $data, $tags = array(), $lifetime = NULL);
+       public function set($entryIdentifier, $data, array $tags = array(), $lifetime = NULL);
 
        /**
         * Finds and returns data from the cache.
         *
-        * @param       string  Something which identifies the cache entry - depends on concrete cache
-        * @return      mixed
+        * @param string $entryIdentifier Something which identifies the cache entry - depends on concrete cache
+        * @return mixed
+        * @api
         */
        public function get($entryIdentifier);
 
        /**
         * Finds and returns all cache entries which are tagged by the specified tag.
         *
-        * @param       string  The tag to search for
-        * @return      array   An array with the content of all matching entries. An empty array if no entries matched
+        * @param string $tag The tag to search for
+        * @return array An array with the content of all matching entries. An empty array if no entries matched
+        * @api
         */
        public function getByTag($tag);
 
        /**
         * Checks if a cache entry with the specified identifier exists.
         *
-        * @param       string  An identifier specifying the cache entry
-        * @return      boolean TRUE if such an entry exists, FALSE if not
+        * @param string $entryIdentifier An identifier specifying the cache entry
+        * @return boolean TRUE if such an entry exists, FALSE if not
+        * @api
         */
        public function has($entryIdentifier);
 
        /**
         * Removes the given cache entry from the cache.
         *
-        * @param       string  An identifier specifying the cache entry
-        * @return      boolean TRUE if such an entry exists, FALSE if not
-        * @internal
+        * @param string $entryIdentifier An identifier specifying the cache entry
+        * @return boolean TRUE if such an entry exists, FALSE if not
         */
        public function remove($entryIdentifier);
 
        /**
         * Removes all cache entries of this cache.
         *
-        * @return      void
+        * @return void
         */
        function flush();
 
        /**
         * Removes all cache entries of this cache which are tagged by the specified tag.
         *
-        * @param       string  The tag the entries must have
-        * @return      void
+        * @param string $tag The tag the entries must have
+        * @return void
+        * @api
         */
        public function flushByTag($tag);
 
        /**
         * Removes all cache entries of this cache which are tagged by the specified tag.
         *
-        * @param       array   Array of tags to search for and to remove the cache entries, the "*" wildcard is supported
-        * @return      void
+        * @param array $tags Array of tags to search for and to remove the cache entries, the "*" wildcard is supported
+        * @return void
         * @author Ingo Renner <ingo@typo3.org>
+        * @api
         */
        public function flushByTags(array $tags);
 
        /**
         * Does garbage collection
         *
-        * @return      void
+        * @return void
+        * @api
         */
        public function collectGarbage();
 
@@ -145,6 +156,7 @@ interface t3lib_cache_frontend_Frontend {
         *
         * @param string $identifier An identifier to be checked for validity
         * @return boolean
+        * @api
         */
        public function isValidEntryIdentifier($identifier);
 
@@ -153,6 +165,7 @@ interface t3lib_cache_frontend_Frontend {
         *
         * @param string $tag A tag to be checked for validity
         * @return boolean
+        * @api
         */
        public function isValidTag($tag);
 
index 52bc56d..f478137 100644 (file)
@@ -1 +1 @@
-d26e82f4de95e96f2e14b6531c8c24a2b05ccfe9
+a6b474f3072ee27f24cf925aba425a47650f3295
\ No newline at end of file
index ea3a7f2..b7f8101 100644 (file)
@@ -22,7 +22,6 @@
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-
 /**
  * A cache handling helper class
  *
@@ -31,6 +30,7 @@
  * @subpackage t3lib
  */
 class t3lib_cache {
+
        /**
         * @var boolean
         */
@@ -45,8 +45,7 @@ class t3lib_cache {
        public static function initializeCachingFramework() {
                if (!self::isCachingFrameworkInitialized()) {
                        $GLOBALS['typo3CacheManager'] = t3lib_div::makeInstance('t3lib_cache_Manager');
-                       $GLOBALS['typo3CacheFactory'] = t3lib_div::makeInstance('t3lib_cache_Factory');
-                       $GLOBALS['typo3CacheFactory']->setCacheManager($GLOBALS['typo3CacheManager']);
+                       $GLOBALS['typo3CacheFactory'] = t3lib_div::makeInstance('t3lib_cache_Factory', 'production', $GLOBALS['typo3CacheManager']);
                        self::$isCachingFrameworkInitialized = TRUE;
                }
        }
index a3286ab..fde82ed 100644 (file)
@@ -45,7 +45,7 @@ class t3lib_cache_backend_AbstractBackendTest extends tx_phpunit_testcase {
         * @author Ingo Renner <ingo@typo3.org>
         */
        public function setUp() {
-               $className = uniqid('ConcreteBackend_');
+               $className = 'ConcreteBackend_' . md5(uniqid(mt_rand(), TRUE));
                eval('
                        class ' . $className. ' extends t3lib_cache_backend_AbstractBackend {
                                public function set($entryIdentifier, $data, array $tags = array(), $lifetime = NULL) {}
@@ -66,7 +66,7 @@ class t3lib_cache_backend_AbstractBackendTest extends tx_phpunit_testcase {
                                }
                        }
                ');
-               $this->backend = new $className();
+               $this->backend = new $className('Testing');
        }
 
        /**
@@ -75,7 +75,7 @@ class t3lib_cache_backend_AbstractBackendTest extends tx_phpunit_testcase {
         */
        public function theConstructorCallsSetterMethodsForAllSpecifiedOptions() {
                $className = get_class($this->backend);
-               $backend = new $className(array('someOption' => 'someValue'));
+               $backend = new $className('Testing', array('someOption' => 'someValue'));
                $this->assertSame('someValue', $backend->getSomeOption());
        }
 }
index 0ad26b1..4a2d352 100644 (file)
@@ -57,9 +57,9 @@ class t3lib_cache_backend_ApcBackendTest extends tx_phpunit_testcase {
         * @expectedException t3lib_cache_Exception
         */
        public function setThrowsExceptionIfNoFrontEndHasBeenSet() {
-               $backend = new t3lib_cache_backend_ApcBackend();
+               $backend = new t3lib_cache_backend_ApcBackend('Testing');
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data);
        }
 
@@ -70,7 +70,7 @@ class t3lib_cache_backend_ApcBackendTest extends tx_phpunit_testcase {
        public function itIsPossibleToSetAndCheckExistenceInCache() {
                $backend = $this->setUpBackend();
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data);
                $inCache = $backend->has($identifier);
                $this->assertTrue($inCache, 'APC backend failed to set and check entry');
@@ -83,7 +83,7 @@ class t3lib_cache_backend_ApcBackendTest extends tx_phpunit_testcase {
        public function itIsPossibleToSetAndGetEntry() {
                $backend = $this->setUpBackend();
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data);
                $fetchedData = $backend->get($identifier);
                $this->assertEquals($data, $fetchedData, 'APC backend failed to set and retrieve data');
@@ -96,7 +96,7 @@ class t3lib_cache_backend_ApcBackendTest extends tx_phpunit_testcase {
        public function itIsPossibleToRemoveEntryFromCache() {
                $backend = $this->setUpBackend();
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data);
                $backend->remove($identifier);
                $inCache = $backend->has($identifier);
@@ -110,7 +110,7 @@ class t3lib_cache_backend_ApcBackendTest extends tx_phpunit_testcase {
        public function itIsPossibleToOverwriteAnEntryInTheCache() {
                $backend = $this->setUpBackend();
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data);
                $otherData = 'some other data';
                $backend->set($identifier, $otherData);
@@ -126,7 +126,7 @@ class t3lib_cache_backend_ApcBackendTest extends tx_phpunit_testcase {
                $backend = $this->setUpBackend();
 
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data, array('UnitTestTag%tag1', 'UnitTestTag%tag2'));
 
                $retrieved = $backend->findIdentifiersByTag('UnitTestTag%tag1');
@@ -144,7 +144,7 @@ class t3lib_cache_backend_ApcBackendTest extends tx_phpunit_testcase {
                $backend = $this->setUpBackend();
 
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data, array('UnitTestTag%tag1', 'UnitTestTag%tagX'));
                $backend->set($identifier, $data, array('UnitTestTag%tag3'));
 
@@ -158,7 +158,7 @@ class t3lib_cache_backend_ApcBackendTest extends tx_phpunit_testcase {
         */
        public function hasReturnsFalseIfTheEntryDoesntExist() {
                $backend = $this->setUpBackend();
-               $identifier = uniqid('NonExistingIdentifier');
+               $identifier = 'NonExistingIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $inCache = $backend->has($identifier);
                $this->assertFalse($inCache,'"has" did not return FALSE when checking on non existing identifier');
        }
@@ -169,7 +169,7 @@ class t3lib_cache_backend_ApcBackendTest extends tx_phpunit_testcase {
         */
        public function removeReturnsFalseIfTheEntryDoesntExist() {
                $backend = $this->setUpBackend();
-               $identifier = uniqid('NonExistingIdentifier');
+               $identifier = 'NonExistingIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $inCache = $backend->remove($identifier);
                $this->assertFalse($inCache,'"remove" did not return FALSE when checking on non existing identifier');
        }
@@ -221,12 +221,12 @@ class t3lib_cache_backend_ApcBackendTest extends tx_phpunit_testcase {
        public function flushRemovesOnlyOwnEntries() {
                $thisCache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
                $thisCache->expects($this->any())->method('getIdentifier')->will($this->returnValue('thisCache'));
-               $thisBackend = new t3lib_cache_backend_ApcBackend();
+               $thisBackend = new t3lib_cache_backend_ApcBackend('Testing');
                $thisBackend->setCache($thisCache);
 
                $thatCache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
                $thatCache->expects($this->any())->method('getIdentifier')->will($this->returnValue('thatCache'));
-               $thatBackend = new t3lib_cache_backend_ApcBackend();
+               $thatBackend = new t3lib_cache_backend_ApcBackend('Testing');
                $thatBackend->setCache($thatCache);
 
                $thisBackend->set('thisEntry', 'Hello');
@@ -247,7 +247,7 @@ class t3lib_cache_backend_ApcBackendTest extends tx_phpunit_testcase {
                $backend = $this->setUpBackend();
 
                $data = str_repeat('abcde', 1024 * 1024);
-               $identifier = uniqid('tooLargeData');
+               $identifier = 'tooLargeData' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data);
 
                $this->assertTrue($backend->has($identifier));
@@ -257,14 +257,13 @@ class t3lib_cache_backend_ApcBackendTest extends tx_phpunit_testcase {
        /**
         * Sets up the APC backend used for testing
         *
-        * @param array $backendOptions Options for the APC backend
         * @return t3lib_cache_backend_ApcBackend
         * @author Karsten Dambekalns <karsten@typo3.org>
         * @author Ingo Renner <ingo@typo3.org>
         */
        protected function setUpBackend() {
                $cache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
-               $backend = new t3lib_cache_backend_ApcBackend();
+               $backend = new t3lib_cache_backend_ApcBackend('Testing');
                $backend->setCache($cache);
 
                return $backend;
index 3551082..b1bb86a 100644 (file)
@@ -86,6 +86,7 @@ class t3lib_cache_backend_DbBackendTest extends tx_phpunit_testcase {
 
                $this->backend = t3lib_div::makeInstance(
                        't3lib_cache_backend_DbBackend',
+                       'Testing',
                        $backendOptions
                );
        }
index a9047c3..995a98c 100644 (file)
  * @subpackage tests
  */
 class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
-       /**
-        * Backup of global variable EXEC_TIME
-        *
-        * @var array
-        */
-       protected $backupGlobalVariables;
 
        /**
-        * If set, the tearDown() method will clean up the cache subdirectory used by this unit test.
+        * Enable backup of global and system variables
         *
-        * @var t3lib_cache_backend_FileBackend
+        * @var boolean
         */
-       protected $backend;
+       protected $backupGlobals = TRUE;
 
        /**
-        * @var string Directory for testing data, relative to PATH_site
+        * Exclude TYPO3_DB from backup/ restore of $GLOBALS
+        * because resource types cannot be handled during serialization
+        *
+        * @var array
         */
-       protected $testingCacheDirectory;
+       protected $backupGlobalsBlacklist = array('TYPO3_DB');
 
        /**
         * Sets up this testcase
@@ -58,63 +55,57 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
         * @return void
         */
        public function setUp() {
-               $this->backupGlobalVariables = array(
-                       'EXEC_TIME' => $GLOBALS['EXEC_TIME'],
-               );
-
-               $this->testingCacheDirectory = 'typo3temp/cache/testing/';
+               if (!class_exists('\vfsStreamWrapper')) {
+                       $this->markTestSkipped('File backend tests are not available with this phpunit version.');
+               }
 
-               $this->backend = t3lib_div::makeInstance(
-                       't3lib_cache_backend_FileBackend',
-                       array('cacheDirectory' => $this->testingCacheDirectory)
-               );
+               \vfsStreamWrapper::register();
+               \vfsStreamWrapper::setRoot(new \vfsStreamDirectory('Foo'));
        }
 
        /**
         * @test
         * @author Robert Lemke <robert@typo3.org>
-        * @author Ingo Renner <ingo@typo3.org>
+        * @expectedException \t3lib_cache_Exception
         */
-       public function defaultCacheDirectoryIsWritable() {
-               $cacheDirectory = $this->backend->getCacheDirectory();
+       public function setCacheDirectoryThrowsExceptionOnNonWritableDirectory() {
+               $mockCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
+
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('http://localhost/');
 
-               $this->assertTrue(is_writable($cacheDirectory), 'The default cache directory "' . $cacheDirectory . '" is not writable.');
+               $backend->setCache($mockCache);
        }
 
        /**
         * @test
         * @author Robert Lemke <robert@typo3.org>
+        * @author Ingo Renner <ingo@typo3.org>
         */
-       public function setCacheDirectoryThrowsExceptionOnNonWritableDirectory() {
-               if (TYPO3_OS == 'WIN') {
-                       $this->markTestSkipped('test not reliable in Windows environment');
-               }
+       public function getCacheDirectoryReturnsTheCurrentCacheDirectory() {
+               $mockCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
+               $mockCache->expects($this->any())->method('getIdentifier')->will($this->returnValue('SomeCache'));
 
-                       // Create test directory and remove write permissions
-               $directoryName = PATH_site . 'typo3temp/' . uniqid('test_');
-               t3lib_div::mkdir($directoryName);
-               chmod($directoryName, 1551);
-
-               try {
-                       $this->backend->setCacheDirectory($directoryName);
-                       $this->fail('setCacheDirectory did not throw an exception on a non writable directory');
-               } catch (t3lib_cache_Exception $e) {
-                               // Remove created test directory
-                       t3lib_div::rmdir($directoryName);
-               }
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
+
+               $this->assertEquals('vfs://Foo/Cache/Data/SomeCache/', $backend->getCacheDirectory());
        }
 
        /**
         * @test
         * @author Robert Lemke <robert@typo3.org>
-        * @author Ingo Renner <ingo@typo3.org>
         */
-       public function getCacheDirectoryReturnsTheCurrentCacheDirectory() {
-               $directory = $this->testingCacheDirectory;
-               $fullPathToDirectory = PATH_site . $directory;
+       public function aDedicatedCacheDirectoryIsUsedForCodeCaches() {
+               $mockCache = $this->getMock('t3lib_cache_frontend_PhpFrontend', array(), array(), '', FALSE);
+               $mockCache->expects($this->any())->method('getIdentifier')->will($this->returnValue('SomeCache'));
 
-               $this->backend->setCacheDirectory($directory);
-               $this->assertEquals($fullPathToDirectory, $this->backend->getCacheDirectory(), 'getCacheDirectory() did not return the expected value.');
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
+
+               $this->assertEquals('vfs://Foo/Cache/Code/SomeCache/', $backend->getCacheDirectory());
        }
 
        /**
@@ -125,13 +116,12 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
         */
        public function setThrowsExceptionIfDataIsNotAString() {
                $mockCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
-               $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
-               $this->backend->setCache($mockCache);
-               $data = array('Some data');
-               $entryIdentifier = 'BackendFileTest';
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
 
-               $this->backend->set($entryIdentifier, $data);
+               $backend->set('some identifier', array('not a string'));
        }
 
        /**
@@ -145,10 +135,13 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
 
                $data = 'some data' . microtime();
                $entryIdentifier = 'BackendFileTest';
-               $this->backend->setCache($mockCache);
-               $pathAndFilename = $this->backend->getCacheDirectory() . $entryIdentifier;
+               $pathAndFilename = 'vfs://Foo/Cache/Data/UnitTestCache/' . $entryIdentifier;
+
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
 
-               $this->backend->set($entryIdentifier, $data, array(), 10);
+               $backend->set($entryIdentifier, $data);
 
                $this->assertFileExists($pathAndFilename);
                $retrievedData = file_get_contents($pathAndFilename, NULL, NULL, 0, strlen($data));
@@ -168,14 +161,14 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
                $data2 = 'some data' . microtime();
                $entryIdentifier = 'BackendFileRemoveBeforeSetTest';
 
-               $this->backend->setCache($mockCache);
-               $this->backend->set($entryIdentifier, $data1, array(), 500);
-                       // Setting a second entry with the same identifier, but different
-                       // data, this should _replace_ the existing one we set before
-               $this->backend->set($entryIdentifier, $data2, array(), 200);
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
 
-               $pathAndFilename = $this->backend->getCacheDirectory() . $entryIdentifier;
+               $backend->set($entryIdentifier, $data1, array(), 500);
+               $backend->set($entryIdentifier, $data2, array(), 200);
 
+               $pathAndFilename = 'vfs://Foo/Cache/Data/UnitTestCache/' . $entryIdentifier;
                $this->assertFileExists($pathAndFilename);
                $retrievedData = file_get_contents($pathAndFilename, NULL, NULL, 0, strlen($data2));
                $this->assertEquals($data2, $retrievedData);
@@ -191,12 +184,15 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
                $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
                $data = 'some data' . microtime();
-               $entryIdentifier = 'BackendFileTest';
+               $entryIdentifier = 'BackendFileRemoveBeforeSetTest';
 
-               $this->backend->setCache($mockCache);
-               $this->backend->set($entryIdentifier, $data, array('Tag1', 'Tag2'));
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
 
-               $pathAndFilename = $this->backend->getCacheDirectory() . $entryIdentifier;
+               $backend->set($entryIdentifier, $data, array('Tag1', 'Tag2'));
+
+               $pathAndFilename = 'vfs://Foo/Cache/Data/UnitTestCache/' . $entryIdentifier;
                $this->assertFileExists($pathAndFilename);
                $retrievedData = file_get_contents($pathAndFilename, NULL, NULL, (strlen($data) + t3lib_cache_backend_FileBackend::EXPIRYTIME_LENGTH), 9);
                $this->assertEquals('Tag1 Tag2', $retrievedData);
@@ -205,27 +201,25 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
        /**
         * @test
         * @author Robert Lemke <robert@typo3.org>
-        * @author Karsten Dambekalns <karsten@typo3.org>
-        * @author Ingo Renner <ingo@typo3.org>
         */
-       public function setWithUnlimitedLifetimeWritesCorrectEntry() {
+       public function getReturnsContentOfTheCorrectCacheFile() {
                $mockCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
                $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
-               $data = 'some data' . microtime();
-               $entryIdentifier = 'BackendFileTest';
-
-               $this->backend->setCache($mockCache);
-               $pathAndFilename = $this->backend->getCacheDirectory() . $entryIdentifier;
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('setTag'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
 
-               $this->backend->set($entryIdentifier, $data, array(), 0);
+               $entryIdentifier = 'BackendFileTest';
 
-               $this->assertFileExists($pathAndFilename);
+               $data = 'some data' . microtime();
+               $backend->set($entryIdentifier, $data, array(), 500);
 
-               $dataSize = (integer)file_get_contents($pathAndFilename, NULL, NULL, filesize($pathAndFilename) - t3lib_cache_backend_FileBackend::DATASIZE_DIGITS, t3lib_cache_backend_FileBackend::DATASIZE_DIGITS);
-               $retrievedData = file_get_contents($pathAndFilename, NULL, NULL, 0, $dataSize);
+               $data = 'some other data' . microtime();
+               $backend->set($entryIdentifier, $data, array(), 100);
 
-               $this->assertEquals($data, $retrievedData, 'The original and the retrieved data don\'t match.');
+               $loadedData = $backend->get($entryIdentifier);
+               $this->assertEquals($data, $loadedData);
        }
 
        /**
@@ -237,8 +231,8 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
                $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
                $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('isCacheFileExpired'), array(), '', FALSE);
-               $fullPathToCacheFile = PATH_site . 'typo3temp/cache/UnitTestCache/ExpiredEntry';
-               $backend->expects($this->once())->method('isCacheFileExpired')->with($fullPathToCacheFile)->will($this->returnValue(TRUE));
+               $backend->expects($this->once())->method('isCacheFileExpired')->with('vfs://Foo/Cache/Data/UnitTestCache/ExpiredEntry')->will($this->returnValue(TRUE));
+               $backend->setCacheDirectory('vfs://Foo/');
                $backend->setCache($mockCache);
 
                $this->assertFalse($backend->get('ExpiredEntry'));
@@ -253,14 +247,17 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
                $mockCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
                $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
-               $this->backend->setCache($mockCache);
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
 
                $entryIdentifier = 'BackendFileTest';
+
                $data = 'some data' . microtime();
-               $this->backend->set($entryIdentifier, $data);
+               $backend->set($entryIdentifier, $data);
 
-               $this->assertTrue($this->backend->has($entryIdentifier), 'has() did not return TRUE.');
-               $this->assertFalse($this->backend->has($entryIdentifier . 'Not'), 'has() did not return FALSE.');
+               $this->assertTrue($backend->has($entryIdentifier), 'has() did not return TRUE.');
+               $this->assertFalse($backend->has($entryIdentifier . 'Not'), 'has() did not return FALSE.');
        }
 
        /**
@@ -286,13 +283,16 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
 
                $data = 'some data' . microtime();
                $entryIdentifier = 'BackendFileTest';
+               $pathAndFilename = 'vfs://Foo/Cache/Data/UnitTestCache/' . $entryIdentifier;
 
-               $this->backend->setCache($mockCache);
-               $pathAndFilename = $this->backend->getCacheDirectory() . $entryIdentifier;
-               $this->backend->set($entryIdentifier, $data);
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
 
+               $backend->set($entryIdentifier, $data);
                $this->assertFileExists($pathAndFilename);
-               $this->backend->remove($entryIdentifier);
+
+               $backend->remove($entryIdentifier);
                $this->assertFileNotExists($pathAndFilename);
        }
 
@@ -327,6 +327,7 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
                $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
                $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', TRUE);
+               $backend->setCacheDirectory('vfs://Foo/');
                $backend->setCache($mockCache);
 
                $backend->set($identifier, 'cache data', array());
@@ -343,6 +344,7 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
                $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
                $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
                $backend->setCache($mockCache);
 
                $backend->get($identifier);
@@ -371,6 +373,7 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
                $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
                $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
                $backend->setCache($mockCache);
 
                $backend->remove($identifier);
@@ -387,6 +390,7 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
                $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
                $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
                $backend->setCache($mockCache);
 
                $backend->requireOnce($identifier);
@@ -395,61 +399,47 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
        /**
         * @test
         * @author Robert Lemke <robert@typo3.org>
-        * @author Karsten Dambekalns <karsten@typo3.org>
         * @author Ingo Renner <ingo@typo3.org>
         */
-       public function collectGarbageReallyRemovesAnExpiredCacheEntry() {
+       public function findIdentifiersByTagFindsCacheEntriesWithSpecifiedTag() {
                $mockCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
                $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
-               $data = 'some data' . microtime();
-               $entryIdentifier = 'BackendFileRemovalTest';
-
-               $this->backend->setCache($mockCache);
-               $pathAndFilename = $this->backend->getCacheDirectory() . $entryIdentifier;
-               $this->backend->set($entryIdentifier, $data, array(), 1);
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
 
-               $this->assertFileExists($pathAndFilename);
+               $data = 'some data' . microtime();
+               $backend->set('BackendFileTest1', $data, array('UnitTestTag%test', 'UnitTestTag%boring'));
+               $backend->set('BackendFileTest2', $data, array('UnitTestTag%test', 'UnitTestTag%special'));
+               $backend->set('BackendFileTest3', $data, array('UnitTestTag%test'));
 
-               $GLOBALS['EXEC_TIME'] += 2;
-               $this->backend->collectGarbage();
+               $expectedEntry = 'BackendFileTest2';
 
-               $this->assertFileNotExists($pathAndFilename);
+               $actualEntries = $backend->findIdentifiersByTag('UnitTestTag%special');
+               $this->assertInternalType('array', $actualEntries);
+               $this->assertEquals($expectedEntry, array_pop($actualEntries));
        }
 
        /**
         * @test
-        * @author Robert Lemke <robert@typo3.org>
-        * @author Karsten Dambekalns <karsten@typo3.org>
         * @author Ingo Renner <ingo@typo3.org>
         */
-       public function collectGarbageReallyRemovesAllExpiredCacheEntries() {
+       public function findIdentifiersByTagDoesNotReturnExpiredEntries() {
                $mockCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
                $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
-               $data = 'some data' . microtime();
-               $entryIdentifier = 'BackendFileRemovalTest';
-
-               $this->backend->setCache($mockCache);
-               $pathAndFilename = $this->backend->getCacheDirectory() . $entryIdentifier;
-
-               $this->backend->set($entryIdentifier . 'A', $data, array(), NULL);
-               $this->backend->set($entryIdentifier . 'B', $data, array(), 10);
-               $this->backend->set($entryIdentifier . 'C', $data, array(), 1);
-               $this->backend->set($entryIdentifier . 'D', $data, array(), 1);
-
-               $this->assertFileExists($pathAndFilename . 'A');
-               $this->assertFileExists($pathAndFilename . 'B');
-               $this->assertFileExists($pathAndFilename . 'C');
-               $this->assertFileExists($pathAndFilename . 'D');
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
 
-               $GLOBALS['EXEC_TIME'] += 2;
-               $this->backend->collectGarbage();
+               $data = 'some data';
+               $backend->set('BackendFileTest1', $data, array('UnitTestTag%test', 'UnitTestTag%boring'));
+               $backend->set('BackendFileTest2', $data, array('UnitTestTag%test', 'UnitTestTag%special'), -100);
+               $backend->set('BackendFileTest3', $data, array('UnitTestTag%test'));
 
-               $this->assertFileExists($pathAndFilename . 'A');
-               $this->assertFileExists($pathAndFilename . 'B');
-               $this->assertFileNotExists($pathAndFilename . 'C');
-               $this->assertFileNotExists($pathAndFilename . 'D');
+               $this->assertSame(array(), $backend->findIdentifiersByTag('UnitTestTag%special'));
+               $this->assertSame(array('BackendFileTest1', 'BackendFileTest3'), $backend->findIdentifiersByTag('UnitTestTag%test'));
        }
 
        /**
@@ -457,44 +447,25 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
         * @author Robert Lemke <robert@typo3.org>
         * @author Ingo Renner <ingo@typo3.org>
         */
-       public function findIdentifiersByTagFindsCacheEntriesWithSpecifiedTag() {
+       public function flushRemovesAllCacheEntries() {
                $mockCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
                $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
-               $this->backend->setCache($mockCache);
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('dummy'), array(), '', FALSE);
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
 
-               $data = 'some data' . microtime();
-               $this->backend->set('BackendFileTest1', $data, array('UnitTestTag%test', 'UnitTestTag%boring'));
-               $this->backend->set('BackendFileTest2', $data, array('UnitTestTag%test', 'UnitTestTag%special'));
-               $this->backend->set('BackendFileTest3', $data, array('UnitTestTag%test'));
+               $data = 'some data';
+               $backend->set('BackendFileTest1', $data);
+               $backend->set('BackendFileTest2', $data);
 
-               $expectedEntry = 'BackendFileTest2';
+               $this->assertFileExists('vfs://Foo/Cache/Data/UnitTestCache/BackendFileTest1');
+               $this->assertFileExists('vfs://Foo/Cache/Data/UnitTestCache/BackendFileTest2');
 
-               $actualEntries = $this->backend->findIdentifiersByTag('UnitTestTag%special');
+               $backend->flush();
 
-               $this->assertTrue(is_array($actualEntries), 'actualEntries is not an array.');
-               $this->assertEquals($expectedEntry, array_pop($actualEntries));
-       }
-
-       /**
-        * @test
-        * @author Ingo Renner <ingo@typo3.org>
-        */
-       public function findIdentifiersByTagDoesNotReturnExpiredEntries() {
-               $mockCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
-               $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
-
-               $this->backend->setCache($mockCache);
-
-               $data = 'some data';
-               $this->backend->set('BackendFileTest1', $data, array('UnitTestTag%test', 'UnitTestTag%boring'));
-               $this->backend->set('BackendFileTest2', $data, array('UnitTestTag%test', 'UnitTestTag%special'), -100);
-               $this->backend->set('BackendFileTest3', $data, array('UnitTestTag%test'));
-
-               $this->assertSame(array(), $this->backend->findIdentifiersByTag('UnitTestTag%special'));
-               $foundIdentifiers = $this->backend->findIdentifiersByTag('UnitTestTag%test');
-               sort($foundIdentifiers);
-               $this->assertSame(array('BackendFileTest1', 'BackendFileTest3'), $foundIdentifiers);
+               $this->assertFileNotExists('vfs://Foo/Cache/Data/UnitTestCache/BackendFileTest1');
+               $this->assertFileNotExists('vfs://Foo/Cache/Data/UnitTestCache/BackendFileTest2');
        }
 
        /**
@@ -502,62 +473,40 @@ class t3lib_cache_backend_FileBackendTest extends tx_phpunit_testcase {
         * @author Robert Lemke <robert@typo3.org>
         * @author Ingo Renner <ingo@typo3.org>
         */
-       public function flushRemovesAllCacheEntries() {
-               $mockCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
-               $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
-
-               $this->backend->setCache($mockCache);
-
-               $data = 'some data' . microtime();
-               $this->backend->set('BackendFileTest1', $data, array('UnitTestTag%test'));
-               $this->backend->set('BackendFileTest2', $data, array('UnitTestTag%test', 'UnitTestTag%special'));
-               $this->backend->set('BackendFileTest3', $data, array('UnitTestTag%test'));
+       public function flushByTagRemovesCacheEntriesWithSpecifiedTag() {
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('findIdentifiersByTag', 'remove'), array(), '', FALSE);
 
-               $this->backend->flush();
+               $backend->expects($this->once())->method('findIdentifiersByTag')->with('UnitTestTag%special')->will($this->returnValue(array('foo', 'bar', 'baz')));
+               $backend->expects($this->at(1))->method('remove')->with('foo');
+               $backend->expects($this->at(2))->method('remove')->with('bar');
+               $backend->expects($this->at(3))->method('remove')->with('baz');
 
-               $pattern = $this->backend->getCacheDirectory() . '*';
-               $filesFound = is_array(glob($pattern)) ? glob($pattern) : array();
-               $this->assertTrue(count($filesFound) === 0, 'Still files in the cache directory');
+               $backend->flushByTag('UnitTestTag%special');
        }
 
        /**
         * @test
-        * @author Robert Lemke <robert@typo3.org>
-        * @author Ingo Renner <ingo@typo3.org>
+        * @author Christian Kuhn <lolli@schwarzbu.ch>
         */
-       public function flushByTagRemovesCacheEntriesWithSpecifiedTag() {
+       public function collectGarbageRemovesExpiredCacheEntries() {
                $mockCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
                $mockCache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('UnitTestCache'));
 
-               $this->backend->setCache($mockCache);
+               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array('isCacheFileExpired'), array(), '', FALSE);
+               $backend->expects($this->exactly(2))->method('isCacheFileExpired')->will($this->onConsecutiveCalls(TRUE, FALSE));
+               $backend->setCacheDirectory('vfs://Foo/');
+               $backend->setCache($mockCache);
 
-               $data = 'some data' . microtime();
-               $this->backend->set('BackendFileTest1', $data, array('UnitTestTag%test', 'UnitTestTag%boring'));
-               $this->backend->set('BackendFileTest2', $data, array('UnitTestTag%test', 'UnitTestTag%special'));
-               $this->backend->set('BackendFileTest3', $data, array('UnitTestTag%test'));
+               $data = 'some data';
+               $backend->set('BackendFileTest1', $data);
+               $backend->set('BackendFileTest2', $data);
 
-               $this->backend->flushByTag('UnitTestTag%special');
+               $this->assertFileExists('vfs://Foo/Cache/Data/UnitTestCache/BackendFileTest1');
+               $this->assertFileExists('vfs://Foo/Cache/Data/UnitTestCache/BackendFileTest2');
 
-               $this->assertTrue($this->backend->has('BackendFileTest1'), 'BackendFileTest1');
-               $this->assertFalse($this->backend->has('BackendFileTest2'), 'BackendFileTest2');
-               $this->assertTrue($this->backend->has('BackendFileTest3'), 'BackendFileTest3');
-       }
-
-       /**
-        * @author Robert Lemke <robert@typo3.org>
-        * @author Ingo Renner <ingo@typo3.org>
-        */
-       public function tearDown() {
-               if (is_object($this->backend)) {
-                       $directory = $this->backend->getCacheDirectory();
-                       if (is_dir($directory)) {
-                               t3lib_div::rmdir($directory, TRUE);
-                       }
-               }
-               foreach ($this->backupGlobalVariables as $key => $data) {
-                       $GLOBALS[$key] = $data;
-               }
+               $backend->collectGarbage();
+               $this->assertFileNotExists('vfs://Foo/Cache/Data/UnitTestCache/BackendFileTest1');
+               $this->assertFileExists('vfs://Foo/Cache/Data/UnitTestCache/BackendFileTest2');
        }
 }
-
 ?>
\ No newline at end of file
index 29f22e1..55eecc7 100644 (file)
@@ -27,7 +27,7 @@
  *
  * This file is a backport from FLOW3
  *
- * @author     Ingo Renner <ingo@typo3.org>
+ * @author Ingo Renner <ingo@typo3.org>
  * @package TYPO3
  * @subpackage tests
  */
@@ -49,7 +49,7 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
                        if (!fsockopen('localhost', 11211)) {
                                $this->markTestSkipped('memcached not reachable');
                        }
-               } catch (Exception $e) {
+               } catch (\Exception $e) {
                        $this->markTestSkipped('memcached not reachable');
                }
        }
@@ -62,10 +62,10 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
         */
        public function setThrowsExceptionIfNoFrontEndHasBeenSet() {
                $backendOptions = array('servers' => array('localhost:11211'));
-               $backend = new t3lib_cache_backend_MemcachedBackend($backendOptions);
-
+               $backend = new t3lib_cache_backend_MemcachedBackend('Testing', $backendOptions);
+               $backend->initializeObject();
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data);
        }
 
@@ -75,8 +75,9 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
         * @author Ingo Renner <ingo@typo3.org>
         * @expectedException t3lib_cache_Exception
         */
-       public function constructorThrowsExceptionIfNoMemcacheServerIsConfigured() {
-               $backend = new t3lib_cache_backend_MemcachedBackend();
+       public function initializeObjectThrowsExceptionIfNoMemcacheServerIsConfigured() {
+               $backend = new t3lib_cache_backend_MemcachedBackend('Testing');
+               $backend->initializeObject();
        }
 
        /**
@@ -88,7 +89,7 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
        public function setThrowsExceptionIfConfiguredServersAreUnreachable() {
                $backend = $this->setUpBackend(array('servers' => array('julle.did.this:1234')));
                $data = 'Somedata';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data);
        }
 
@@ -99,7 +100,7 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
        public function itIsPossibleToSetAndCheckExistenceInCache() {
                $backend = $this->setUpBackend();
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data);
                $inCache = $backend->has($identifier);
                $this->assertTrue($inCache, 'Memcache failed to set and check entry');
@@ -112,7 +113,7 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
        public function itIsPossibleToSetAndGetEntry() {
                $backend = $this->setUpBackend();
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data);
                $fetchedData = $backend->get($identifier);
                $this->assertEquals($data, $fetchedData, 'Memcache failed to set and retrieve data');
@@ -125,7 +126,7 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
        public function itIsPossibleToRemoveEntryFromCache() {
                $backend = $this->setUpBackend();
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data);
                $backend->remove($identifier);
                $inCache = $backend->has($identifier);
@@ -139,7 +140,7 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
        public function itIsPossibleToOverwriteAnEntryInTheCache() {
                $backend = $this->setUpBackend();
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data);
                $otherData = 'some other data';
                $backend->set($identifier, $otherData);
@@ -155,7 +156,7 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
                $backend = $this->setUpBackend();
 
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data, array('UnitTestTag%tag1', 'UnitTestTag%tag2'));
 
                $retrieved = $backend->findIdentifiersByTag('UnitTestTag%tag1');
@@ -173,7 +174,7 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
                $backend = $this->setUpBackend();
 
                $data = 'Some data';
-               $identifier = uniqid('MyIdentifier');
+               $identifier = 'MyIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $backend->set($identifier, $data, array('UnitTestTag%tag1', 'UnitTestTag%tag2'));
                $backend->set($identifier, $data, array('UnitTestTag%tag3'));
 
@@ -187,7 +188,7 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
         */
        public function hasReturnsFalseIfTheEntryDoesntExist() {
                $backend = $this->setUpBackend();
-               $identifier = uniqid('NonExistingIdentifier');
+               $identifier = 'NonExistingIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $inCache = $backend->has($identifier);
                $this->assertFalse($inCache,'"has" did not return FALSE when checking on non existing identifier');
        }
@@ -198,7 +199,7 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
         */
        public function removeReturnsFalseIfTheEntryDoesntExist() {
                $backend = $this->setUpBackend();
-               $identifier = uniqid('NonExistingIdentifier');
+               $identifier = 'NonExistingIdentifier' . md5(uniqid(mt_rand(), TRUE));
                $inCache = $backend->remove($identifier);
                $this->assertFalse($inCache,'"remove" did not return FALSE when checking on non existing identifier');
        }
@@ -250,31 +251,17 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
        public function flushRemovesOnlyOwnEntries() {
                $backendOptions = array('servers' => array('localhost:11211'));
 
-               $thisCache = $this->getMock(
-                       't3lib_cache_frontend_AbstractFrontend',
-                       array(),
-                       array(),
-                       '',
-                       FALSE
-               );
-               $thisCache->expects($this->any())
-                       ->method('getIdentifier')
-                       ->will($this->returnValue('thisCache'));
-               $thisBackend = new t3lib_cache_backend_MemcachedBackend($backendOptions);
+               $thisCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
+               $thisCache->expects($this->any())->method('getIdentifier')->will($this->returnValue('thisCache'));
+               $thisBackend = new t3lib_cache_backend_MemcachedBackend('Testing', $backendOptions);
                $thisBackend->setCache($thisCache);
+               $thisBackend->initializeObject();
 
-               $thatCache = $this->getMock(
-                       't3lib_cache_frontend_AbstractFrontend',
-                       array(),
-                       array(),
-                       '',
-                       FALSE
-               );
-               $thatCache->expects($this->any())
-                       ->method('getIdentifier')
-                       ->will($this->returnValue('thatCache'));
-               $thatBackend = new t3lib_cache_backend_MemcachedBackend($backendOptions);
+               $thatCache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array(), array(), '', FALSE);
+               $thatCache->expects($this->any())->method('getIdentifier')->will($this->returnValue('thatCache'));
+               $thatBackend = new t3lib_cache_backend_MemcachedBackend('Testing', $backendOptions);
                $thatBackend->setCache($thatCache);
+               $thatBackend->initializeObject();
 
                $thisBackend->set('thisEntry', 'Hello');
                $thatBackend->set('thatEntry', 'World!');
@@ -304,7 +291,7 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
        /**
         * Sets up the memcached backend used for testing
         *
-        * @param       array   $backendOptions Options for the memcache backend
+        * @param array $backendOptions Options for the memcache backend
         * @return t3lib_cache_backend_MemcachedBackend
         * @author Christian Jul Jensen <julle@typo3.org>
         * @author Karsten Dambekalns <karsten@typo3.org>
@@ -312,13 +299,13 @@ class t3lib_cache_backend_MemcachedBackendTest extends tx_phpunit_testcase {
         */
        protected function setUpBackend(array $backendOptions = array()) {
                $cache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
-               if (empty($backendOptions)) {
+               if ($backendOptions == array()) {
                        $backendOptions = array('servers' => array('localhost:11211'));
                }
 
-               $backend = new t3lib_cache_backend_MemcachedBackend($backendOptions);
+               $backend = new t3lib_cache_backend_MemcachedBackend('Testing', $backendOptions);
                $backend->setCache($cache);
-
+               $backend->initializeObject();
                return $backend;
        }
 }
index d51b0c7..32e6e2e 100644 (file)
 /**
  * Testcase for the PDO cache backend
  *
- * @author     Christian Kuhn <lolli@schwarzbu.ch>
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
  * @package TYPO3
  * @subpackage tests
  */
 class t3lib_cache_backend_PdoBackendTest extends tx_phpunit_testcase {
 
        /**
-        * Backup of global variable EXEC_TIME
+        * Enable backup of global and system variables
+        *
+        * @var boolean
+        */
+       protected $backupGlobals = TRUE;
+
+       /**
+        * Exclude TYPO3_DB from backup/ restore of $GLOBALS
+        * because resource types cannot be handled during serializing
         *
         * @var array
         */
-       protected $backupGlobalVariables;
+       protected $backupGlobalsBlacklist = array('TYPO3_DB');
 
        /**
         * Sets up this testcase
@@ -47,10 +55,6 @@ class t3lib_cache_backend_PdoBackendTest extends tx_phpunit_testcase {
                if (!extension_loaded('pdo_sqlite')) {
                        $this->markTestSkipped('pdo_sqlite extension was not available');
                }
-
-               $this->backupGlobalVariables = array(
-                       'EXEC_TIME' => $GLOBALS['EXEC_TIME'],
-               );
        }
 
        /**
@@ -59,7 +63,7 @@ class t3lib_cache_backend_PdoBackendTest extends tx_phpunit_testcase {
         * @expectedException t3lib_cache_Exception
         */
        public function setThrowsExceptionIfNoFrontEndHasBeenSet() {
-               $backend = t3lib_div::makeInstance('t3lib_cache_backend_PdoBackend');
+               $backend = new t3lib_cache_backend_PdoBackend('Testing');
                $data = 'Some data';
                $identifier = 'MyIdentifier';
                $backend->set($identifier, $data);
@@ -337,28 +341,13 @@ class t3lib_cache_backend_PdoBackendTest extends tx_phpunit_testcase {
                $mockCache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
                $mockCache->expects($this->any())->method('getIdentifier')->will($this->returnValue('TestCache'));
 
-               $backendOptions = array(
-                       'dataSourceName' => 'sqlite::memory:',
-                       'username' => '',
-                       'password' => '',
-               );
-               $backend = t3lib_div::makeInstance('t3lib_cache_backend_PdoBackend', $backendOptions);
+               $backend = t3lib_div::makeInstance('t3lib_cache_backend_PdoBackend', 'Testing');
                $backend->setCache($mockCache);
+               $backend->setDataSourceName('sqlite::memory:');
+               $backend->initializeObject();
 
                return $backend;
        }
-
-       /**
-        * Clean up after the tests
-        *
-        * @return void
-        * @author Karsten Dambekalns <karsten@typo3.org>
-        */
-       public function tearDown() {
-               foreach ($this->backupGlobalVariables as $key => $data) {
-                       $GLOBALS[$key] = $data;
-               }
-       }
 }
 
 ?>
\ No newline at end of file
index 370d360..f20be62 100644 (file)
  * @subpackage tests
  */
 class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
+
+       /**
+        * Enable backup of global and system variables
+        *
+        * @var boolean
+        */
+       protected $backupGlobals = TRUE;
+
+       /**
+        * Exclude TYPO3_DB from backup/ restore of $GLOBALS
+        * because resource types cannot be handled during serializing
+        *
+        * @var array
+        */
+       protected $backupGlobalsBlacklist = array('TYPO3_DB');
+
        /**
         * If set, the tearDown() method will flush the cache used by this unit test.
         *
@@ -68,7 +84,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
                        if (!@fsockopen('127.0.0.1', 6379)) {
                                $this->markTestSkipped('redis server not reachable');
                        }
-               } catch (Exception $e) {
+               } catch (\Exception $e) {
                        $this->markTestSkipped('redis server not reachable');
                }
        }
@@ -76,15 +92,16 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * Sets up the redis backend used for testing
         *
-        * @param array Options for the redis backend
+        * @param array $backendOptions Options for the redis backend
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         */
        protected function setUpBackend(array $backendOptions = array()) {
                $mockCache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
                $mockCache->expects($this->any())->method('getIdentifier')->will($this->returnValue('TestCache'));
 
-               $this->backend = new t3lib_cache_backend_RedisBackend($backendOptions);
+               $this->backend = new t3lib_cache_backend_RedisBackend('Testing', $backendOptions);
                $this->backend->setCache($mockCache);
+               $this->backend->initializeObject();
        }
 
        /**
@@ -93,7 +110,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         */
        protected function setUpRedis() {
-               $this->redis = new Redis();
+               $this->redis = new \Redis();
                $this->redis->connect('127.0.0.1', 6379);
        }
 
@@ -106,30 +123,36 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
                if ($this->backend instanceof t3lib_cache_backend_RedisBackend) {
                        $this->backend->flush();
                }
-
-               unset($this->redis, $this->backend);
        }
 
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         */
-       public function constructorThrowsNoExceptionIfPasswordOptionIsSet() {
-               $this->setUpBackend(array('password' => 'foo'));
+       public function initializeObjectThrowsNoExceptionIfPasswordOptionIsSet() {
+               try {
+                       $this->setUpBackend(array('password' => 'foo'));
+               } catch (Exception $e) {
+                       $this->assertTrue();
+               }
        }
 
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
         */
-       public function constructorThrowsNoExceptionIfGivenDatabaseWasSuccessfullySelected() {
-               $this->setUpBackend(array('database' => 1));
+       public function initializeObjectThrowsNoExceptionIfGivenDatabaseWasSuccessfullySelected() {
+               try {
+                       $this->setUpBackend(array('database' => 1));
+               } catch (Exception $e) {
+                       $this->assertTrue();
+               }
        }
 
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function setDatabaseThrowsExceptionIfGivenDatabaseNumberIsNotAnInteger() {
                $this->setUpBackend(array('database' => 'foo'));
@@ -138,7 +161,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function setDatabaseThrowsExceptionIfGivenDatabaseNumberIsNegative() {
                $this->setUpBackend(array('database' => -1));
@@ -147,7 +170,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function setCompressionThrowsExceptionIfCompressionParameterIsNotOfTypeBoolean() {
                $this->setUpBackend(array('compression' => 'foo'));
@@ -156,7 +179,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function setCompressionLevelThrowsExceptionIfCompressionLevelIsNotInteger() {
                $this->setUpBackend(array('compressionLevel' => 'foo'));
@@ -165,7 +188,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function setCompressionLevelThrowsExceptionIfCompressionLevelIsNotBetweenMinusOneAndNine() {
                $this->setUpBackend(array('compressionLevel' => 11));
@@ -174,7 +197,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function setThrowsExceptionIfIdentifierIsNotAString() {
                $this->setUpBackend();
@@ -194,7 +217,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function setThrowsExceptionIfLifetimeIsNegative() {
                $this->setUpBackend();
@@ -204,7 +227,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function setThrowsExceptionIfLifetimeIsNotNullOrAnInteger() {
                $this->setUpBackend();
@@ -237,7 +260,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
                $identifier = 'identifier' . uniqid();
                $this->backend->set($identifier, 'data');
 
-               $this->assertSame(Redis::REDIS_STRING, $this->redis->type('identData:' . $identifier));
+               $this->assertSame(\Redis::REDIS_STRING, $this->redis->type('identData:' . $identifier));
        }
 
        /**
@@ -371,7 +394,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
                $identifier = 'identifier' . uniqid();
                $this->backend->set($identifier, 'data', array('tag'));
 
-               $this->assertSame(Redis::REDIS_SET, $this->redis->type('identTags:' . $identifier));
+               $this->assertSame(\Redis::REDIS_SET, $this->redis->type('identTags:' . $identifier));
        }
 
        /**
@@ -438,7 +461,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
                $tag = 'tag';
                $this->backend->set($identifier, 'data', array($tag));
 
-               $this->assertSame(Redis::REDIS_SET, $this->redis->type('tagIdents:' . $tag));
+               $this->assertSame(\Redis::REDIS_SET, $this->redis->type('tagIdents:' . $tag));
        }
 
        /**
@@ -531,7 +554,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
                $uncompresedStoredData = '';
                try {
                        $uncompresedStoredData = @gzuncompress($this->redis->get('identData:' . $identifier));
-               } catch (Exception $e) {
+               } catch (\Exception $e) {
                }
 
                $this->assertEquals($data, $uncompresedStoredData, 'Original and compressed data don\'t match');
@@ -560,7 +583,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function hasThrowsExceptionIfIdentifierIsNotAString() {
                $this->setUpBackend();
@@ -591,7 +614,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function getThrowsExceptionIfIdentifierIsNotAString() {
                $this->setUpBackend();
@@ -631,7 +654,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function removeThrowsExceptionIfIdentifierIsNotAString() {
                $this->setUpBackend();
@@ -726,7 +749,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function findIdentifiersByTagThrowsExceptionIfTagIsNotAString() {
                $this->setUpBackend();
@@ -796,8 +819,6 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
                $this->assertEquals($expectedResult, $actualResult);
        }
 
-
-
        /**
         * @test Implementation
         * @author Christian Kuhn <lolli@schwarzbu.ch>
@@ -816,7 +837,7 @@ class t3lib_cache_backend_RedisBackendTest extends tx_phpunit_testcase {
        /**
         * @test Functional
         * @author Christian Kuhn <lolli@schwarzbu.ch>
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         */
        public function flushByTagThrowsExceptionIfTagIsNotAString() {
                $this->setUpBackend();
index 4c78a67..69f0dd0 100644 (file)
@@ -27,7 +27,7 @@
  *
  * This file is a backport from FLOW3
  *
- * @author     Ingo Renner <ingo@typo3.org>
+ * @author Ingo Renner <ingo@typo3.org>
  * @package TYPO3
  * @subpackage tests
  */
@@ -39,7 +39,7 @@ class t3lib_cache_backend_TransientMemoryBackendTest extends tx_phpunit_testcase
         * @author Robert Lemke <robert@typo3.org>
         */
        public function setThrowsExceptionIfNoFrontEndHasBeenSet() {
-               $backend = new t3lib_cache_backend_TransientMemoryBackend();
+               $backend = new t3lib_cache_backend_TransientMemoryBackend('Testing');
 
                $data = 'Some data';
                $identifier = 'MyIdentifier';
@@ -53,7 +53,7 @@ class t3lib_cache_backend_TransientMemoryBackendTest extends tx_phpunit_testcase
         */
        public function itIsPossibleToSetAndCheckExistenceInCache() {
                $cache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
-               $backend = new t3lib_cache_backend_TransientMemoryBackend();
+               $backend = new t3lib_cache_backend_TransientMemoryBackend('Testing');
                $backend->setCache($cache);
 
                $data = 'Some data';
@@ -70,7 +70,7 @@ class t3lib_cache_backend_TransientMemoryBackendTest extends tx_phpunit_testcase
         */
        public function itIsPossibleToSetAndGetEntry() {
                $cache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
-               $backend = new t3lib_cache_backend_TransientMemoryBackend();
+               $backend = new t3lib_cache_backend_TransientMemoryBackend('Testing');
                $backend->setCache($cache);
 
                $data = 'Some data';
@@ -87,7 +87,7 @@ class t3lib_cache_backend_TransientMemoryBackendTest extends tx_phpunit_testcase
         */
        public function itIsPossibleToRemoveEntryFromCache() {
                $cache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
-               $backend = new t3lib_cache_backend_TransientMemoryBackend();
+               $backend = new t3lib_cache_backend_TransientMemoryBackend('Testing');
                $backend->setCache($cache);
 
                $data = 'Some data';
@@ -105,7 +105,7 @@ class t3lib_cache_backend_TransientMemoryBackendTest extends tx_phpunit_testcase
         */
        public function itIsPossibleToOverwriteAnEntryInTheCache() {
                $cache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
-               $backend = new t3lib_cache_backend_TransientMemoryBackend();
+               $backend = new t3lib_cache_backend_TransientMemoryBackend('Testing');
                $backend->setCache($cache);
 
                $data = 'Some data';
@@ -124,7 +124,7 @@ class t3lib_cache_backend_TransientMemoryBackendTest extends tx_phpunit_testcase
         */
        public function findIdentifiersByTagFindsCacheEntriesWithSpecifiedTag() {
                $cache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
-               $backend = new t3lib_cache_backend_TransientMemoryBackend();
+               $backend = new t3lib_cache_backend_TransientMemoryBackend('Testing');
                $backend->setCache($cache);
 
                $data = 'Some data';
@@ -145,7 +145,7 @@ class t3lib_cache_backend_TransientMemoryBackendTest extends tx_phpunit_testcase
         */
        public function hasReturnsFalseIfTheEntryDoesntExist() {
                $cache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
-               $backend = new t3lib_cache_backend_TransientMemoryBackend();
+               $backend = new t3lib_cache_backend_TransientMemoryBackend('Testing');
                $backend->setCache($cache);
 
                $identifier = 'NonExistingIdentifier';
@@ -160,7 +160,7 @@ class t3lib_cache_backend_TransientMemoryBackendTest extends tx_phpunit_testcase
         */
        public function removeReturnsFalseIfTheEntryDoesntExist() {
                $cache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
-               $backend = new t3lib_cache_backend_TransientMemoryBackend();
+               $backend = new t3lib_cache_backend_TransientMemoryBackend('Testing');
                $backend->setCache($cache);
 
                $identifier = 'NonExistingIdentifier';
@@ -176,7 +176,7 @@ class t3lib_cache_backend_TransientMemoryBackendTest extends tx_phpunit_testcase
         */
        public function flushByTagRemovesCacheEntriesWithSpecifiedTag() {
                $cache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
-               $backend = new t3lib_cache_backend_TransientMemoryBackend();
+               $backend = new t3lib_cache_backend_TransientMemoryBackend('Testing');
                $backend->setCache($cache);
 
                $data = 'some data' . microtime();
@@ -198,7 +198,7 @@ class t3lib_cache_backend_TransientMemoryBackendTest extends tx_phpunit_testcase
         */
        public function flushRemovesAllCacheEntries() {
                $cache = $this->getMock('t3lib_cache_frontend_Frontend', array(), array(), '', FALSE);
-               $backend = new t3lib_cache_backend_TransientMemoryBackend();
+               $backend = new t3lib_cache_backend_TransientMemoryBackend('Testing');
                $backend->setCache($cache);
 
                $data = 'some data' . microtime();
index f3ff07c..67d6988 100644 (file)
@@ -29,7 +29,7 @@ require_once 'backend/class.t3lib_cache_backend_mockbackend.php';
  *
  * This file is a backport from FLOW3
  *
- * @author     Ingo Renner <ingo@typo3.org>
+ * @author Ingo Renner <ingo@typo3.org>
  * @package TYPO3
  * @subpackage tests
  */
@@ -52,12 +52,8 @@ class t3lib_cache_FactoryTest extends tx_phpunit_testcase {
         * @author Ingo Renner <ingo@typo3.org>
         */
        public function createReturnsInstanceOfTheSpecifiedCacheFrontend() {
-               $backend = $this->getMock('t3lib_cache_backend_NullBackend', array(), array(), '', FALSE);
-               $cache = $this->getMock('t3lib_cache_frontend_VariableFrontend', array(), array(), '', FALSE);
-
                $mockCacheManager = $this->getMock('t3lib_cache_Manager', array('registerCache'), array(), '', FALSE);
-               $factory = new t3lib_cache_Factory();
-               $factory->setCacheManager($mockCacheManager);
+               $factory = new t3lib_cache_Factory('Testing', $mockCacheManager);
 
                $cache = $factory->create('TYPO3_Cache_FactoryTest_Cache', 't3lib_cache_frontend_VariableFrontend', 't3lib_cache_backend_NullBackend');
                $this->assertInstanceOf('t3lib_cache_frontend_VariableFrontend', $cache);
@@ -66,65 +62,29 @@ class t3lib_cache_FactoryTest extends tx_phpunit_testcase {
        /**
         * @test
         * @author Robert Lemke <robert@typo3.org>
-        * @author Karsten Dambekalns <karsten@typo3.org>
         * @author Ingo Renner <ingo@typo3.org>
         */
        public function createInjectsAnInstanceOfTheSpecifiedBackendIntoTheCacheFrontend() {
-               $backend = $this->getMock('t3lib_cache_backend_FileBackend', array(), array(), '', FALSE);
-               $cache = $this->getMock('t3lib_cache_frontend_VariableFrontend', array(), array(), '', FALSE);
-
-               $mockCacheManager = $this->getMock('t3lib_cache_Manager', array('registerCache'), array(), '', FALSE);
-               $factory = new t3lib_cache_Factory();
-               $factory->setCacheManager($mockCacheManager);
-
-               $factory->create('TYPO3_Cache_FactoryTest_Cache', 't3lib_cache_frontend_VariableFrontend', 't3lib_cache_backend_FileBackend');
-       }
-
-       /**
-        * @test
-        * @author Robert Lemke <robert@typo3.org>
-        * @author Karsten Dambekalns <karsten@typo3.org>
-        * @author Ingo Renner <ingo@typo3.org>
-        */
-       public function createPassesBackendOptionsToTheCreatedBackend() {
-               $someValue = microtime();
-               $backendOptions = array('someOption' => $someValue);
-
-               $cache = $this->getMock('t3lib_cache_frontend_VariableFrontend', array(), array(), '', FALSE);
-
                $mockCacheManager = $this->getMock('t3lib_cache_Manager', array('registerCache'), array(), '', FALSE);
-               $factory = new t3lib_cache_Factory();
-               $factory->setCacheManager($mockCacheManager);
-
-               $cache = $factory->create('TYPO3_Cache_FactoryTest_Cache', 't3lib_cache_frontend_VariableFrontend', 't3lib_cache_backend_MockBackend', $backendOptions);
 
-               $this->assertEquals($someValue, $cache->getBackend()->getSomeOption(), 'create() did not pass the backend options to the backend.');
+               $factory = new t3lib_cache_Factory('Testing', $mockCacheManager);
+               $cache = $factory->create('TYPO3_Cache_FactoryTest_Cache', 't3lib_cache_frontend_VariableFrontend', 't3lib_cache_backend_FileBackend');
+               $this->assertInstanceOf('t3lib_cache_backend_FileBackend', $cache->getBackend());
        }
 
        /**
         * @test
         * @author Robert Lemke <robert@typo3.org>
-        * @author Karsten Dambekalns <karsten@typo3.org>
         * @author Ingo Renner <ingo@typo3.org>
         */
-/*
-       Not working yet
-
        public function createRegistersTheCacheAtTheCacheManager() {
-               $cacheIdentifier = 'TYPO3_Cache_FactoryTest_Cache';
-               $backend = $this->getMock('t3lib_cache_backend_NullBackend', array(), array(), '', FALSE);
-               $cache = $this->getMock('t3lib_cache_frontend_VariableFrontend', array('getCache'), array($cacheIdentifier, $backend), '', TRUE);
-               $cache->getBackend()->setCache($cache);
-
                $mockCacheManager = $this->getMock('t3lib_cache_Manager', array('registerCache'), array(), '', FALSE);
-               $mockCacheManager->expects($this->once())->method('registerCache')->with($cache);
-#              $mockCacheManager->expects($this->once())->method('registerCache')->with('t3lib_cache_frontend_VariableFrontend');
-               $factory = new t3lib_cache_Factory();
-               $factory->setCacheManager($mockCacheManager);
 
-               $factory->create($cacheIdentifier, 't3lib_cache_frontend_VariableFrontend', 't3lib_cache_backend_NullBackend');
+               $mockCacheManager->expects($this->once())->method('registerCache');
+
+               $factory = new t3lib_cache_Factory('Testing', $mockCacheManager);
+               $factory->create('TYPO3_Cache_FactoryTest_Cache', 't3lib_cache_frontend_VariableFrontend', 't3lib_cache_backend_FileBackend');
        }
-*/
 }
 
 ?>
\ No newline at end of file
index e536ede..635980b 100644 (file)
@@ -22,7 +22,6 @@
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/
 
-
 /**
  * Testcase for the Cache Manager
  *
@@ -38,40 +37,10 @@ class t3lib_cache_ManagerTest extends tx_phpunit_testcase {
         * @test
         * @author Robert Lemke <robert@typo3.org>
         * @author Ingo Renner <ingo@typo3.org>
-        */
-       public function initializeCreatesAndRegistersAllCachesDefinedInTheCachesConfiguration() {
-               $mockCacheFactory = $this->getMock('t3lib_cache_Factory', array(), array(), '', FALSE);
-               $mockCacheFactory->expects($this->at(1))->method('create')->with('cache1', 't3lib_cache_frontend_VariableFrontend', 't3lib_cache_backend_FileBackend', array());
-               $mockCacheFactory->expects($this->at(2))->method('create')->with('cache2', 't3lib_cache_frontend_StringFrontend', 't3lib_cache_backend_NullBackend', array('foo' => 'bar'));
-
-               $cacheConfigurations = array(
-                       'cache1' => array(
-                               'frontend' => 't3lib_cache_frontend_VariableFrontend',
-                               'backend' => 't3lib_cache_backend_FileBackend',
-                               'backendOptions' => array(),
-                       ),
-                       'cache2' => array(
-                               'frontend' => 't3lib_cache_frontend_StringFrontend',
-                               'backend' => 't3lib_cache_backend_NullBackend',
-                               'backendOptions' => array('foo' => 'bar')
-                       ),
-               );
-
-               $manager = new t3lib_cache_Manager();
-               $manager->setCacheConfigurations($cacheConfigurations);
-               $manager->setCacheFactory($mockCacheFactory);
-               $manager->initialize();
-       }
-
-       /**
-        * @test
-        * @author Robert Lemke <robert@typo3.org>
-        * @author Ingo Renner <ingo@typo3.org>
         * @expectedException t3lib_cache_exception_DuplicateIdentifier
         */
        public function managerThrowsExceptionOnCacheRegistrationWithAlreadyExistingIdentifier() {
                $manager = new t3lib_cache_Manager();
-               $backend = $this->getMock('t3lib_cache_backend_AbstractBackend', array(), array(), '', FALSE);
 
                $cache1 = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array('getIdentifier', 'set', 'get', 'getByTag', 'has', 'remove', 'flush', 'flushByTag'), array(), '', FALSE);
                $cache1->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('test'));
@@ -90,7 +59,6 @@ class t3lib_cache_ManagerTest extends tx_phpunit_testcase {
         */
        public function managerReturnsThePreviouslyRegisteredCache() {
                $manager = new t3lib_cache_Manager();
-               $backend = $this->getMock('t3lib_cache_backend_AbstractBackend', array(), array(), '', FALSE);
 
                $cache1 = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array('getIdentifier', 'set', 'get', 'getByTag', 'has', 'remove', 'flush', 'flushByTag'), array(), '', FALSE);
                $cache1->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('cache1'));
@@ -112,7 +80,6 @@ class t3lib_cache_ManagerTest extends tx_phpunit_testcase {
         */
        public function getCacheThrowsExceptionForNonExistingIdentifier() {
                $manager = new t3lib_cache_Manager();
-               $backend = $this->getMock('t3lib_cache_backend_AbstractBackend', array(), array(), '', FALSE);
                $cache = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array('getIdentifier', 'set', 'get', 'getByTag', 'has', 'remove', 'flush', 'flushByTag'), array(), '', FALSE);
                $cache->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('someidentifier'));
 
@@ -129,7 +96,6 @@ class t3lib_cache_ManagerTest extends tx_phpunit_testcase {
         */
        public function hasCacheReturnsCorrectResult() {
                $manager = new t3lib_cache_Manager();
-               $backend = $this->getMock('t3lib_cache_backend_AbstractBackend', array(), array(), '', FALSE);
                $cache1 = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array('getIdentifier', 'set', 'get', 'getByTag', 'has', 'remove', 'flush', 'flushByTag'), array(), '', FALSE);
                $cache1->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('cache1'));
                $manager->registerCache($cache1);
@@ -146,8 +112,6 @@ class t3lib_cache_ManagerTest extends tx_phpunit_testcase {
        public function flushCachesByTagCallsTheFlushByTagMethodOfAllRegisteredCaches() {
                $manager = new t3lib_cache_Manager();
 
-               $backend = $this->getMock('t3lib_cache_backend_AbstractBackend', array(), array(), '', FALSE);
-
                $cache1 = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array('getIdentifier', 'set', 'get', 'getByTag', 'has', 'remove', 'flush', 'flushByTag'), array(), '', FALSE);
                $cache1->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('cache1'));
                $cache1->expects($this->once())->method('flushByTag')->with($this->equalTo('theTag'));
@@ -167,7 +131,6 @@ class t3lib_cache_ManagerTest extends tx_phpunit_testcase {
         */
        public function flushCachesCallsTheFlushMethodOfAllRegisteredCaches() {
                $manager = new t3lib_cache_Manager();
-               $backend = $this->getMock('t3lib_cache_backend_AbstractBackend', array(), array(), '', FALSE);
 
                $cache1 = $this->getMock('t3lib_cache_frontend_AbstractFrontend', array('getIdentifier', 'set', 'get', 'getByTag', 'has', 'remove', 'flush', 'flushByTag'), array(), '', FALSE);
                $cache1->expects($this->atLeastOnce())->method('getIdentifier')->will($this->returnValue('cache1'));
index cc983c6..fd1cff3 100644 (file)
@@ -27,7 +27,7 @@
  *
  * This file is a backport from FLOW3
  *
- * @author     Ingo Renner <ingo@typo3.org>
+ * @author Ingo Renner <ingo@typo3.org>
  * @package TYPO3
  * @subpackage tests
  */
@@ -56,7 +56,7 @@ class t3lib_cache_frontend_AbstractFrontendTest extends tx_phpunit_testcase {
                        try {
                                $abstractCache = $this->getMock('t3lib_cache_frontend_StringFrontend', array('__construct', 'get', 'set', 'has', 'remove', 'getByTag', 'flush', 'flushByTag', 'collectGarbage'), array($identifier, $mockBackend));
                                $this->fail('Identifier "' . $identifier . '" was not rejected.');
-                       } catch (InvalidArgumentException $exception) {
+                       } catch (\InvalidArgumentException $exception) {
                        }
                }
        }
@@ -130,7 +130,7 @@ class t3lib_cache_frontend_AbstractFrontendTest extends tx_phpunit_testcase {
                $backend = $this->getMock('t3lib_cache_backend_AbstractBackend', array('get', 'set', 'has', 'remove', 'findIdentifiersByTag', 'findIdentifiersByTags', 'flush', 'flushByTag', 'flushByTags', 'collectGarbage'), array(), '', FALSE);
 
                $cache = $this->getMock('t3lib_cache_frontend_StringFrontend', array('__construct', 'get', 'set', 'has', 'remove', 'getByTag'), array($identifier, $backend));
-               $this->assertEquals('%CLASS%F3_Foo_Bar_Baz', $cache->getClassTag('F3\Foo\Bar\Baz'));
+               $this->assertEquals('%CLASS%F3_Foo_Bar_Baz', t3lib_cache_Manager::getClassTag('F3\Foo\Bar\Baz'));
        }
 
        /**
index 93394e6..a2601bb 100644 (file)
@@ -22,7 +22,6 @@
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/
 
-
 /**
  * Testcase for the PHP source code cache frontend
  *
index 1d2ddd0..1887976 100644 (file)
  *
  * This file is a backport from FLOW3
  *
- * @author     Ingo Renner <ingo@typo3.org>
+ * @author Ingo Renner <ingo@typo3.org>
  * @package TYPO3
  * @subpackage tests
  */
 class t3lib_cache_frontend_StringFrontendTest extends tx_phpunit_testcase {
 
        /**
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         * @test
         * @author Robert Lemke <robert@typo3.org>
         * @author Ingo Renner <ingo@typo3.org>
index f14627c..a24aee9 100644 (file)
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/
 
-
 /**
  * Testcase for the variable cache frontend
  *
  * This file is a backport from FLOW3
  *
- * @author     Ingo Renner <ingo@typo3.org>
+ * @author Ingo Renner <ingo@typo3.org>
  * @package TYPO3
  * @subpackage tests
  */
 class t3lib_cache_frontend_VariableFrontendTest extends tx_phpunit_testcase {
 
        /**
-        * @expectedException InvalidArgumentException
+        * @expectedException \InvalidArgumentException
         * @test
         * @author Robert Lemke <robert@typo3.org>
         * @author Ingo Renner <ingo@typo3.org>
index f761842..f478137 100644 (file)
@@ -1 +1 @@
-8d61bb9e22fcab1bedcd7ba72f8d0de9f6efc521
+a6b474f3072ee27f24cf925aba425a47650f3295
\ No newline at end of file
index 7545223..0a6db8f 100644 (file)
@@ -229,9 +229,7 @@ $PARSETIME_START = t3lib_div::milliseconds();               // Is set to the system time in m
 // ***********************************
 
 if (TYPO3_UseCachingFramework) {
-       $typo3CacheManager = t3lib_div::makeInstance('t3lib_cache_Manager');
-       $typo3CacheFactory = t3lib_div::makeInstance('t3lib_cache_Factory');
-       $typo3CacheFactory->setCacheManager($typo3CacheManager);
+       t3lib_cache::initializeCachingFramework();
 
        t3lib_cache::initPageCache();
        t3lib_cache::initPageSectionCache();
index 64ebad2..ecf484b 100644 (file)
                if (TYPO3_UseCachingFramework) {
                        $GLOBALS['TT']->push('Initializing the Caching System','');
 
-                       $GLOBALS['typo3CacheManager'] = t3lib_div::makeInstance('t3lib_cache_Manager');
-                       $GLOBALS['typo3CacheFactory'] = t3lib_div::makeInstance('t3lib_cache_Factory');
-                       $GLOBALS['typo3CacheFactory']->setCacheManager($GLOBALS['typo3CacheManager']);
+                       t3lib_cache::initializeCachingFramework();
 
                        try {
                                $this->pageCache = $GLOBALS['typo3CacheManager']->getCache(