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

[ZF-4097] Zend_Filter_Word:

 - fixed word separator for non-unicode usage

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@16188 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 лет назад
Родитель
Сommit
526c8ca3de

+ 18 - 18
library/Zend/Filter/PregReplace.php

@@ -43,7 +43,7 @@ class Zend_Filter_PregReplace implements Zend_Filter_Interface
      * @var mixed
      */
     protected $_replacement = '';
-    
+
     /**
      * Is unicode enabled?
      *
@@ -61,10 +61,10 @@ class Zend_Filter_PregReplace implements Zend_Filter_Interface
         if (self::$_unicodeSupportEnabled === null) {
             self::_determineUnicodeSupport();
         }
-        
+
         return self::$_unicodeSupportEnabled;
     }
-    
+
     /**
      * Method to cache the regex needed to determine if unicode support is available
      *
@@ -74,12 +74,12 @@ class Zend_Filter_PregReplace implements Zend_Filter_Interface
     {
         self::$_unicodeSupportEnabled = (@preg_match('/\pL/u', 'a')) ? true : false;
     }
-    
+
     /**
      * Constructor
-     * 
-     * @param  string $match 
-     * @param  string $replace 
+     *
+     * @param  string $match
+     * @param  string $replace
      * @return void
      */
     public function __construct($matchPattern = null, $replacement = null)
@@ -87,12 +87,12 @@ class Zend_Filter_PregReplace implements Zend_Filter_Interface
         if ($matchPattern) {
             $this->setMatchPattern($matchPattern);
         }
-        
+
         if ($replacement) {
             $this->setReplacement($replacement);
         }
     }
-    
+
     /**
      * Set the match pattern for the regex being called within filter()
      *
@@ -107,14 +107,14 @@ class Zend_Filter_PregReplace implements Zend_Filter_Interface
 
     /**
      * Get currently set match pattern
-     * 
+     *
      * @return string
      */
     public function getMatchPattern()
     {
         return $this->_matchPattern;
     }
-    
+
     /**
      * Set the Replacement pattern/string for the preg_replace called in filter
      *
@@ -129,18 +129,18 @@ class Zend_Filter_PregReplace implements Zend_Filter_Interface
 
     /**
      * Get currently set replacement value
-     * 
+     *
      * @return string
      */
     public function getReplacement()
     {
         return $this->_replacement;
     }
-    
+
     /**
      * Perform regexp replacement as filter
-     * 
-     * @param  string $value 
+     *
+     * @param  string $value
      * @return string
      */
     public function filter($value)
@@ -149,8 +149,8 @@ class Zend_Filter_PregReplace implements Zend_Filter_Interface
             require_once 'Zend/Filter/Exception.php';
             throw new Zend_Filter_Exception(get_class($this) . ' does not have a valid MatchPattern set.');
         }
-        
-        return preg_replace($this->_matchPattern, $this->_replacement, $value);    
+
+        return preg_replace($this->_matchPattern, $this->_replacement, $value);
     }
-    
+
 }

+ 1 - 1
library/Zend/Filter/Word/SeparatorToCamelCase.php

@@ -42,7 +42,7 @@ class Zend_Filter_Word_SeparatorToCamelCase extends Zend_Filter_Word_Separator_A
             parent::setMatchPattern(array('#('.$pregQuotedSeparator.')(\p{L}{1})#e','#(^\p{Ll}{1})#e'));
             parent::setReplacement(array("strtoupper('\\2')","strtoupper('\\1')"));
         } else {
-            parent::setMatchPattern(array('#('.$pregQuotedSeparator.')([A-Z]{1})#e','#(^[a-z]{1})#e'));
+            parent::setMatchPattern(array('#('.$pregQuotedSeparator.')([A-Za-z]{1})#e','#(^[A-Za-z]{1})#e'));
             parent::setReplacement(array("strtoupper('\\2')","strtoupper('\\1')"));
         }
 

+ 96 - 0
tests/Zend/Filter/Word/AllTests.php

