* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Tests\Component\HttpFoundation; use Symfony\Component\HttpFoundation\Session; use Symfony\Component\HttpFoundation\SessionStorage\ArraySessionStorage; /** * SessionTest * * @author Fabien Potencier * @author Robert Schönthal */ class SessionTest extends \PHPUnit_Framework_TestCase { protected $storage; protected $session; public function setUp() { $this->storage = new ArraySessionStorage(); $this->session = $this->getSession(); } public function testFlash() { $this->assertFalse($this->session->hasFlash('foo')); $this->session->setFlash('foo', 'bar'); $this->assertTrue($this->session->hasFlash('foo')); $this->assertSame('bar', $this->session->getFlash('foo')); $this->session->removeFlash('foo'); $this->assertFalse($this->session->hasFlash('foo')); $flashes = array('foo' => 'bar', 'bar' => 'foo'); $this->session = $this->getSession(); $this->session->setFlashes($flashes); $this->assertSame($flashes, $this->session->getFlashes()); $this->session->clearFlashes(); $this->assertSame(array(), $this->session->getFlashes()); } public function testFlashesAreFlushedWhenNeeded() { $this->session->setFlash('foo', 'bar'); $this->session->save(); $this->session = $this->getSession(); $this->assertTrue($this->session->hasFlash('foo')); $this->session->save(); $this->session = $this->getSession(); $this->assertFalse($this->session->hasFlash('foo')); } public function testAttribute() { $this->assertFalse($this->session->has('foo')); $this->assertNull($this->session->get('foo')); $this->session->set('foo', 'bar'); $this->assertTrue($this->session->has('foo')); $this->assertSame('bar', $this->session->get('foo')); $this->session = $this->getSession(); $this->session->remove('foo'); $this->session->set('foo', 'bar'); $this->session->remove('foo'); $this->assertFalse($this->session->has('foo')); $attrs = array('foo' => 'bar', 'bar' => 'foo'); $this->session = $this->getSession(); $this->session->setAttributes($attrs); $this->assertSame($attrs, $this->session->getAttributes()); $this->session->clear(); $this->assertSame(array(), $this->session->getAttributes()); } public function testMigrateAndInvalidate() { $this->session->set('foo', 'bar'); $this->session->setFlash('foo', 'bar'); $this->assertSame('bar', $this->session->get('foo')); $this->assertSame('bar', $this->session->getFlash('foo')); $this->session->migrate(); $this->assertSame('bar', $this->session->get('foo')); $this->assertSame('bar', $this->session->getFlash('foo')); $this->session = $this->getSession(); $this->session->invalidate(); $this->assertSame(array(), $this->session->getAttributes()); $this->assertSame(array(), $this->session->getFlashes()); } public function testSerialize() { $options = array('foo' => 'bar'); $this->session = new Session($this->storage, $options); $compare = serialize(array($this->storage, $options)); $this->assertSame($compare, $this->session->serialize()); $this->session->unserialize($compare); $_options = new \ReflectionProperty(get_class($this->session), 'options'); $_options->setAccessible(true); $_storage = new \ReflectionProperty(get_class($this->session), 'storage'); $_storage->setAccessible(true); $this->assertEquals($_options->getValue($this->session), $options, 'options match'); $this->assertEquals($_storage->getValue($this->session), $this->storage, 'storage match'); } public function testSave() { $this->storage = new ArraySessionStorage(); $options = array('foo' => 'bar'); $this->session = new Session($this->storage, $options); $this->session->set('foo', 'bar'); $this->session->save(); $compare = array('_symfony2' => array('_flash' => array() ,'_locale' => 'en', 'foo' => 'bar')); $r = new \ReflectionObject($this->storage); $p = $r->getProperty('data'); $p->setAccessible(true); $this->assertSame($p->getValue($this->storage), $compare); } public function testLocale() { $this->assertSame('en', $this->session->getLocale(),'default locale is en'); $this->session->set('_locale','de'); $this->assertSame('de', $this->session->getLocale(),'locale is de'); $this->session = $this->getSession(); $this->session->setLocale('fr'); $this->assertSame('fr', $this->session->getLocale(),'locale is fr'); } public function testGetId() { $this->assertSame(null, $this->session->getId()); } public function testStart() { $this->session->start(); $this->assertSame('en', $this->session->getLocale()); $this->assertSame(array(), $this->session->getFlashes()); $this->assertSame(array('_flash' => array(), '_locale' => 'en'), $this->session->getAttributes()); $this->session->start(); $this->assertSame('en', $this->session->getLocale()); } protected function getSession() { return new Session($this->storage); } }