writeonlyPropertiesProvider()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 0
loc 9
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * PHP: Nelson Martell Library file
5
 *
6
 * Copyright © 2016-2021 Nelson Martell (http://nelson6e65.github.io)
7
 *
8
 * Licensed under The MIT License (MIT)
9
 * For full copyright and license information, please see the LICENSE
10
 * Redistributions of files must retain the above copyright notice.
11
 *
12
 * @copyright 2016-2021 Nelson Martell
13
 * @link      http://nelson6e65.github.io/php_nml/
14
 * @since     v0.6.0
15
 * @license   http://www.opensource.org/licenses/mit-license.php The MIT License (MIT)
16
 * */
17
18
namespace NelsonMartell\Test\DataProviders;
19
20
use NelsonMartell\Test\DataProviders\ExampleClass\A;
21
use NelsonMartell\Test\DataProviders\ExampleClass\B;
22
use NelsonMartell\Test\DataProviders\ExampleClass\C;
23
use NelsonMartell\Test\DataProviders\ExampleClass\D;
24
use NelsonMartell\Test\DataProviders\ExampleClass\WithMagicPropertiesBaseClass;
25
use NelsonMartell\Test\DataProviders\ExampleClass\WithMagicPropertiesChildClass;
26
use NelsonMartell\Test\DataProviders\ExampleClass\WithoutMagicPropertiesClass;
27
use NelsonMartell\Test\Helpers\ExporterPlugin;
28
use NelsonMartell\Test\Helpers\HasReadOnlyProperties;
29
use NelsonMartell\Test\Helpers\HasReadWriteProperties;
30
use NelsonMartell\Test\Helpers\HasWriteOnlyProperties;
31
use NelsonMartell\Test\Helpers\HasUnaccesibleProperties;
32
use NelsonMartell\Test\Helpers\ImplementsIStrictPropertiesContainer;
33
use NelsonMartell\PropertiesHandler;
34
35
/**
36
 * Data providers for NelsonMartell\Test\TestCase\PropertiesHandlerTest.
37
 *
38
 * @author Nelson Martell <[email protected]>
39
 * @internal
40
 * */
41
trait PropertiesHandlerTestProvider
42
{
43
    use ExporterPlugin;
44
    use ImplementsIStrictPropertiesContainer;
45
    use HasUnaccesibleProperties;
46
    use HasWriteOnlyProperties;
47
    use HasReadWriteProperties;
48
    use HasReadOnlyProperties;
49
50
    public function getTargetClassName(): string
51
    {
52
        return PropertiesHandler::class;
53
    }
54
55
    public function objectInstanceProvider(): array
56
    {
57
        $a = new A();
58
        $b = new B();
59
        $c = new C();
60
        $d = new D();
61
62
        return [
63
            [$a],
64
            [$b],
65
            [$c],
66
            [$d],
67
        ];
68
    }
69
70
71
    public function writeonlyPropertiesProvider(): array
72
    {
73
        $a = new A();
0 ignored issues
show
Unused Code introduced by
The assignment to $a is dead and can be removed.
Loading history...
74
        $b = new B();
75
        $c = new C();
0 ignored issues
show
Unused Code introduced by
The assignment to $c is dead and can be removed.
Loading history...
76
        $d = new D();
0 ignored issues
show
Unused Code introduced by
The assignment to $d is dead and can be removed.
Loading history...
77
78
        return [
79
            'Set parent attribute accesible from parent (write-only property)' => [$b, 'property2', 2],
80
        ];
81
    }
82
83
    public function readwritePropertiesProvider(): array
84
    {
85
        $a = new A();
86
        $c = new C();
87
        $d = new D();
88
89
        $mb = new WithMagicPropertiesBaseClass();
90
        $mc = new WithMagicPropertiesChildClass();
91
        $wm = new WithoutMagicPropertiesClass();
92
93
        return [
94
            'Set attribute with setter'                                   => [$a, 'property3', 3, (3 * 100)],
95
            'Custom prefix (parent using default): Own property directly' => [$c, 'property6', 6, (6 * 99)],
96
            'Custom prefix (parent using custom): Own property directly'  => [$d, 'property9', -9, -(9 * 10)],
97
            'Custom prefix (parent using default)): Parent property '     => [$c, 'property3', -3, -(3 * 100)],
98
99
            // Magic examples
100
            'Not implementing IMagicPropertiesContainer'                  => [$wm, 'noMagicProperty', 'yes', 'yes'],
101
            'Using IMagicPropertiesContainer'                             => [$mb, 'baseProperty', 'base', 'base'],
102
            'Parent using IMagicPropertiesContainer: Parent property'     => [$mc, 'baseProperty', 'base', 'base'],
103
            'Parent using IMagicPropertiesContainer: Child property'      => [$mc, 'childProperty', 'child', 'child'],
104
        ];
105
    }
106
107
108
    public function readonlyPropertiesProvider(): array
109
    {
110
        $a = new A();
111
        $b = new B();
112
        $c = new C();
113
        $d = new D();
114
115
        $mc = new WithMagicPropertiesChildClass();
116
117
        return [
118
            'Get property accesible via a wrapper'        => [$a, 'property1', -1],
119
            'Get property accesible using attribute name' => [$a, 'attribute2', -2],
120
            'Get property accesible from parent only'     => [$b, 'property4', -4],
121
            'Custom prefix: Own attribute directly'       => [$c, 'attribute5', (-5 * 2)],
122
            'Custom prefix: Parent property'              => [$d, 'property1', -1],
123
124
            // Magic
125
            'Parent using IMagicPropertiesContainer'      => [$mc, 'readOnlyChildProperty', 1],
126
        ];
127
    }
128
129
    public function unaccesiblePropertiesProvider(): array
130
    {
131
        $a = new A();
132
        $b = new B();
133
        $c = new C();
0 ignored issues
show
Unused Code introduced by
The assignment to $c is dead and can be removed.
Loading history...
134
        $d = new D();
135
        $w = new WithoutMagicPropertiesClass();
136
137
        return [
138
            'Get inexistent property in base'                             => [$a, 'property4'],
139
            'Get existent property with case changed'                     => [$a, 'Property1'],
140
            'Get inexistent property in child'                            => [$b, 'property5'],
141
            'Set inexistent property'                                     => [$a, 'property6', 6],
142
            'Set read-only property'                                      => [$b, 'property4', 4],
143
            'Set read-only attribute'                                     => [$a, 'attribute4', 4],
144
            'Set write-only property'                                     => [$a, 'property2', 2],
145
            'Set unaccesible property from parent'                        => [$b, 'property1', 1],
146
            'Existent, but wrong prefixes'                                => [$b, 'property7'],
147
            'Existent, but wrong prefixes 7'                              => [$b, 'property7', 7],
148
            'Double definition of custom getter prefix: D::C'             => [$d, 'property6'],
149
            'Double definition of custom setter prefix: D::C'             => [$d, 'property6', 6],
150
151
            'Unaccesibe since not implementing IMacigPropertiesContainer' => [$w, 'magicProperty', 'no'],
152
        ];
153
    }
154
}
155