@@ -0,0 +1,96 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category   Zend
+ * @package    Zend_Filter
+ * @subpackage UnitTests
+ * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ * @version    $Id: AllTests.php 13797 2009-01-25 13:14:31Z thomas $
+ */
+
+if (!defined('PHPUnit_MAIN_METHOD')) {
+    define('PHPUnit_MAIN_METHOD', 'Zend_Filter_Word_AllTests::main');
+}
+
+
+/**
+ * Test helper
+ */
+require_once dirname(__FILE__) . '/../../../TestHelper.php';
+
+/**
+ * Word filter tests
+ */
+require_once 'Zend/Filter/Word/CamelCaseToDashTest.php';
+require_once 'Zend/Filter/Word/CamelCaseToSeparatorTest.php';
+require_once 'Zend/Filter/Word/CamelCaseToUnderscoreTest.php';
+require_once 'Zend/Filter/Word/DashToCamelCaseTest.php';
+require_once 'Zend/Filter/Word/DashToSeparatorTest.php';
+require_once 'Zend/Filter/Word/DashToUnderscoreTest.php';
+require_once 'Zend/Filter/Word/SeparatorToCamelCaseTest.php';
+require_once 'Zend/Filter/Word/SeparatorToDashTest.php';
+require_once 'Zend/Filter/Word/SeparatorToSeparatorTest.php';
+require_once 'Zend/Filter/Word/UnderscoreToCamelCaseTest.php';
+require_once 'Zend/Filter/Word/UnderscoreToDashTest.php';
+require_once 'Zend/Filter/Word/UnderscoreToSeparatorTest.php';
+
+/**
+ * @category   Zend
+ * @package    Zend_Filter
+ * @subpackage UnitTests
+ * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+class Zend_Filter_Word_AllTests
+{
+    /**
+     * Runs this test suite
+     *
+     * @return void
+     */
+    public static function main()
+    {
+        PHPUnit_TextUI_TestRunner::run(self::suite());
+    }
+
+    /**
+     * Creates and returns this test suite
+     *
+     * @return PHPUnit_Framework_TestSuite
+     */
+    public static function suite()
+    {
+        $suite = new PHPUnit_Framework_TestSuite('Zend Framework - Zend_Filter_Word');
+
+        $suite->addTestSuite('Zend_Filter_Word_CamelCaseToDashTest');
+        $suite->addTestSuite('Zend_Filter_Word_CamelCaseToSeparatorTest');
+        $suite->addTestSuite('Zend_Filter_Word_CamelCaseToUnderscoreTest');
+        $suite->addTestSuite('Zend_Filter_Word_DashToCamelCaseTest');
+        $suite->addTestSuite('Zend_Filter_Word_DashToSeparatorTest');
+        $suite->addTestSuite('Zend_Filter_Word_DashToUnderscoreTest');
+        $suite->addTestSuite('Zend_Filter_Word_SeparatorToCamelCaseTest');
+        $suite->addTestSuite('Zend_Filter_Word_SeparatorToDashTest');
+        $suite->addTestSuite('Zend_Filter_Word_SeparatorToSeparatorTest');
+        $suite->addTestSuite('Zend_Filter_Word_UnderscoreToCamelCaseTest');
+        $suite->addTestSuite('Zend_Filter_Word_UnderscoreToDashTest');
+        $suite->addTestSuite('Zend_Filter_Word_UnderscoreToSeparatorTest');
+
+        return $suite;
+    }
+}
+
+if (PHPUnit_MAIN_METHOD == 'Zend_Filter_Word_AllTests::main') {
+    Zend_Filter_Word_AllTests::main();
+}

+ 40 - 2
tests/Zend/Filter/Word/UnderscoreToCamelCaseTest.php

@@ -13,7 +13,7 @@ require_once 'Zend/Filter/Word/UnderscoreToCamelCase.php';
 /**
  * Test class for Zend_Filter_Word_UnderscoreToCamelCase.
  */
-class Zend_Filter_Word_UnderscoreToCamelCaseTest extends PHPUnit_Framework_TestCase 
+class Zend_Filter_Word_UnderscoreToCamelCaseTest extends PHPUnit_Framework_TestCase
 {
     /**
      * Runs the test methods of this class.
@@ -21,7 +21,7 @@ class Zend_Filter_Word_UnderscoreToCamelCaseTest extends PHPUnit_Framework_TestC
      * @access public
      * @static
      */
-    public static function main() 
+    public static function main()
     {
         require_once "PHPUnit/TextUI/TestRunner.php";
 
@@ -38,6 +38,44 @@ class Zend_Filter_Word_UnderscoreToCamelCaseTest extends PHPUnit_Framework_TestC
         $this->assertNotEquals($string, $filtered);
         $this->assertEquals('CamelCasedWords', $filtered);
     }
+
+    /**
+     * ZF-4097
+     */
+    public function testSomeFilterValues()
+    {
+        $filter   = new Zend_Filter_Word_UnderscoreToCamelCase();
+
+        $string   = 'zend_framework';
+        $filtered = $filter->filter($string);
+        $this->assertNotEquals($string, $filtered);
+        $this->assertEquals('ZendFramework', $filtered);
+
+        $string   = 'zend_Framework';
+        $filtered = $filter->filter($string);
+        $this->assertNotEquals($string, $filtered);
+        $this->assertEquals('ZendFramework', $filtered);
+
+        $string   = 'zendFramework';
+        $filtered = $filter->filter($string);
+        $this->assertNotEquals($string, $filtered);
+        $this->assertEquals('ZendFramework', $filtered);
+
+        $string   = 'zendframework';
+        $filtered = $filter->filter($string);
+        $this->assertNotEquals($string, $filtered);
+        $this->assertEquals('Zendframework', $filtered);
+
+        $string   = '_zendframework';
+        $filtered = $filter->filter($string);
+        $this->assertNotEquals($string, $filtered);
+        $this->assertEquals('Zendframework', $filtered);
+
+        $string   = '_zend_framework';
+        $filtered = $filter->filter($string);
+        $this->assertNotEquals($string, $filtered);
+        $this->assertEquals('ZendFramework', $filtered);
+    }
 }
 
 // Call Zend_Filter_Word_UnderscoreToCamelCaseTest::main() if this source file is executed directly.