📄 tree.test.php
字号:
<?php/* SVN FILE: $Id: tree.test.php 7118 2008-06-04 20:49:29Z gwoo $ *//** * Short description for file. * * Long description for file * * PHP versions 4 and 5 * * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite> * Copyright 2005-2008, Cake Software Foundation, Inc. * 1785 E. Sahara Avenue, Suite 490-204 * Las Vegas, Nevada 89104 * * Licensed under The Open Group Test Suite License * Redistributions of files must retain the above copyright notice. * * @filesource * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. * @link https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests * @package cake.tests * @subpackage cake.tests.cases.libs.model.behaviors * @since CakePHP(tm) v 1.2.0.5330 * @version $Revision: 7118 $ * @modifiedby $LastChangedBy: gwoo $ * @lastmodified $Date: 2008-06-04 13:49:29 -0700 (Wed, 04 Jun 2008) $ * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License *//** * Short description for file * * Long description for file * * @package cake * @subpackage cake.tests.cases.libs.model.behaviors */class NumberTree extends CakeTestModel {/** * name property * * @var string 'NumberTree' * @access public */ var $name = 'NumberTree';/** * actsAs property * * @var array * @access public */ var $actsAs = array('Tree');/** * initialize method * * @param int $levelLimit * @param int $childLimit * @param mixed $currentLevel * @param mixed $parent_id * @param string $prefix * @param bool $hierachial * @access public * @return void */ function initialize($levelLimit = 3, $childLimit = 3, $currentLevel = null, $parent_id = null, $prefix = '1', $hierachial = true) { if (!$parent_id) { $this->deleteAll(true); $this->save(array($this->name => array('name' => '1. Root'))); $this->initialize($levelLimit, $childLimit, 1, $this->id, '1', $hierachial); $this->create(array()); } if (!$currentLevel || $currentLevel > $levelLimit) { return; } for ($i = 1; $i <= $childLimit; $i++) { $name = $prefix . '.' . $i; $data = array($this->name => array('name' => $name)); $this->create($data); if ($hierachial) { $data[$this->name]['parent_id'] = $parent_id; } $this->save($data); $this->initialize($levelLimit, $childLimit, $currentLevel + 1, $this->id, $name, $hierachial); } }}/** * FlagTree class * * @package cake * @subpackage cake.tests.cases.libs.model.behaviors */class FlagTree extends NumberTree {/** * name property * * @var string 'FlagTree' * @access public */ var $name = 'FlagTree';}/** * Campaign class * * @package cake * @subpackage cake.tests.cases.libs.model.behaviors */class Campaign extends CakeTestModel {/** * name property * * @var string 'Campaign' * @access public */ var $name = 'Campaign';/** * hasMany property * * @var array * @access public */ var $hasMany = array('Ad' => array('fields' => array('id','campaign_id','name') ));}/** * Ad class * * @package cake * @subpackage cake.tests.cases.libs.model.behaviors */class Ad extends CakeTestModel {/** * name property * * @var string 'Ad' * @access public */ var $name = 'Ad';/** * actsAs property * * @var array * @access public */ var $actsAs = array('Tree');/** * belongsTo property * * @var array * @access public */ var $belongsTo = array('Campaign' );}/** * NumberTreeCase class * * @package cake * @subpackage cake.tests.cases.libs.model.behaviors */class NumberTreeCase extends CakeTestCase {/** * fixtures property * * @var array * @access public */ var $fixtures = array('core.number_tree', 'core.flag_tree', 'core.campaign','core.ad');/** * testInitialize method * * @access public * @return void */ function testInitialize() { $this->NumberTree =& new NumberTree(); $this->NumberTree->initialize(2, 2); $result = $this->NumberTree->find('count'); $this->assertEqual($result, 7); $validTree = $this->NumberTree->verify(); $this->assertIdentical($validTree, true); }/** * testStringScope method * * @access public * @return void */ function testStringScope() { $this->FlagTree =& new FlagTree(); $this->FlagTree->initialize(2, 3); $this->FlagTree->id = 1; $this->FlagTree->saveField('flag', 1); $this->FlagTree->id = 2; $this->FlagTree->saveField('flag', 1); $result = $this->FlagTree->children(); $expected = array( array('FlagTree' => array('id' => '3', 'name' => '1.1.1', 'parent_id' => '2', 'lft' => '3', 'rght' => '4', 'flag' => '0')), array('FlagTree' => array('id' => '4', 'name' => '1.1.2', 'parent_id' => '2', 'lft' => '5', 'rght' => '6', 'flag' => '0')), array('FlagTree' => array('id' => '5', 'name' => '1.1.3', 'parent_id' => '2', 'lft' => '7', 'rght' => '8', 'flag' => '0')) ); $this->assertEqual($result, $expected); $this->FlagTree->Behaviors->attach('Tree', array('scope' => 'FlagTree.flag = 1')); $this->assertEqual($this->FlagTree->children(), array()); $this->FlagTree->id = 1; $this->FlagTree->Behaviors->attach('Tree', array('scope' => 'FlagTree.flag = 1')); $result = $this->FlagTree->children(); $expected = array(array('FlagTree' => array('id' => '2', 'name' => '1.1', 'parent_id' => '1', 'lft' => '2', 'rght' => '9', 'flag' => '1'))); $this->assertEqual($result, $expected); $this->assertTrue($this->FlagTree->delete()); $this->assertEqual($this->FlagTree->find('count'), 11); }/** * testArrayScope method * * @access public * @return void */ function testArrayScope() { $this->FlagTree =& new FlagTree(); $this->FlagTree->initialize(2, 3); $this->FlagTree->id = 1; $this->FlagTree->saveField('flag', 1); $this->FlagTree->id = 2; $this->FlagTree->saveField('flag', 1); $result = $this->FlagTree->children(); $expected = array( array('FlagTree' => array('id' => '3', 'name' => '1.1.1', 'parent_id' => '2', 'lft' => '3', 'rght' => '4', 'flag' => '0')), array('FlagTree' => array('id' => '4', 'name' => '1.1.2', 'parent_id' => '2', 'lft' => '5', 'rght' => '6', 'flag' => '0')), array('FlagTree' => array('id' => '5', 'name' => '1.1.3', 'parent_id' => '2', 'lft' => '7', 'rght' => '8', 'flag' => '0')) ); $this->assertEqual($result, $expected); $this->FlagTree->Behaviors->attach('Tree', array('scope' => array('FlagTree.flag' => 1))); $this->assertEqual($this->FlagTree->children(), array()); $this->FlagTree->id = 1; $this->FlagTree->Behaviors->attach('Tree', array('scope' => array('FlagTree.flag' => 1))); $result = $this->FlagTree->children(); $expected = array(array('FlagTree' => array('id' => '2', 'name' => '1.1', 'parent_id' => '1', 'lft' => '2', 'rght' => '9', 'flag' => '1'))); $this->assertEqual($result, $expected); $this->assertTrue($this->FlagTree->delete()); $this->assertEqual($this->FlagTree->find('count'), 11); }/** * testDetectInvalidLeft method * * @access public * @return void */ function testDetectInvalidLeft() { $this->NumberTree =& new NumberTree(); $this->NumberTree->initialize(2, 2); $result = $this->NumberTree->findByName('1.1'); $save['NumberTree']['id'] = $result['NumberTree']['id']; $save['NumberTree']['lft'] = 0; $this->NumberTree->save($save); $result = $this->NumberTree->verify(); $this->assertNotIdentical($result, true); $result = $this->NumberTree->recover(); $this->assertIdentical($result, true); $result = $this->NumberTree->verify(); $this->assertIdentical($result, true); }/** * testDetectInvalidRight method * * @access public * @return void */ function testDetectInvalidRight() { $this->NumberTree =& new NumberTree(); $this->NumberTree->initialize(2, 2); $result = $this->NumberTree->findByName('1.1'); $save['NumberTree']['id'] = $result['NumberTree']['id']; $save['NumberTree']['rght'] = 0; $this->NumberTree->save($save); $result = $this->NumberTree->verify(); $this->assertNotIdentical($result, true); $result = $this->NumberTree->recover(); $this->assertIdentical($result, true); $result = $this->NumberTree->verify(); $this->assertIdentical($result, true); }/** * testDetectInvalidParent method * * @access public * @return void */ function testDetectInvalidParent() { $this->NumberTree =& new NumberTree(); $this->NumberTree->initialize(2, 2); $result = $this->NumberTree->findByName('1.1'); // Bypass behavior and any other logic $this->NumberTree->updateAll(array('parent_id' => null), array('id' => $result['NumberTree']['id'])); $result = $this->NumberTree->verify(); $this->assertNotIdentical($result, true); $result = $this->NumberTree->recover(); $this->assertIdentical($result, true); $result = $this->NumberTree->verify(); $this->assertIdentical($result, true); }/** * testDetectNoneExistantParent method * * @access public * @return void */ function testDetectNoneExistantParent() { $this->NumberTree =& new NumberTree(); $this->NumberTree->initialize(2, 2); $result = $this->NumberTree->findByName('1.1'); $this->NumberTree->updateAll(array('parent_id' => 999999), array('id' => $result['NumberTree']['id'])); $result = $this->NumberTree->verify(); $this->assertNotIdentical($result, true); $result = $this->NumberTree->recover('MPTT'); $this->assertIdentical($result, true); $result = $this->NumberTree->verify(); $this->assertIdentical($result, true); }/** * testRecoverFromMissingParent method * * @access public * @return void */ function testRecoverFromMissingParent() { $this->NumberTree =& new NumberTree(); $this->NumberTree->initialize(2, 2); $result = $this->NumberTree->findByName('1.1'); $this->NumberTree->updateAll(array('parent_id' => 999999), array('id' => $result['NumberTree']['id'])); $result = $this->NumberTree->verify(); $this->assertNotIdentical($result, true); $result = $this->NumberTree->recover(); $this->assertIdentical($result, true); $result = $this->NumberTree->verify(); $this->assertIdentical($result, true); }/** * testDetectInvalidParents method * * @access public * @return void */ function testDetectInvalidParents() { $this->NumberTree =& new NumberTree(); $this->NumberTree->initialize(2, 2); $this->NumberTree->updateAll(array('parent_id' => null)); $result = $this->NumberTree->verify(); $this->assertNotIdentical($result, true); $result = $this->NumberTree->recover(); $this->assertIdentical($result, true); $result = $this->NumberTree->verify(); $this->assertIdentical($result, true); }/** * testDetectInvalidLftsRghts method * * @access public * @return void */ function testDetectInvalidLftsRghts() { $this->NumberTree =& new NumberTree(); $this->NumberTree->initialize(2, 2); $this->NumberTree->updateAll(array('lft' => 0, 'rght' => 0));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -