[BUGFIX] Fix static access to enumeration constants 94/36794/2
authorMathias Brodala <mbrodala@pagemachine.de>
Tue, 10 Feb 2015 14:27:59 +0000 (15:27 +0100)
committerChristian Kuhn <lolli@schwarzbu.ch>
Thu, 19 Feb 2015 20:44:01 +0000 (21:44 +0100)
Enumeration constants need to be loaded on static access
without requiring a instance before.

Resolves: #64971
Releases: master,6.2
Change-Id: Iaaefe5648ab70743cfc2efc73c81f870833b730d
Reviewed-on: http://review.typo3.org/36794
Reviewed-by: Thomas Maroschik <tmaroschik@dfau.de>
Reviewed-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Tested-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
typo3/sysext/core/Classes/Type/Enumeration.php
typo3/sysext/core/Tests/Unit/Type/EnumerationTest.php

index 43b5a31..04d94b5 100644 (file)
@@ -49,7 +49,7 @@ abstract class Enumeration implements TypeInterface {
                if ($value === NULL) {
                        $value = static::__default;
                }
-               $this->loadValues();
+               static::loadValues();
                if (!$this->isValid($value)) {
                        throw new Exception\InvalidEnumerationValueException(
                                sprintf('Invalid value %s for %s', $value, get_class($this)),
@@ -64,8 +64,8 @@ abstract class Enumeration implements TypeInterface {
         * @throws Exception\InvalidEnumerationDefinitionException
         * @internal param string $class
         */
-       protected function loadValues() {
-               $class = get_class($this);
+       static protected function loadValues() {
+               $class = get_called_class();
 
                if (isset(static::$enumConstants[$class])) {
                        return;
@@ -160,6 +160,7 @@ abstract class Enumeration implements TypeInterface {
         * @return array
         */
        static public function getConstants($include_default = FALSE) {
+               static::loadValues();
                $enumConstants = static::$enumConstants[get_called_class()];
                if (!$include_default) {
                        unset($enumConstants['__default']);
index db393ad..e8da954 100644 (file)
@@ -211,17 +211,22 @@ class EnumerationTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
         * @test
         */
        public function getConstantsReturnsArrayOfPossibleValuesWithoutDefault() {
-               $enumeration = new Enumeration\CompleteEnumeration();
-
-               $this->assertEquals(array('INTEGER_VALUE' => 1, 'STRING_VALUE' => 'foo'), $enumeration->getConstants());
+               $this->assertEquals(array('INTEGER_VALUE' => 1, 'STRING_VALUE' => 'foo'), Enumeration\CompleteEnumeration::getConstants());
        }
 
        /**
         * @test
         */
        public function getConstantsReturnsArrayOfPossibleValuesWithDefaultIfRequested() {
+               $this->assertEquals(array('INTEGER_VALUE' => 1, 'STRING_VALUE' => 'foo', '__default' => 1), Enumeration\CompleteEnumeration::getConstants(TRUE));
+       }
+
+       /**
+        * @test
+        */
+       public function getConstantsCanBeCalledOnInstances() {
                $enumeration = new Enumeration\CompleteEnumeration();
-               $this->assertEquals(array('INTEGER_VALUE' => 1, 'STRING_VALUE' => 'foo', '__default' => 1), $enumeration->getConstants(TRUE));
+               $this->assertEquals(array('INTEGER_VALUE' => 1, 'STRING_VALUE' => 'foo'), $enumeration->getConstants());
        }
 
        /**