schemator-php

Форк
0
/
HasWritablePropertyTest.php 
128 строк · 3.5 Кб
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Smoren\Schemator\Tests\Unit\ObjectAccessHelper;
6

7
use Codeception\Test\Unit;
8
use Smoren\Schemator\Helpers\ObjectAccessHelper;
9
use Smoren\Schemator\Tests\Unit\Fixtures\ClassWithAccessibleProperties;
10
use stdClass;
11

12
class HasWritablePropertyTest extends Unit
13
{
14
    /**
15
     * @param stdClass $input
16
     * @param string $key
17
     * @return void
18
     * @dataProvider toStdClassTrueDataProvider
19
     */
20
    public function testToStdClassTrue(stdClass $input, string $key): void
21
    {
22
        // When
23
        $result = ObjectAccessHelper::hasWritableProperty($input, $key);
24

25
        // Then
26
        $this->assertTrue($result);
27
    }
28

29
    public function toStdClassTrueDataProvider(): array
30
    {
31
        $wrap = static function(array $input): object {
32
            return (object)$input;
33
        };
34

35
        return [
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 toStdClassFalseDataProvider
46
     */
47
    public function testToStdClassFalse(stdClass $input, string $key): void
48
    {
49
        // When
50
        $result = ObjectAccessHelper::hasWritableProperty($input, $key);
51

52
        // Then
53
        $this->assertFalse($result);
54
    }
55

56
    public function toStdClassFalseDataProvider(): array
57
    {
58
        $wrap = static function(array $input): object {
59
            return (object)$input;
60
        };
61

62
        return [
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 toObjectTrueDataProvider
85
     */
86
    public function testToObjectTrue(object $input, string $key): void
87
    {
88
        // When
89
        $result = ObjectAccessHelper::hasWritableProperty($input, $key);
90

91
        // Then
92
        $this->assertTrue($result);
93
    }
94

95
    public function toObjectTrueDataProvider(): array
96
    {
97
        return [
98
            [new ClassWithAccessibleProperties(), 'publicProperty'],
99
            [new ClassWithAccessibleProperties(), 'publicPropertyWithMethodsAccess'],
100
            [new ClassWithAccessibleProperties(), 'protectedPropertyWithMethodsAccess'],
101
            [new ClassWithAccessibleProperties(), 'privatePropertyWithMethodsAccess'],
102
        ];
103
    }
104

105
    /**
106
     * @param object $input
107
     * @param string $key
108
     * @return void
109
     * @dataProvider toObjectFalseDataProvider
110
     */
111
    public function testToObjectFalse(object $input, string $key): void
112
    {
113
        // When
114
        $result = ObjectAccessHelper::hasWritableProperty($input, $key);
115

116
        // Then
117
        $this->assertFalse($result);
118
    }
119

120
    public function toObjectFalseDataProvider(): array
121
    {
122
        return [
123
            [new ClassWithAccessibleProperties(), 'unknownProperty'],
124
            [new ClassWithAccessibleProperties(), 'protectedProperty'],
125
            [new ClassWithAccessibleProperties(), 'privateProperty'],
126
        ];
127
    }
128
}
129

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.