schemator-php
130 строк · 3.6 Кб
1<?php
2
3declare(strict_types=1);
4
5namespace Smoren\Schemator\Tests\Unit\ObjectAccessHelper;
6
7use Codeception\Test\Unit;
8use Smoren\Schemator\Helpers\ObjectAccessHelper;
9use Smoren\Schemator\Tests\Unit\Fixtures\ClassWithAccessibleProperties;
10use stdClass;
11
12class HasPropertyTest extends Unit
13{
14/**
15* @param stdClass $input
16* @param string $key
17* @return void
18* @dataProvider fromStdClassTrueDataProvider
19*/
20public function testFromStdClassTrue(stdClass $input, string $key): void
21{
22// When
23$result = ObjectAccessHelper::hasProperty($input, $key);
24
25// Then
26$this->assertTrue($result);
27}
28
29public function fromStdClassTrueDataProvider(): array
30{
31$wrap = static function(array $input): object {
32return (object)$input;
33};
34
35return [
36[$wrap(['a' => 1, 'b' => 2]), 'a'],
37[$wrap(['a' => 1, 'b' => 2]), 'b'],
38];
39}
40
41/**
42* @param stdClass $input
43* @param string $key
44* @return void
45* @dataProvider fromStdClassFalseDataProvider
46*/
47public function testFromStdClassFalse(stdClass $input, string $key): void
48{
49// When
50$result = ObjectAccessHelper::hasProperty($input, $key);
51
52// Then
53$this->assertFalse($result);
54}
55
56public function fromStdClassFalseDataProvider(): array
57{
58$wrap = static function(array $input): object {
59return (object)$input;
60};
61
62return [
63[$wrap([]), ''],
64[$wrap([]), ''],
65[$wrap([]), '0'],
66[$wrap([]), '0'],
67[$wrap([]), 'a'],
68[$wrap([]), 'b'],
69[$wrap(['a' => 1, 'b' => 2]), ''],
70[$wrap(['a' => 1, 'b' => 2]), ''],
71[$wrap(['a' => 1, 'b' => 2]), '0'],
72[$wrap(['a' => 1, 'b' => 2]), '0'],
73[$wrap(['a' => 1, 'b' => 2]), '1'],
74[$wrap(['a' => 1, 'b' => 2]), '1'],
75[$wrap(['a' => 1, 'b' => 2]), '2'],
76[$wrap(['a' => 1, 'b' => 2]), '2'],
77];
78}
79
80/**
81* @param object $input
82* @param string $key
83* @return void
84* @dataProvider fromObjectTrueDataProvider
85*/
86public function testFromObjectTrue(object $input, string $key): void
87{
88// When
89$result = ObjectAccessHelper::hasProperty($input, $key);
90
91// Then
92$this->assertTrue($result);
93}
94
95public function fromObjectTrueDataProvider(): array
96{
97return [
98[new ClassWithAccessibleProperties(), 'publicProperty'],
99[new ClassWithAccessibleProperties(), 'publicPropertyWithMethodsAccess'],
100[new ClassWithAccessibleProperties(), 'protectedProperty'],
101[new ClassWithAccessibleProperties(), 'protectedPropertyWithMethodsAccess'],
102[new ClassWithAccessibleProperties(), 'privateProperty'],
103[new ClassWithAccessibleProperties(), 'privatePropertyWithMethodsAccess'],
104];
105}
106
107/**
108* @param object $input
109* @param string $key
110* @return void
111* @dataProvider fromObjectFalseDataProvider
112*/
113public function testFromObjectFalse(object $input, string $key): void
114{
115// When
116$result = ObjectAccessHelper::hasProperty($input, $key);
117
118// Then
119$this->assertFalse($result);
120}
121
122public function fromObjectFalseDataProvider(): array
123{
124return [
125[new ClassWithAccessibleProperties(), ''],
126[new ClassWithAccessibleProperties(), '0'],
127[new ClassWithAccessibleProperties(), 'unknownProperty'],
128];
129}
130}
131