Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/asm89/twig-cache-extension/test/Asm89/Twig/CacheExtension/Tests/FunctionalExtensionTest.php
<?php

/*
 * This file is part of twig-cache-extension.
 *
 * (c) Alexander <iam.asm89@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Asm89\Twig\CacheExtension\Tests;

use
Asm89\Twig\CacheExtension\CacheProvider\DoctrineCacheAdapter;
use
Asm89\Twig\CacheExtension\CacheStrategy\KeyGeneratorInterface;
use
Asm89\Twig\CacheExtension\CacheStrategy\GenerationalCacheStrategy;
use
Asm89\Twig\CacheExtension\CacheStrategy\IndexedChainingCacheStrategy;
use
Asm89\Twig\CacheExtension\CacheStrategy\LifetimeCacheStrategy;
use
Asm89\Twig\CacheExtension\Extension;
use
Doctrine\Common\Cache\ArrayCache;
use
Twig_Loader_Filesystem;
use
Twig_Environment;

class
FunctionalExtensionTest extends \PHPUnit_Framework_TestCase
{
    private
$cache;

    protected function
createCacheProvider()
    {
       
$this->cache = new ArrayCache();

        return new
DoctrineCacheAdapter($this->cache);
    }

    protected function
createCacheStrategy($name = null)
    {
       
$cacheProvider = $this->createCacheProvider();
       
$keyGenerator  = $this->createKeyGenerator();
       
$lifetime      = 0;

        switch (
$name) {
            case
'time':
                return new
LifetimeCacheStrategy($cacheProvider);
            case
'indexed':
                return new
IndexedChainingCacheStrategy(array(
                   
'gcs'  => new GenerationalCacheStrategy($cacheProvider, $keyGenerator, $lifetime),
                   
'time' => new LifetimeCacheStrategy($cacheProvider),
                ));
            default:
                return new
GenerationalCacheStrategy($cacheProvider, $keyGenerator, $lifetime);
        }
    }

    protected function
createKeyGenerator()
    {
        return new
KeyGenerator();
    }

    protected function
createTwig($cacheStrategyName = null)
    {
       
$loader = new Twig_Loader_Filesystem(__DIR__ . '/fixtures/');
       
$twig = new Twig_Environment($loader);

       
$cacheExtension = new Extension($this->createCacheStrategy($cacheStrategyName));

       
$twig->addExtension($cacheExtension);

        return
$twig;
    }

    protected function
getValue($value, $updatedAt)
    {
        return new
Value($value, $updatedAt);
    }

    public function
testCachesWithSameCacheKey()
    {
       
$twig = $this->createTwig();

       
$rendered = $twig->render('gcs_value.twig', array('value' => $this->getValue('asm89', 1)));
       
$this->assertEquals('Hello asm89!', $rendered);

       
$rendered2 = $twig->render('gcs_value.twig', array('value' => $this->getValue('fabpot', 1)));
       
$this->assertEquals('Hello asm89!', $rendered2);
    }

    public function
testDifferentCacheOnDifferentAnnotation()
    {
       
$twig = $this->createTwig();

       
$rendered = $twig->render('gcs_value.twig', array('value' => $this->getValue('asm89', 1)));
       
$this->assertEquals('Hello asm89!', $rendered);

       
$rendered2 = $twig->render('gcs_value.twig', array('value' => $this->getValue('fabpot', 1)));
       
$this->assertEquals('Hello asm89!', $rendered2);

       
$rendered3 = $twig->render('gcs_value_v2.twig', array('value' => $this->getValue('fabpot', 1)));
       
$this->assertEquals('Hello fabpot!', $rendered3);
    }

    public function
testLifetimeCacheStrategy()
    {
       
$twig = $this->createTwig('time');

       
$rendered = $twig->render('lcs_value.twig', array('value' => $this->getValue('asm89', 1)));
       
$this->assertEquals('Hello asm89!', $rendered);

       
$rendered2 = $twig->render('lcs_value.twig', array('value' => $this->getValue('fabpot', 1)));
       
$this->assertEquals('Hello asm89!', $rendered2);

       
$this->cache->flushAll();

       
$rendered3 = $twig->render('lcs_value.twig', array('value' => $this->getValue('fabpot', 1)));
       
$this->assertEquals('Hello fabpot!', $rendered3);
    }

    public function
testIndexedChainingStrategy()
    {
       
$twig = $this->createTwig('indexed');

       
$rendered = $twig->render('ics_value.twig', array('value' => $this->getValue('asm89', 1)));
       
$this->assertEquals('Hello asm89!', $rendered);

       
$rendered2 = $twig->render('ics_value.twig', array('value' => $this->getValue('fabpot', 1)));
       
$this->assertEquals('Hello asm89!', $rendered2);

       
$this->cache->flushAll();

       
$rendered3 = $twig->render('ics_value.twig', array('value' => $this->getValue('fabpot', 1)));
       
$this->assertEquals('Hello fabpot!', $rendered3);
    }

   
/**
     * @expectedException Twig_Error_Runtime
     * @expectedExceptionMessage An exception has been thrown during the rendering of a template ("No strategy key found in value.")
     */
   
public function testIndexedChainingStrategyNeedsKey()
    {
       
$twig = $this->createTwig('indexed');

       
$twig->render('ics_no_key.twig', array('value' => $this->getValue('asm89', 1)));
    }

    public function
testAnnotationExpression()
    {
       
$twig = $this->createTwig('indexed');

       
$rendered = $twig->render('annotation_expression.twig', array('value' => $this->getValue('asm89', 1), 'version' => 1));
       
$this->assertEquals('Hello asm89!Hello asm89!', $rendered);
    }
}

class
KeyGenerator implements KeyGeneratorInterface
{
    public function
generateKey($value)
    {
        return
get_class($value) . '_' . $value->getUpdatedAt();
    }

}

class
Value
{
    private
$value;
    private
$updatedAt;

    public function
__construct($value, $updatedAt)
    {
       
$this->value     = $value;
       
$this->updatedAt = $updatedAt;
    }

    public function
getUpdatedAt()
    {
        return
$this->updatedAt;
    }

    public function
__toString()
    {
        return
$this->value;
    }
}