Просмотр исходного кода

Fix ZF-11702: Allow constants and booleans to work in lists the same way they work as values

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@24554 44c647ce-9c0f-0410-b52a-842ac1e357ba
rob 14 лет назад
Родитель
Сommit
5160a2a319

+ 9 - 1
library/Zend/Config/Yaml.php

@@ -336,7 +336,15 @@ class Zend_Config_Yaml extends Zend_Config
                 // item in the list:
                 // - FOO
                 if (strlen($line) > 2) {
-                    $config[] = substr($line, 2);
+                    $value = substr($line, 2);
+                    if (preg_match('/^(t(rue)?|on|y(es)?)$/i', $value)) {
+                        $value = true;
+                    } elseif (preg_match('/^(f(alse)?|off|n(o)?)$/i', $value)) {
+                        $value = false;
+                    } elseif (!self::$_ignoreConstants) {
+                         $value = self::_replaceConstants($value);
+                    }
+                    $config[] = $value;
                 } else {
                     $config[] = self::_decodeYaml($currentIndent + 1, $lines);
                 }

+ 52 - 0
tests/Zend/Config/YamlTest.php

@@ -48,6 +48,8 @@ class Zend_Config_YamlTest extends PHPUnit_Framework_TestCase
         $this->_constantsConfig           = dirname(__FILE__) . '/_files/constants.yaml';
         $this->_yamlInlineCommentsConfig  = dirname(__FILE__) . '/_files/inlinecomments.yaml';
         $this->_yamlIndentedCommentsConfig  = dirname(__FILE__) . '/_files/indentedcomments.yaml';
+        $this->_yamlListConstantsConfig     = dirname(__FILE__) . '/_files/listconstants.yaml';
+        $this->_listBooleansConfig          = dirname(__FILE__) . '/_files/listbooleans.yaml';
     }
 
     public function testLoadSingleSection()
@@ -354,4 +356,54 @@ class Zend_Config_YamlTest extends PHPUnit_Framework_TestCase
         );
     }
     
+    /**
+     * @group ZF-11702
+     */
+    public function testAllowsConstantsInLists()
+    {
+        if (!defined('ZEND_CONFIG_YAML_TEST_PATH')) {
+            define('ZEND_CONFIG_YAML_TEST_PATH', 'testing');
+        }        
+        $config = new Zend_Config_Yaml($this->_yamlListConstantsConfig, 'production');
+
+        $this->assertEquals(ZEND_CONFIG_YAML_TEST_PATH, $config->paths->{0});
+        $this->assertEquals(ZEND_CONFIG_YAML_TEST_PATH . '/library/test', $config->paths->{1});
+    }
+    
+    /**
+     * @group ZF-11702
+     */
+    public function testAllowsBooleansInLists()
+    {
+        $config = new Zend_Config_Yaml($this->_listBooleansConfig, 'production');
+
+        $this->assertTrue($config->usingLowerCasedYes->{0});
+        $this->assertTrue($config->usingTitleCasedYes->{0});
+        $this->assertTrue($config->usingCapitalYes->{0});
+        $this->assertTrue($config->usingLowerY->{0});
+        $this->assertTrue($config->usingUpperY->{0});
+
+        $this->assertFalse($config->usingLowerCasedNo->{0});
+        $this->assertFalse($config->usingTitleCasedNo->{0});
+        $this->assertFalse($config->usingCapitalNo->{0});
+        $this->assertFalse($config->usingLowerN->{0});
+        $this->assertFalse($config->usingUpperN->{0});
+
+        $this->assertTrue($config->usingLowerCasedTrue->{0});
+        $this->assertTrue($config->usingTitleCasedTrue->{0});
+        $this->assertTrue($config->usingCapitalTrue->{0});
+
+        $this->assertFalse($config->usingLowerCasedFalse->{0});
+        $this->assertFalse($config->usingTitleCasedFalse->{0});
+        $this->assertFalse($config->usingCapitalFalse->{0});
+
+        $this->assertTrue($config->usingLowerCasedOn->{0});
+        $this->assertTrue($config->usingTitleCasedOn->{0});
+        $this->assertTrue($config->usingCapitalOn->{0});
+
+        $this->assertFalse($config->usingLowerCasedOff->{0});
+        $this->assertFalse($config->usingTitleCasedOff->{0});
+        $this->assertFalse($config->usingCapitalOff->{0});
+    }
+    
 }

+ 51 - 0
tests/Zend/Config/_files/listbooleans.yaml

@@ -0,0 +1,51 @@
+production:
+    usingLowerCasedYes:
+        - yes
+    usingTitleCasedYes:
+        - Yes
+    usingCapitalYes:
+        - YES
+    usingLowerY:
+        - y
+    usingUpperY:
+        - Y
+
+    usingLowerCasedNo:
+        - no
+    usingTitleCasedNo:
+        - No
+    usingCapitalNo:
+        - NO
+    usingLowerN:
+        - n
+    usingUpperN:
+        - N
+
+    usingLowerCasedTrue:
+        - true
+    usingTitleCasedTrue:
+        - True
+    usingCapitalTrue:
+        - TRUE
+
+    usingLowerCasedFalse:
+        - false
+    usingTitleCasedFalse:
+        - False
+    usingCapitalFalse:
+        - FALSE
+
+    usingLowerCasedOn:
+        - on
+    usingTitleCasedOn:
+        - On
+    usingCapitalOn:
+        - ON
+
+    usingLowerCasedOff:
+        - off
+    usingTitleCasedOff:
+        - Off
+    usingCapitalOff:
+        - OFF
+

+ 4 - 0
tests/Zend/Config/_files/listconstants.yaml

@@ -0,0 +1,4 @@
+production:
+    paths:
+        - ZEND_CONFIG_YAML_TEST_PATH
+        - ZEND_CONFIG_YAML_TEST_PATH/library/test