| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkPHP [ WE CAN DO IT JUST THINK ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +----------------------------------------------------------------------
- // | Author: liu21st <liu21st@gmail.com>
- // +----------------------------------------------------------------------
- /**
- * Session测试
- * @author 大漠 <zhylninc@gmail.com>
- */
- namespace tests\thinkphp\library\think;
- use think\Session;
- class sessionTest extends \PHPUnit_Framework_TestCase
- {
- /**
- *
- * @var \think\Session
- */
- protected $object;
- /**
- * Sets up the fixture, for example, opens a network connection.
- * This method is called before a test is executed.
- */
- protected function setUp()
- {
- // $this->object = new Session ();
- // register_shutdown_function ( function () {
- // } ); // 此功能无法取消,需要回调函数配合。
- set_exception_handler(function () {});
- set_error_handler(function () {});
- }
- /**
- * Tears down the fixture, for example, closes a network connection.
- * This method is called after a test is executed.
- */
- protected function tearDown()
- {
- register_shutdown_function('think\Error::appShutdown');
- set_error_handler('think\Error::appError');
- set_exception_handler('think\Error::appException');
- }
- /**
- * @covers think\Session::prefix
- *
- * @todo Implement testPrefix().
- */
- public function testPrefix()
- {
- Session::prefix(null);
- Session::prefix('think_');
- $this->assertEquals('think_', Session::prefix());
- }
- /**
- * @covers think\Session::init
- *
- * @todo Implement testInit().
- */
- public function testInit()
- {
- Session::prefix(null);
- $config = [
- // cookie 名称前缀
- 'prefix' => 'think_',
- // cookie 保存时间
- 'expire' => 60,
- // cookie 保存路径
- 'path' => '/path/to/test/session/',
- // cookie 有效域名
- 'domain' => '.thinkphp.cn',
- 'var_session_id' => 'sessionidtest',
- 'id' => 'sess_8fhgkjuakhatbeg2fa14lo84q1',
- 'name' => 'session_name',
- 'use_trans_sid' => '1',
- 'use_cookies' => '1',
- 'cache_limiter' => '60',
- 'cache_expire' => '60',
- 'type' => '', // memcache
- 'namespace' => '\\think\\session\\driver\\', // ?
- 'auto_start' => '1',
- ];
- $_REQUEST[$config['var_session_id']] = $config['id'];
- Session::init($config);
- // 开始断言
- $this->assertEquals($config['prefix'], Session::prefix());
- $this->assertEquals($config['id'], $_REQUEST[$config['var_session_id']]);
- $this->assertEquals($config['name'], session_name());
- $this->assertEquals($config['path'], session_save_path());
- $this->assertEquals($config['use_cookies'], ini_get('session.use_cookies'));
- $this->assertEquals($config['domain'], ini_get('session.cookie_domain'));
- $this->assertEquals($config['expire'], ini_get('session.gc_maxlifetime'));
- $this->assertEquals($config['expire'], ini_get('session.cookie_lifetime'));
- $this->assertEquals($config['cache_limiter'], session_cache_limiter($config['cache_limiter']));
- $this->assertEquals($config['cache_expire'], session_cache_expire($config['cache_expire']));
- // 检测分支
- $_REQUEST[$config['var_session_id']] = null;
- session_write_close();
- session_destroy();
- Session::init($config);
- // 测试auto_start
- // PHP_SESSION_DISABLED
- // PHP_SESSION_NONE
- // PHP_SESSION_ACTIVE
- // session_status()
- if (strstr(PHP_VERSION, 'hhvm')) {
- $this->assertEquals('', ini_get('session.auto_start'));
- } else {
- $this->assertEquals(0, ini_get('session.auto_start'));
- }
- $this->assertEquals($config['use_trans_sid'], ini_get('session.use_trans_sid'));
- Session::init($config);
- $this->assertEquals($config['id'], session_id());
- }
- /**
- * 单独重现异常
- * @expectedException \think\Exception
- */
- public function testException()
- {
- $config = [
- // cookie 名称前缀
- 'prefix' => 'think_',
- // cookie 保存时间
- 'expire' => 0,
- // cookie 保存路径
- 'path' => '/path/to/test/session/',
- // cookie 有效域名
- 'domain' => '.thinkphp.cn',
- 'var_session_id' => 'sessionidtest',
- 'id' => 'sess_8fhgkjuakhatbeg2fa14lo84q1',
- 'name' => 'session_name',
- 'use_trans_sid' => '1',
- 'use_cookies' => '1',
- 'cache_limiter' => '60',
- 'cache_expire' => '60',
- 'type' => '\\think\\session\\driver\\Memcache', //
- 'auto_start' => '1',
- ];
- // 测试session驱动是否存在
- // @expectedException 异常类名
- $this->setExpectedException('\think\exception\ClassNotFoundException', 'error session handler');
- Session::init($config);
- }
- /**
- * @covers think\Session::set
- *
- * @todo Implement testSet().
- */
- public function testSet()
- {
- Session::prefix(null);
- Session::set('sessionname', 'sessionvalue');
- $this->assertEquals('sessionvalue', $_SESSION['sessionname']);
- Session::set('sessionnamearr.subname', 'sessionvalue');
- $this->assertEquals('sessionvalue', $_SESSION['sessionnamearr']['subname']);
- Session::set('sessionnameper', 'sessionvalue', 'think_');
- $this->assertEquals('sessionvalue', $_SESSION['think_']['sessionnameper']);
- Session::set('sessionnamearrper.subname', 'sessionvalue', 'think_');
- $this->assertEquals('sessionvalue', $_SESSION['think_']['sessionnamearrper']['subname']);
- }
- /**
- * @covers think\Session::get
- *
- * @todo Implement testGet().
- */
- public function testGet()
- {
- Session::prefix(null);
- Session::set('sessionnameget', 'sessionvalue');
- $this->assertEquals(Session::get('sessionnameget'), $_SESSION['sessionnameget']);
- Session::set('sessionnamegetarr.subname', 'sessionvalue');
- $this->assertEquals(Session::get('sessionnamegetarr.subname'), $_SESSION['sessionnamegetarr']['subname']);
- Session::set('sessionnamegetarrperall', 'sessionvalue', 'think_');
- $this->assertEquals(Session::get('', 'think_')['sessionnamegetarrperall'], $_SESSION['think_']['sessionnamegetarrperall']);
- Session::set('sessionnamegetper', 'sessionvalue', 'think_');
- $this->assertEquals(Session::get('sessionnamegetper', 'think_'), $_SESSION['think_']['sessionnamegetper']);
- Session::set('sessionnamegetarrper.subname', 'sessionvalue', 'think_');
- $this->assertEquals(Session::get('sessionnamegetarrper.subname', 'think_'), $_SESSION['think_']['sessionnamegetarrper']['subname']);
- }
- public function testPull()
- {
- Session::prefix(null);
- Session::set('sessionnamedel', 'sessionvalue');
- $this->assertEquals('sessionvalue', Session::pull('sessionnameget'));
- $this->assertNull(Session::get('sessionnameget'));
- }
- /**
- * @covers think\Session::delete
- *
- * @todo Implement testDelete().
- */
- public function testDelete()
- {
- Session::prefix(null);
- Session::set('sessionnamedel', 'sessionvalue');
- Session::delete('sessionnamedel');
- $this->assertEmpty($_SESSION['sessionnamedel']);
- Session::set('sessionnamedelarr.subname', 'sessionvalue');
- Session::delete('sessionnamedelarr.subname');
- $this->assertEmpty($_SESSION['sessionnamedelarr']['subname']);
- Session::set('sessionnamedelper', 'sessionvalue', 'think_');
- Session::delete('sessionnamedelper', 'think_');
- $this->assertEmpty($_SESSION['think_']['sessionnamedelper']);
- Session::set('sessionnamedelperarr.subname', 'sessionvalue', 'think_');
- Session::delete('sessionnamedelperarr.subname', 'think_');
- $this->assertEmpty($_SESSION['think_']['sessionnamedelperarr']['subname']);
- }
- /**
- * @covers think\Session::clear
- *
- * @todo Implement testClear().
- */
- public function testClear()
- {
- Session::prefix(null);
- Session::set('sessionnameclsper', 'sessionvalue1', 'think_');
- Session::clear('think_');
- $this->assertNull($_SESSION['think_']);
- Session::set('sessionnameclsper', 'sessionvalue1', 'think_');
- Session::clear();
- $this->assertEmpty($_SESSION);
- }
- /**
- * @covers think\Session::has
- *
- * @todo Implement testHas().
- */
- public function testHas()
- {
- Session::prefix(null);
- Session::set('sessionnamehas', 'sessionvalue');
- $this->assertTrue(Session::has('sessionnamehas'));
- Session::set('sessionnamehasarr.subname', 'sessionvalue');
- $this->assertTrue(Session::has('sessionnamehasarr.subname'));
- Session::set('sessionnamehasper', 'sessionvalue', 'think_');
- $this->assertTrue(Session::has('sessionnamehasper', 'think_'));
- Session::set('sessionnamehasarrper.subname', 'sessionvalue', 'think_');
- $this->assertTrue(Session::has('sessionnamehasarrper.subname', 'think_'));
- }
- /**
- * @covers think\Session::pause
- *
- * @todo Implement testPause().
- */
- public function testPause()
- {
- Session::pause();
- }
- /**
- * @covers think\Session::start
- *
- * @todo Implement testStart().
- */
- public function testStart()
- {
- Session::start();
- }
- /**
- * @covers think\Session::destroy
- *
- * @todo Implement testDestroy().
- */
- public function testDestroy()
- {
- Session::set('sessionnamedestroy', 'sessionvalue');
- Session::destroy();
- $this->assertEmpty($_SESSION['sessionnamedestroy']);
- }
- }
|