‪TYPO3CMS  ‪main
ObjectAccessTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
30 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
31 
32 final class ‪ObjectAccessTest extends UnitTestCase
33 {
34  protected bool ‪$resetSingletonInstances = true;
35 
37 
38  protected function ‪setUp(): void
39  {
40  parent::setUp();
41  $this->dummyObject = new ‪DummyClassWithGettersAndSetters();
42  $this->dummyObject->setProperty('string1');
43  $this->dummyObject->setAnotherProperty(42);
44  }
45 
46  #[Test]
48  {
49  $property = ‪ObjectAccess::getProperty($this->dummyObject, 'property');
50  self::assertEquals('string1', $property);
51  }
52 
53  #[Test]
55  {
56  $property = ‪ObjectAccess::getProperty($this->dummyObject, 'publicProperty2');
57  self::assertEquals(42, $property, 'A property of a given object was not returned correctly.');
58  }
59 
60  #[Test]
62  {
63  $this->expectException(PropertyNotAccessibleException::class);
64  $this->expectExceptionCode(1476109666);
65  ‪ObjectAccess::getProperty($this->dummyObject, 'notExistingProperty');
66  }
67 
68  #[Test]
70  {
71  $result = ‪ObjectAccess::getProperty([], 'notExistingProperty');
72  self::assertNull($result);
73  }
74 
75  #[Test]
77  {
78  $property = ‪ObjectAccess::getProperty($this->dummyObject, 'booleanProperty');
79  self::assertTrue($property);
80  }
81 
82  #[Test]
84  {
85  self::assertFalse(‪ObjectAccess::setProperty($this->dummyObject, 'protectedProperty', 42));
86  }
87 
88  #[Test]
90  {
91  ‪ObjectAccess::setProperty($this->dummyObject, 'property', 4242);
92  self::assertEquals(4242, $this->dummyObject->getProperty(), 'setProperty does not work with setter.');
93  }
94 
95  #[Test]
96  public function ‪setPropertyWorksWithPublicProperty(): void
97  {
98  ‪ObjectAccess::setProperty($this->dummyObject, 'publicProperty', 4242);
99  self::assertEquals(4242, $this->dummyObject->publicProperty, 'setProperty does not work with public property.');
100  }
101 
102  #[Test]
104  {
105  $arrayObject = new \ArrayObject();
106  $array = [];
107  ‪ObjectAccess::setProperty($arrayObject, 'publicProperty', 4242);
108  ‪ObjectAccess::setProperty($array, 'key', 'value');
109  self::assertEquals(4242, $arrayObject['publicProperty']);
110  self::assertEquals('value', $array['key']);
111  }
112 
113  #[Test]
115  {
116  $arrayObject = new \ArrayObject(['key' => 'value']);
117  $actual = ‪ObjectAccess::getProperty($arrayObject, 'key');
118  self::assertEquals('value', $actual, 'getProperty does not work with ArrayObject property.');
119  }
120 
121  #[Test]
123  {
124  $objectStorage = new ‪ObjectStorage();
125  $object = new \stdClass();
126  $objectStorage->attach($object);
127  $actual = ‪ObjectAccess::getProperty($objectStorage, '0');
128  self::assertSame($object, $actual, 'getProperty does not work with ObjectStorage property.');
129  }
130 
131  #[Test]
133  {
134  $arrayAccessInstance = new ‪ArrayAccessClass(['key' => 'value']);
135  $actual = ‪ObjectAccess::getProperty($arrayAccessInstance, 'key');
136  self::assertEquals('value', $actual, 'getProperty does not work with Array Access property.');
137  }
138 
139  #[Test]
141  {
142  $arrayAccessInstance = new ‪ArrayAccessClass([]);
143  $actual = ‪ObjectAccess::getProperty($arrayAccessInstance, 'virtual');
144  self::assertEquals('default-value', $actual, 'getProperty does not work with Array Access property.');
145  }
146 
147  #[Test]
149  {
150  $arrayAccessInstance = new ‪ArrayAccessClass(['virtual' => 'overridden-value']);
151  $actual = ‪ObjectAccess::getProperty($arrayAccessInstance, 'virtual');
152  self::assertEquals('overridden-value', $actual, 'getProperty does not work with Array Access property.');
153  }
154 
155  #[Test]
157  {
158  $array = ['key' => 'value'];
159  $expected = ‪ObjectAccess::getProperty($array, 'key');
160  self::assertEquals('value', $expected, 'getProperty does not work with Array property.');
161  }
162 
163  #[Test]
165  {
166  $array = ['parent' => ['key' => 'value']];
167  $actual = ‪ObjectAccess::getPropertyPath($array, 'parent.key');
168  self::assertEquals('value', $actual, 'getPropertyPath does not work with Array property.');
169  }
170 
171  #[Test]
173  {
174  $array = ['parent' => new \ArrayObject(['key' => 'value'])];
175  $actual = ‪ObjectAccess::getPropertyPath($array, 'parent.key');
176  self::assertEquals('value', $actual, 'getPropertyPath does not work with Array Access property.');
177  }
178 
179  #[Test]
181  {
182  $objectStorage = $this->‪setUpObjectStorageWithTwoItems();
183  $array = [
184  'parent' => $objectStorage,
185  ];
186  self::assertSame('value', ‪ObjectAccess::getPropertyPath($array, 'parent.0.key'));
187  self::assertSame('value2', ‪ObjectAccess::getPropertyPath($array, 'parent.1.key'));
188  }
189 
190  #[Test]
192  {
193  $objectStorage = $this->‪setUpObjectStorageWithTwoItems();
194  $i = 0;
195  foreach ($objectStorage as $object) {
196  ‪ObjectAccess::getPropertyPath($objectStorage, '0.key');
197  $i++;
198  }
199  self::assertSame(2, $i);
200  }
201 
203  {
204  $objectStorage = new ‪ObjectStorage();
205  $exampleObject = new \stdClass();
206  $exampleObject->key = 'value';
207  $exampleObject2 = new \stdClass();
208  $exampleObject2->key = 'value2';
209  $objectStorage->attach($exampleObject);
210  $objectStorage->attach($exampleObject2);
211  return $objectStorage;
212  }
213 
214  #[Test]
216  {
217  $objectStorage = $this->‪setUpSplObjectStorageWithTwoItems();
218  $array = [
219  'parent' => $objectStorage,
220  ];
221  self::assertSame('value', ‪ObjectAccess::getPropertyPath($array, 'parent.0.key'));
222  self::assertSame('value2', ‪ObjectAccess::getPropertyPath($array, 'parent.1.key'));
223  }
224 
225  #[Test]
227  {
228  $objectStorage = $this->‪setUpSplObjectStorageWithTwoItems();
229  $i = 0;
230  foreach ($objectStorage as $object) {
231  ‪ObjectAccess::getPropertyPath($objectStorage, '0.key');
232  $i++;
233  }
234  self::assertSame(2, $i);
235  }
236 
237  protected function ‪setUpSplObjectStorageWithTwoItems(): \SplObjectStorage
238  {
239  $objectStorage = new \SplObjectStorage();
240  $exampleObject = new \stdClass();
241  $exampleObject->key = 'value';
242  $exampleObject2 = new \stdClass();
243  $exampleObject2->key = 'value2';
244  $objectStorage->attach($exampleObject);
245  $objectStorage->attach($exampleObject2);
246  return $objectStorage;
247  }
248 
249  #[Test]
251  {
252  GeneralUtility::setSingletonInstance(ReflectionService::class, new ‪ReflectionService(new ‪NullFrontend('extbase'), 'ClassSchemata'));
253  $gettablePropertyNames = ‪ObjectAccess::getGettablePropertyNames($this->dummyObject);
254  $expectedPropertyNames = ['anotherBooleanProperty', 'anotherProperty', 'booleanProperty', 'property', 'property2', 'publicProperty', 'publicProperty2', 'someValue'];
255  self::assertEquals($gettablePropertyNames, $expectedPropertyNames, 'getGettablePropertyNames returns not all gettable properties.');
256  }
257 
258  #[Test]
260  {
261  $dateTimeZone = new \DateTimeZone('+2');
262  GeneralUtility::setSingletonInstance(ReflectionService::class, new ‪ReflectionService(new ‪NullFrontend('extbase'), 'ClassSchemata'));
263  $gettablePropertyNames = ‪ObjectAccess::getGettablePropertyNames($dateTimeZone);
264  $expectedPropertyNames = ['location', 'name'];
265  foreach ($expectedPropertyNames as $expectedPropertyName) {
266  self::assertContains($expectedPropertyName, $gettablePropertyNames);
267  }
268  }
269 
270  #[Test]
272  {
273  GeneralUtility::setSingletonInstance(ReflectionService::class, new ‪ReflectionService(new ‪NullFrontend('extbase'), 'ClassSchemata'));
274  $settablePropertyNames = ‪ObjectAccess::getSettablePropertyNames($this->dummyObject);
275  $expectedPropertyNames = ['anotherBooleanProperty', 'anotherProperty', 'property', 'property2', 'publicProperty', 'publicProperty2', 'writeOnlyMagicProperty'];
276  self::assertEquals($settablePropertyNames, $expectedPropertyNames, 'getSettablePropertyNames returns not all settable properties.');
277  }
278 
279  #[Test]
281  {
282  $stdClassObject = new \stdClass();
283  $stdClassObject->property = 'string1';
284  $stdClassObject->property2 = null;
285  $settablePropertyNames = ‪ObjectAccess::getSettablePropertyNames($stdClassObject);
286  $expectedPropertyNames = ['property', 'property2'];
287  self::assertEquals($expectedPropertyNames, $settablePropertyNames, 'getSettablePropertyNames returns not all settable properties.');
288  }
289 
290  #[Test]
292  {
293  GeneralUtility::setSingletonInstance(ReflectionService::class, new ‪ReflectionService(new ‪NullFrontend('extbase'), 'ClassSchemata'));
294  $allProperties = ObjectAccess::getGettableProperties($this->dummyObject);
295  $expectedProperties = [
296  'anotherBooleanProperty' => true,
297  'anotherProperty' => 42,
298  'booleanProperty' => true,
299  'property' => 'string1',
300  'property2' => null,
301  'publicProperty' => null,
302  'publicProperty2' => 42,
303  'someValue' => true,
304  ];
305  self::assertEquals($allProperties, $expectedProperties, 'expectedProperties did not return the right values for the properties.');
306  }
307 
308  #[Test]
310  {
311  $stdClassObject = new \stdClass();
312  $stdClassObject->property = 'string1';
313  $stdClassObject->property2 = null;
314  $stdClassObject->publicProperty2 = 42;
315  $allProperties = ObjectAccess::getGettableProperties($stdClassObject);
316  $expectedProperties = [
317  'property' => 'string1',
318  'property2' => null,
319  'publicProperty2' => 42,
320  ];
321  self::assertEquals($expectedProperties, $allProperties, 'expectedProperties did not return the right values for the properties.');
322  }
323 
324  #[Test]
326  {
327  self::assertTrue(‪ObjectAccess::isPropertySettable($this->dummyObject, 'writeOnlyMagicProperty'));
328  self::assertTrue(‪ObjectAccess::isPropertySettable($this->dummyObject, 'publicProperty'));
329  self::assertTrue(‪ObjectAccess::isPropertySettable($this->dummyObject, 'property'));
330  self::assertFalse(‪ObjectAccess::isPropertySettable($this->dummyObject, 'privateProperty'));
331  }
332 
333  #[Test]
334  public function ‪isPropertySettableWorksOnStdClass(): void
335  {
336  $stdClassObject = new \stdClass();
337  $stdClassObject->property = 'foo';
338  self::assertTrue(‪ObjectAccess::isPropertySettable($stdClassObject, 'property'));
339  self::assertFalse(‪ObjectAccess::isPropertySettable($stdClassObject, 'undefinedProperty'));
340  }
341 
346  #[DataProvider('propertyGettableTestValues')]
347  #[Test]
348  public function ‪isPropertyGettableTellsIfAPropertyCanBeRetrieved($property, $expected): void
349  {
350  self::assertEquals($expected, ‪ObjectAccess::isPropertyGettable($this->dummyObject, $property));
351  }
352 
353  public static function ‪propertyGettableTestValues(): array
354  {
355  return [
356  ['publicProperty', true],
357  ['property', true],
358  ['booleanProperty', true],
359  ['anotherBooleanProperty', true],
360  ['privateProperty', false],
361  ['writeOnlyMagicProperty', false],
362  ];
363  }
364 
365  #[Test]
367  {
368  $arrayObject = new \ArrayObject();
369  $arrayObject['key'] = 'v';
370  self::assertTrue(‪ObjectAccess::isPropertyGettable($arrayObject, 'key'));
371  self::assertFalse(‪ObjectAccess::isPropertyGettable($arrayObject, 'undefinedKey'));
372  }
373 
374  #[Test]
376  {
378  $object = new class () extends \ArrayObject {
379  private $regularProperty = 'foo';
380 
381  public function getRegularProperty(): string
382  {
383  return $this->regularProperty;
384  }
385  };
386 
387  $object['key'] = 'v';
388  self::assertTrue(‪ObjectAccess::isPropertyGettable($object, 'regularProperty'));
389  self::assertTrue(‪ObjectAccess::isPropertyGettable($object, 'key'));
390 
391  self::assertSame('foo', ‪ObjectAccess::getProperty($object, 'regularProperty'));
392  self::assertSame('v', ‪ObjectAccess::getProperty($object, 'key'));
393  }
394 
395  #[Test]
396  public function ‪isPropertyGettableWorksOnStdClass(): void
397  {
398  $stdClassObject = new \stdClass();
399  $stdClassObject->property = 'foo';
400  self::assertTrue(‪ObjectAccess::isPropertyGettable($stdClassObject, 'property'));
401  self::assertFalse(‪ObjectAccess::isPropertyGettable($stdClassObject, 'undefinedProperty'));
402  }
403 
404  #[Test]
406  {
407  $alternativeObject = new ‪DummyClassWithGettersAndSetters();
408  $alternativeObject->setProperty('test');
409  $this->dummyObject->setProperty2($alternativeObject);
410  $expected = 'test';
411  $actual = ‪ObjectAccess::getPropertyPath($this->dummyObject, 'property2.property');
412  self::assertEquals($expected, $actual);
413  }
414 
415  #[Test]
417  {
418  $alternativeObject = new ‪DummyClassWithGettersAndSetters();
419  $alternativeObject->setProperty(new \stdClass());
420  $this->dummyObject->setProperty2($alternativeObject);
421  self::assertNull(‪ObjectAccess::getPropertyPath($this->dummyObject, 'property2.property.not.existing'));
422  }
423 
424  #[Test]
426  {
427  $object = new \stdClass();
428  $object->foo = 'Hello World';
429  self::assertNull(‪ObjectAccess::getPropertyPath($object, 'foo.bar'));
430  }
431 }
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\isPropertySettableWorksOnStdClass
‪isPropertySettableWorksOnStdClass()
Definition: ObjectAccessTest.php:334
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\setPropertyWorksWithPublicProperty
‪setPropertyWorksWithPublicProperty()
Definition: ObjectAccessTest.php:96
‪TYPO3\CMS\Extbase\Reflection\ObjectAccess\getPropertyPath
‪static mixed getPropertyPath(object|array $subject, string $propertyPath)
Definition: ObjectAccess.php:128
‪TYPO3\CMS\Extbase\Reflection\ObjectAccess\getProperty
‪static mixed getProperty(object|array $subject, string $propertyName)
Definition: ObjectAccess.php:59
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyCanAccessPropertiesOfArrayAccessWithPriorityForOffsetIfOffsetExists
‪getPropertyCanAccessPropertiesOfArrayAccessWithPriorityForOffsetIfOffsetExists()
Definition: ObjectAccessTest.php:148
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getSettablePropertyNamesReturnsAllPropertiesWhichAreAvailable
‪getSettablePropertyNamesReturnsAllPropertiesWhichAreAvailable()
Definition: ObjectAccessTest.php:271
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyCanAccessPropertiesOfAnObjectImplementingArrayAccess
‪getPropertyCanAccessPropertiesOfAnObjectImplementingArrayAccess()
Definition: ObjectAccessTest.php:132
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getSettablePropertyNamesReturnsPropertyNamesOfStdClass
‪getSettablePropertyNamesReturnsPropertyNamesOfStdClass()
Definition: ObjectAccessTest.php:280
‪TYPO3\CMS\Extbase\Reflection\ObjectAccess\setProperty
‪static bool setProperty(object|array &$subject, string $propertyName, mixed $propertyValue)
Definition: ObjectAccess.php:158
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathOnSplObjectStorageDoesNotAffectOngoingLoop
‪getPropertyPathOnSplObjectStorageDoesNotAffectOngoingLoop()
Definition: ObjectAccessTest.php:226
‪TYPO3\CMS\Extbase\Reflection\Exception\PropertyNotAccessibleException
Definition: PropertyNotAccessibleException.php:25
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathCanAccessPropertiesOfAnExtbaseObjectStorageObject
‪getPropertyPathCanAccessPropertiesOfAnExtbaseObjectStorageObject()
Definition: ObjectAccessTest.php:180
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getGettablePropertyNamesRespectsMethodArguments
‪getGettablePropertyNamesRespectsMethodArguments()
Definition: ObjectAccessTest.php:259
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\isPropertyGettableTellsIfAPropertyCanBeRetrieved
‪isPropertyGettableTellsIfAPropertyCanBeRetrieved($property, $expected)
Definition: ObjectAccessTest.php:348
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\isPropertyGettableWorksOnObjectsMixingRegularPropertiesAndArrayAccess
‪isPropertyGettableWorksOnObjectsMixingRegularPropertiesAndArrayAccess()
Definition: ObjectAccessTest.php:375
‪TYPO3\CMS\Core\Cache\Frontend\NullFrontend
Definition: NullFrontend.php:30
‪TYPO3\CMS\Extbase\Reflection\ObjectAccess\isPropertySettable
‪static isPropertySettable(object $object, string $propertyName)
Definition: ObjectAccess.php:316
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathCanRecursivelyGetPropertiesOfAnObject
‪getPropertyPathCanRecursivelyGetPropertiesOfAnObject()
Definition: ObjectAccessTest.php:405
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\Fixture\DummyClassWithGettersAndSetters
Definition: DummyClassWithGettersAndSetters.php:24
‪TYPO3\CMS\Extbase\Reflection\ObjectAccess
Definition: ObjectAccess.php:39
‪TYPO3\CMS\Extbase\Persistence\ObjectStorage
Definition: ObjectStorage.php:34
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyThrowsExceptionIfPropertyDoesNotExist
‪getPropertyThrowsExceptionIfPropertyDoesNotExist()
Definition: ObjectAccessTest.php:61
‪TYPO3\CMS\Extbase\Reflection\ReflectionService
Definition: ReflectionService.php:28
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyCanAccessPropertiesOfAnArray
‪getPropertyCanAccessPropertiesOfAnArray()
Definition: ObjectAccessTest.php:156
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathReturnsNullForNonExistingPropertyPath
‪getPropertyPathReturnsNullForNonExistingPropertyPath()
Definition: ObjectAccessTest.php:416
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\setUpObjectStorageWithTwoItems
‪setUpObjectStorageWithTwoItems()
Definition: ObjectAccessTest.php:202
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyReturnsExpectedValueForPublicProperty
‪getPropertyReturnsExpectedValueForPublicProperty()
Definition: ObjectAccessTest.php:54
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getGettablePropertiesReturnsPropertiesOfStdClass
‪getGettablePropertiesReturnsPropertiesOfStdClass()
Definition: ObjectAccessTest.php:309
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\setUp
‪setUp()
Definition: ObjectAccessTest.php:38
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyTriesToCallABooleanGetterMethodIfItExists
‪getPropertyTriesToCallABooleanGetterMethodIfItExists()
Definition: ObjectAccessTest.php:76
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\isPropertyGettableWorksOnArrayAccessObjects
‪isPropertyGettableWorksOnArrayAccessObjects()
Definition: ObjectAccessTest.php:366
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\setPropertyCallsASetterMethodToSetThePropertyValueIfOneIsAvailable
‪setPropertyCallsASetterMethodToSetThePropertyValueIfOneIsAvailable()
Definition: ObjectAccessTest.php:89
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathCanAccessPropertiesOfAnArray
‪getPropertyPathCanAccessPropertiesOfAnArray()
Definition: ObjectAccessTest.php:164
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyReturnsNullIfArrayKeyDoesNotExist
‪getPropertyReturnsNullIfArrayKeyDoesNotExist()
Definition: ObjectAccessTest.php:69
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\propertyGettableTestValues
‪static propertyGettableTestValues()
Definition: ObjectAccessTest.php:353
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\$resetSingletonInstances
‪bool $resetSingletonInstances
Definition: ObjectAccessTest.php:34
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\setUpSplObjectStorageWithTwoItems
‪setUpSplObjectStorageWithTwoItems()
Definition: ObjectAccessTest.php:237
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyCanAccessPropertiesOfAnObjectStorageObject
‪getPropertyCanAccessPropertiesOfAnObjectStorageObject()
Definition: ObjectAccessTest.php:122
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getGettablePropertiesReturnsTheCorrectValuesForAllProperties
‪getGettablePropertiesReturnsTheCorrectValuesForAllProperties()
Definition: ObjectAccessTest.php:291
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\isPropertyGettableWorksOnStdClass
‪isPropertyGettableWorksOnStdClass()
Definition: ObjectAccessTest.php:396
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\$dummyObject
‪DummyClassWithGettersAndSetters $dummyObject
Definition: ObjectAccessTest.php:36
‪TYPO3\CMS\Extbase\Reflection\ObjectAccess\getGettablePropertyNames
‪static list< string > getGettablePropertyNames(object $object)
Definition: ObjectAccess.php:185
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyReturnsExpectedValueForGetterProperty
‪getPropertyReturnsExpectedValueForGetterProperty()
Definition: ObjectAccessTest.php:47
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\Fixture\ArrayAccessClass
Definition: ArrayAccessClass.php:24
‪TYPO3\CMS\Extbase\Reflection\ObjectAccess\isPropertyGettable
‪static isPropertyGettable(object|array $object, string $propertyName)
Definition: ObjectAccess.php:335
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyCanAccessPropertiesOfAnArrayObject
‪getPropertyCanAccessPropertiesOfAnArrayObject()
Definition: ObjectAccessTest.php:114
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathReturnsNullIfSubjectOnPathIsNoObject
‪getPropertyPathReturnsNullIfSubjectOnPathIsNoObject()
Definition: ObjectAccessTest.php:425
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\setPropertyReturnsFalseIfPropertyIsNotAccessible
‪setPropertyReturnsFalseIfPropertyIsNotAccessible()
Definition: ObjectAccessTest.php:83
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathCanAccessPropertiesOfAnObjectImplementingArrayAccess
‪getPropertyPathCanAccessPropertiesOfAnObjectImplementingArrayAccess()
Definition: ObjectAccessTest.php:172
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\setPropertyCanDirectlySetValuesInAnArrayObjectOrArray
‪setPropertyCanDirectlySetValuesInAnArrayObjectOrArray()
Definition: ObjectAccessTest.php:103
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getGettablePropertyNamesReturnsAllPropertiesWhichAreAvailable
‪getGettablePropertyNamesReturnsAllPropertiesWhichAreAvailable()
Definition: ObjectAccessTest.php:250
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathOnObjectStorageDoesNotAffectOngoingLoop
‪getPropertyPathOnObjectStorageDoesNotAffectOngoingLoop()
Definition: ObjectAccessTest.php:191
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest
Definition: ObjectAccessTest.php:33
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyPathCanAccessPropertiesOfAnSplObjectStorageObject
‪getPropertyPathCanAccessPropertiesOfAnSplObjectStorageObject()
Definition: ObjectAccessTest.php:215
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\getPropertyCanAccessPropertiesOfArrayAccessWithGetterMethodWhenOffsetNotExists
‪getPropertyCanAccessPropertiesOfArrayAccessWithGetterMethodWhenOffsetNotExists()
Definition: ObjectAccessTest.php:140
‪TYPO3\CMS\Extbase\Reflection\ObjectAccess\getSettablePropertyNames
‪static list< string > getSettablePropertyNames(object $object)
Definition: ObjectAccess.php:281
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection
‪TYPO3\CMS\Extbase\Tests\Unit\Reflection\ObjectAccessTest\isPropertySettableTellsIfAPropertyCanBeSet
‪isPropertySettableTellsIfAPropertyCanBeSet()
Definition: ObjectAccessTest.php:325