* @Copyright: copyright(2019) Easyswoole all rights reserved * @Description: SplBean 单元测试 */ namespace EasySwoole\Spl\Test; use EasySwoole\Spl\Test\Bean\Shops; use PHPUnit\Framework\TestCase; use EasySwoole\Spl\Test\Bean\TestBean; class BeanTest extends TestCase { /** * 获取类所有的public和protected 成员变量 */ function testAllProperty() { $bean = new TestBean([ 'a'=>'a', 'b'=>'b', 'c'=>'c', 'd_d'=>'d_d' ]); $this->assertEquals( ['a', 'b', 'd_d'], $bean->allProperty() ); } /** * 过滤并转换成数组数据 */ function testToArray() { $bean = new TestBean([ 'a'=>'a', 'b'=>'b', 'c'=>'c', 'd_d'=>'d_d' ]); $res = $bean->toArray(null, function ($a) { if (in_array($a, ['d_d'])) { return $a; } }); $this->assertEquals( ['d_d' => 'd_d'], $res ); } /** *获取过滤后带有字段别名的数组数据 */ function testToArrayWithMapping() { $bean = new TestBean([ 'a'=>1, 'b'=>2, 'c'=>3, 'd_d'=>4 ]); $res = $bean->toArrayWithMapping(['a', 'b', 'd-d'], function ($val) { return $val; }); $this->assertEquals( [ 'a' => 1, 'b' => 2, 'd-d' => 4 ], $res ); } /** * 设置类属性 */ function testArrayToBean() { $bean = new TestBean([ 'a'=>'a', 'b'=>'b', 'c'=>'c', 'd_d'=>'d_d' ]); $this->assertEquals([ 'a'=>'a', 'b'=>'b', 'd_d'=>'d_d' ],$bean->toArray()); $this->assertEquals([ 'a'=>'a', 'b'=>'b', ],$bean->toArray(['a','b'])); $this->assertEquals([ 'a'=>'a', 'd-d'=>'d_d' ],$bean->toArrayWithMapping(['a','d-d'])); } /** * 设置类成员变量 */ function testAddProperty() { $bean = new TestBean(); $bean->addProperty('a', 'es'); $bean->addProperty('b', 'es'); $bean->addProperty('d_d', 'es'); $this->assertEquals( [ 'a' => 'es', 'b' => 'es', 'd_d' => 'es', ], $bean->toArray() ); } /** * 获取类成员变量值 */ function testGetProperty() { $bean = new TestBean([ 'a'=>'a', 'b'=>'b', 'c'=>'c', 'd_d'=>'d_d' ]); $this->assertEquals('a', $bean->getProperty('a')); } /** * 获取类成员变量集合 */ function testJsonSerialize() { $bean = new TestBean([ 'a'=>'a', 'b'=>'b', 'c'=>'c', 'd_d'=>'d_d' ]); $this->assertEquals( [ 'a'=>'a', 'b'=>'b', 'd_d'=>'d_d' ], $bean->jsonSerialize() ); } /** * 初始化操作 */ function testInitialize() { $bean = new TestBean([ 'a'=>'a', 'b'=>'b', 'c'=>'c', 'd_d'=>'d_d' ]); $this->assertEquals( [ 'a'=>'a', 'b'=>'b', 'd_d'=>'d_d' ], $bean->jsonSerialize() ); } /** * 设置keyMapping关系,也就是字段别名 */ function testSetKeyMapping() { $bean = new TestBean([ 'a'=>'a', 'b'=>'b', 'c'=>'c', 'd-d'=>'d' ]); $this->assertEquals( [ 'a'=>'a', 'b'=>'b', 'd_d'=>'d' ], $bean->jsonSerialize() ); } /** * 设置classMapping关系,也就是关联类 */ // function testSetClassMapping() { // return true; // $bean = new TestBean([ // 'a'=>'a', // 'b'=>'b', // 'c'=>'c', // 'd-d'=>'d' // ]); // $this->assertEquals( // Shops::class, // get_class($bean->jsonSerialize()['shops']) // ); // } function testRestore() { $bean = new TestBean([ 'a'=>'a', 'b'=>'b', 'c'=>'c', 'd_d'=>'d_d' ]); $this->assertEquals([ 'a'=>2, 'b'=>null, 'd_d'=>null ],$bean->restore()->toArray()); $this->assertEquals([ 'a'=>2 ],$bean->restore()->toArray(null,$bean::FILTER_NOT_NULL)); $bean->restore(['a'=>2,'b'=>3]); } }