You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							182 lines
						
					
					
						
							4.4 KiB
						
					
					
				
			
		
		
	
	
							182 lines
						
					
					
						
							4.4 KiB
						
					
					
				<?php | 
						|
namespace yiiunit\framework\base; | 
						|
 | 
						|
use yii\base\Object; | 
						|
use yiiunit\TestCase; | 
						|
 | 
						|
/** | 
						|
 * @group base | 
						|
 */ | 
						|
class ObjectTest extends TestCase | 
						|
{ | 
						|
	/** | 
						|
	 * @var NewObject | 
						|
	 */ | 
						|
	protected $object; | 
						|
 | 
						|
	protected function setUp() | 
						|
	{ | 
						|
		parent::setUp(); | 
						|
		$this->mockApplication(); | 
						|
		$this->object = new NewObject; | 
						|
	} | 
						|
 | 
						|
	protected function tearDown() | 
						|
	{ | 
						|
		parent::tearDown(); | 
						|
		$this->object = null; | 
						|
	} | 
						|
 | 
						|
	public function testHasProperty() | 
						|
	{ | 
						|
		$this->assertTrue($this->object->hasProperty('Text')); | 
						|
		$this->assertTrue($this->object->hasProperty('text')); | 
						|
		$this->assertFalse($this->object->hasProperty('Caption')); | 
						|
		$this->assertTrue($this->object->hasProperty('content')); | 
						|
		$this->assertFalse($this->object->hasProperty('content', false)); | 
						|
		$this->assertFalse($this->object->hasProperty('Content')); | 
						|
	} | 
						|
 | 
						|
	public function testCanGetProperty() | 
						|
	{ | 
						|
		$this->assertTrue($this->object->canGetProperty('Text')); | 
						|
		$this->assertTrue($this->object->canGetProperty('text')); | 
						|
		$this->assertFalse($this->object->canGetProperty('Caption')); | 
						|
		$this->assertTrue($this->object->canGetProperty('content')); | 
						|
		$this->assertFalse($this->object->canGetProperty('content', false)); | 
						|
		$this->assertFalse($this->object->canGetProperty('Content')); | 
						|
	} | 
						|
 | 
						|
	public function testCanSetProperty() | 
						|
	{ | 
						|
		$this->assertTrue($this->object->canSetProperty('Text')); | 
						|
		$this->assertTrue($this->object->canSetProperty('text')); | 
						|
		$this->assertFalse($this->object->canSetProperty('Object')); | 
						|
		$this->assertFalse($this->object->canSetProperty('Caption')); | 
						|
		$this->assertTrue($this->object->canSetProperty('content')); | 
						|
		$this->assertFalse($this->object->canSetProperty('content', false)); | 
						|
		$this->assertFalse($this->object->canSetProperty('Content')); | 
						|
	} | 
						|
 | 
						|
	public function testGetProperty() | 
						|
	{ | 
						|
		$this->assertTrue('default' === $this->object->Text); | 
						|
		$this->setExpectedException('yii\base\UnknownPropertyException'); | 
						|
		$value2 = $this->object->Caption; | 
						|
	} | 
						|
 | 
						|
	public function testSetProperty() | 
						|
	{ | 
						|
		$value = 'new value'; | 
						|
		$this->object->Text = $value; | 
						|
		$this->assertEquals($value, $this->object->Text); | 
						|
		$this->setExpectedException('yii\base\UnknownPropertyException'); | 
						|
		$this->object->NewMember = $value; | 
						|
	} | 
						|
 | 
						|
	public function testSetReadOnlyProperty() | 
						|
	{ | 
						|
		$this->setExpectedException('yii\base\InvalidCallException'); | 
						|
		$this->object->object = 'test'; | 
						|
	} | 
						|
 | 
						|
	public function testIsset() | 
						|
	{ | 
						|
		$this->assertTrue(isset($this->object->Text)); | 
						|
		$this->assertFalse(empty($this->object->Text)); | 
						|
 | 
						|
		$this->object->Text = ''; | 
						|
		$this->assertTrue(isset($this->object->Text)); | 
						|
		$this->assertTrue(empty($this->object->Text)); | 
						|
 | 
						|
		$this->object->Text = null; | 
						|
		$this->assertFalse(isset($this->object->Text)); | 
						|
		$this->assertTrue(empty($this->object->Text)); | 
						|
 | 
						|
		$this->assertFalse(isset($this->object->unknownProperty)); | 
						|
		$this->assertTrue(empty($this->object->unknownProperty)); | 
						|
	} | 
						|
 | 
						|
	public function testUnset() | 
						|
	{ | 
						|
		unset($this->object->Text); | 
						|
		$this->assertFalse(isset($this->object->Text)); | 
						|
		$this->assertTrue(empty($this->object->Text)); | 
						|
	} | 
						|
 | 
						|
	public function testUnsetReadOnlyProperty() | 
						|
	{ | 
						|
		$this->setExpectedException('yii\base\InvalidCallException'); | 
						|
		unset($this->object->object); | 
						|
	} | 
						|
 | 
						|
	public function testCallUnknownMethod() | 
						|
	{ | 
						|
		$this->setExpectedException('yii\base\UnknownMethodException'); | 
						|
		$this->object->unknownMethod(); | 
						|
	} | 
						|
 | 
						|
	public function testArrayProperty() | 
						|
	{ | 
						|
		$this->assertEquals([], $this->object->items); | 
						|
		// the following won't work | 
						|
		/* | 
						|
		$this->object->items[] = 1; | 
						|
		$this->assertEquals([1], $this->object->items); | 
						|
		*/ | 
						|
	} | 
						|
 | 
						|
	public function testObjectProperty() | 
						|
	{ | 
						|
		$this->assertTrue($this->object->object instanceof NewObject); | 
						|
		$this->assertEquals('object text', $this->object->object->text); | 
						|
		$this->object->object->text = 'new text'; | 
						|
		$this->assertEquals('new text', $this->object->object->text); | 
						|
	} | 
						|
 | 
						|
	public function testConstruct() | 
						|
	{ | 
						|
		$object = new NewObject(['text' => 'test text']); | 
						|
		$this->assertEquals('test text', $object->getText()); | 
						|
	} | 
						|
} | 
						|
 | 
						|
 | 
						|
class NewObject extends Object | 
						|
{ | 
						|
	private $_object = null; | 
						|
	private $_text = 'default'; | 
						|
	private $_items = []; | 
						|
	public $content; | 
						|
 | 
						|
	public function getText() | 
						|
	{ | 
						|
		return $this->_text; | 
						|
	} | 
						|
 | 
						|
	public function setText($value) | 
						|
	{ | 
						|
		$this->_text = $value; | 
						|
	} | 
						|
 | 
						|
	public function getObject() | 
						|
	{ | 
						|
		if (!$this->_object) { | 
						|
			$this->_object = new self; | 
						|
			$this->_object->_text = 'object text'; | 
						|
		} | 
						|
		return $this->_object; | 
						|
	} | 
						|
 | 
						|
	public function getExecute() | 
						|
	{ | 
						|
		return function ($param) { | 
						|
			return $param * 2; | 
						|
		}; | 
						|
	} | 
						|
 | 
						|
	public function getItems() | 
						|
	{ | 
						|
		return $this->_items; | 
						|
	} | 
						|
}
 | 
						|
 |