Completed
Branch trunk (78000f)
by SuperNova.WS
25:55 queued 09:00
created

AccessAccessorsTest   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 216
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
dl 0
loc 216
rs 10
c 0
b 0
f 0
wmc 9
lcom 1
cbo 3
1
<?php
2
3
/**
4
 * Created by Gorlum 10.02.2017 01:31
5
 */
6
7
use Common\AccessAccessors;
8
use Common\AccessorsV2;
9
10
/**
11
 * Class AccessAccessorsTest
12
 * @coversDefaultClass \Common\AccessAccessors
13
 */
14
class AccessAccessorsTest extends PHPUnit_Framework_TestCase {
15
16
  /**
17
   * @var AccessAccessors $object
18
   */
19
  protected $object;
20
21
  /**
22
   * @var AccessorsV2 $accessors
23
   */
24
  protected $accessors;
25
26
  public function setUp() {
27
    parent::setUp();
28
29
    $this->object = new AccessAccessors();
30
    $this->accessors = new AccessorsV2();
31
32
    $this->accessors->__setConstant = function ($that, $varName) {
33
      $that[$varName] = '__setConstant';
34
    };
35
36
    $this->accessors->__setVar = function ($that, $varName, $value) {
37
      $that[$varName] = $value;
38
    };
39
40
    $this->accessors->__getVar1 = function ($that, $varName) {
41
      return $that[$varName];
42
    };
43
44
    $this->accessors->__setVar2 = function ($that, $varName, $value) {
45
      $that[$varName] = $value;
46
    };
47
    $this->accessors->__getVar2 = function ($that, $varName) {
48
      return $that[$varName];
49
    };
50
51
    $this->accessors->__setVarModifySet = function ($that, $varName, $value) {
52
      $that[$varName] = $value . 'Set';
53
    };
54
55
    $this->accessors->__getVarModifyGet = function ($that, $varName) {
56
      return $that[$varName] . 'Get';
57
    };
58
59
    $this->accessors->__setVarModifySetGet = function ($that, $varName, $value) {
60
      $that[$varName] = $value . 'Set';
61
    };
62
    $this->accessors->__getVarModifySetGet = function ($that, $varName) {
63
      return $that[$varName] . 'Get';
64
    };
65
66
    $this->accessors->call = function ($that) {
67
      return 'Called' . $that->VarModifySet;
68
    };
69
70
    $this->accessors->share('__setShareSet', function ($that, $varName, $value) {
71
      $that[$varName] = $value . 'ShareSet';
72
    });
73
    $this->accessors->share('__getShareGet', function ($that, $varName) {
74
      return $that[$varName] . 'ShareGet';
75
    });
76
    $this->accessors->share('__setShareSetGet', function ($that, $varName, $value) {
77
      $that[$varName] = $value . 'ShareSet';
78
    });
79
    $this->accessors->share('__getShareSetGet', function ($that, $varName) {
80
      return $that[$varName] . 'ShareGet';
81
    });
82
  }
83
84
  public function tearDown() {
85
    unset($this->object);
86
    parent::tearDown();
87
  }
88
89
  /**
90
   * @covers ::__construct
91
   * @covers ::isEmpty
92
   * @covers ::clear
93
   */
94
  public function test__get() {
95
    $object = new AccessAccessors();
96
97
    $this->assertTrue($object->isEmpty());
98
    $this->assertFalse(isset($object->test));
99
    $this->assertNull($object->test);
100
  }
101
102
  public function dataSetterGetter() {
103
    return array(
104
      // Testing constant setter
105
      array('Constant', 'test', '__setConstant'),
106
      // Testing simple setter w/o getter
107
      array('Var', ' ', ' '),
108
      // Testing simple getter w/o setter
109
      array('Var1', 1, 1),
110
      // Testing simple setter and simple getter
111
      array('Var2', 2, 2),
112
      // Testing setting/getting w/o accessors
113
      array('Var3', 3, 3),
114
      // Value modification on set
115
      array('VarModifySet', 4, '4Set'),
116
      // Value modification on get
117
      array('VarModifyGet', 5, '5Get'),
118
      // Value modification on set and get
119
      array('VarModifySetGet', 6, '6SetGet'),
120
    );
121
  }
122
123
  /**
124
   * @covers ::setAccessors
125
   * @covers ::__get
126
   * @covers ::__isset
127
   * @covers ::__set
128
   * @covers ::__unset
129
   * @covers ::__call
130
   * @covers ::isEmpty
131
   *
132
   * @dataProvider dataSetterGetter
133
   */
134
  public function testSetterGetter($varName, $setValue, $expectedValue) {
135
    $this->object->setAccessors($this->accessors);
136
137
    $this->assertTrue($this->object->isEmpty());
138
139
    $this->assertFalse(isset($this->object->$varName));
140
    $this->object->$varName = $setValue;
141
    $this->assertEquals($expectedValue, $this->object->$varName);
142
    $this->assertTrue(isset($this->object->$varName));
143
    unset($this->object->$varName);
144
    $this->assertFalse(isset($this->object->$varName));
145
146
    $this->assertTrue($this->object->isEmpty());
147
  }
148
149
150
  public function dataShared() {
151
    return array(
152
      array('ShareSet', '1ShareSet'),
153
      array('ShareGet', '1ShareGet'),
154
      array('ShareSetGet', '1ShareSetShareGet'),
155
    );
156
  }
157
158
  /**
159
   * Testing shared accessors
160
   *
161
   * @covers ::setAccessors
162
   * @covers ::__get
163
   * @covers ::__set
164
   * @covers ::__call
165
   *
166
   * @dataProvider dataShared
167
   */
168
  public function testShared($varName, $expected) {
169
    $this->object->setAccessors($this->accessors);
170
171
    $this->object->$varName = 1;
172
    $this->assertEquals($expected, $this->object->$varName);
173
    $this->object->$varName = 2;
174
    $this->assertEquals($expected, $this->object->$varName);
175
  }
176
177
178
  /**
179
   * @covers ::isEmpty
180
   * @covers ::clear
181
   * @covers ::__get
182
   * @covers ::__set
183
   * @covers ::__call
184
   */
185
  public function testCall() {
186
    $this->object->setAccessors($this->accessors);
187
188
    $this->assertTrue($this->object->isEmpty());
189
190
    $this->object->VarModifySet = 1;
191
    $this->assertEquals('Called1Set', $this->object->call());
192
193
    $this->object->clear();
194
    $this->assertTrue($this->object->isEmpty());
195
  }
196
197
  /**
198
   * @covers ::isEmpty
199
   * @covers ::clear
200
   * @covers ::__get
201
   * @covers ::__set
202
   * @covers ::__call
203
   * @covers ::offsetGet
204
   * @covers ::offsetSet
205
   * @covers ::offsetExists
206
   * @covers ::offsetUnset
207
   */
208
  public function testArrayAccess() {
209
    $this->object->setAccessors($this->accessors);
210
211
    $this->assertTrue($this->object->isEmpty());
212
213
    // Bypassing getter
214
    $this->object->VarModifyGet = 1;
215
    $this->assertEquals('1Get', $this->object->VarModifyGet);
216
    $this->assertEquals(1, $this->object['VarModifyGet']);
217
218
    // Bypassing setter
219
    $this->object['VarModifySet'] = 2;
220
    $this->assertEquals(2, $this->object->VarModifySet);
221
    $this->assertEquals(2, $this->object['VarModifySet']);
222
223
    // Checking unset/isset
224
    $this->assertTrue(isset($this->object['VarModifySet']));
225
    unset($this->object['VarModifySet']);
226
    $this->assertFalse(isset($this->object['VarModifySet']));
227
  }
228
229
}
230