Browse Source

Moved file and path related methods from StringHelper to FileHelper, renamed StringHelper byte methods not to be misused as string methods

tags/2.0.0-beta
Alexander Makarov 11 years ago
parent
commit
5f2a612c78
  1. 8
      extensions/elasticsearch/ActiveRecord.php
  2. 12
      extensions/gii/generators/crud/templates/controller.php
  3. 8
      extensions/gii/generators/crud/templates/search.php
  4. 4
      extensions/gii/generators/crud/templates/views/_form.php
  5. 4
      extensions/gii/generators/crud/templates/views/_search.php
  6. 8
      extensions/gii/generators/crud/templates/views/create.php
  7. 8
      extensions/gii/generators/crud/templates/views/index.php
  8. 8
      extensions/gii/generators/crud/templates/views/update.php
  9. 6
      extensions/gii/generators/crud/templates/views/view.php
  10. 4
      extensions/gii/generators/module/Generator.php
  11. 6
      extensions/redis/ActiveRecord.php
  12. 4
      extensions/sphinx/ActiveRecord.php
  13. 2
      framework/yii/caching/Cache.php
  14. 9
      framework/yii/db/ActiveRecord.php
  15. 50
      framework/yii/helpers/BaseFileHelper.php
  16. 22
      framework/yii/helpers/BaseSecurity.php
  17. 45
      framework/yii/helpers/BaseStringHelper.php
  18. 6
      framework/yii/web/Response.php
  19. 4
      framework/yii/web/XmlResponseFormatter.php
  20. 65
      tests/unit/framework/helpers/StringHelperTest.php
  21. 2
      tests/unit/framework/web/ResponseTest.php

8
extensions/elasticsearch/ActiveRecord.php

@ -9,12 +9,10 @@ namespace yii\elasticsearch;
use yii\base\InvalidCallException;
use yii\base\InvalidConfigException;
use yii\base\NotSupportedException;
use yii\db\ActiveRecordInterface;
use yii\db\BaseActiveRecord;
use yii\helpers\FileHelper;
use yii\helpers\Inflector;
use yii\helpers\Json;
use yii\helpers\StringHelper;
/**
* ActiveRecord is the base class for classes representing relational data in terms of objects.
@ -228,7 +226,7 @@ class ActiveRecord extends BaseActiveRecord
*/
public static function index()
{
return Inflector::pluralize(Inflector::camel2id(StringHelper::basename(get_called_class()), '-'));
return Inflector::pluralize(Inflector::camel2id(FileHelper::basename(get_called_class()), '-'));
}
/**
@ -236,7 +234,7 @@ class ActiveRecord extends BaseActiveRecord
*/
public static function type()
{
return Inflector::camel2id(StringHelper::basename(get_called_class()), '-');
return Inflector::camel2id(FileHelper::basename(get_called_class()), '-');
}
/**

12
extensions/gii/generators/crud/templates/controller.php

@ -1,7 +1,7 @@
<?php
use yii\db\ActiveRecordInterface;
use yii\helpers\StringHelper;
use yii\helpers\FileHelper;
/**
* This is the template for generating a CRUD controller class file.
@ -10,9 +10,9 @@ use yii\helpers\StringHelper;
* @var yii\gii\generators\crud\Generator $generator
*/
$controllerClass = StringHelper::basename($generator->controllerClass);
$modelClass = StringHelper::basename($generator->modelClass);
$searchModelClass = StringHelper::basename($generator->searchModelClass);
$controllerClass = FileHelper::basename($generator->controllerClass);
$modelClass = FileHelper::basename($generator->modelClass);
$searchModelClass = FileHelper::basename($generator->searchModelClass);
if ($modelClass === $searchModelClass) {
$searchModelAlias = $searchModelClass.'Search';
}
@ -27,7 +27,7 @@ $actionParamComments = $generator->generateActionParamComments();
echo "<?php\n";
?>
namespace <?= StringHelper::dirname(ltrim($generator->controllerClass, '\\')) ?>;
namespace <?= FileHelper::dirname(ltrim($generator->controllerClass, '\\')) ?>;
use <?= ltrim($generator->modelClass, '\\') ?>;
use <?= ltrim($generator->searchModelClass, '\\') ?><?php if (isset($searchModelAlias)):?> as <?= $searchModelAlias ?><?php endif ?>;
@ -38,7 +38,7 @@ use yii\web\VerbFilter;
/**
* <?= $controllerClass ?> implements the CRUD actions for <?= $modelClass ?> model.
*/
class <?= $controllerClass ?> extends <?= StringHelper::basename($generator->baseControllerClass) . "\n" ?>
class <?= $controllerClass ?> extends <?= FileHelper::basename($generator->baseControllerClass) . "\n" ?>
{
public function behaviors()
{

8
extensions/gii/generators/crud/templates/search.php

@ -1,6 +1,6 @@
<?php
use yii\helpers\StringHelper;
use yii\helpers\FileHelper;
/**
* This is the template for generating a CRUD controller class file.
@ -9,8 +9,8 @@ use yii\helpers\StringHelper;
* @var yii\gii\generators\crud\Generator $generator
*/
$modelClass = StringHelper::basename($generator->modelClass);
$searchModelClass = StringHelper::basename($generator->searchModelClass);
$modelClass = FileHelper::basename($generator->modelClass);
$searchModelClass = FileHelper::basename($generator->searchModelClass);
$rules = $generator->generateSearchRules();
$labels = $generator->generateSearchLabels();
$searchAttributes = $generator->getSearchAttributes();
@ -19,7 +19,7 @@ $searchConditions = $generator->generateSearchConditions();
echo "<?php\n";
?>
namespace <?= StringHelper::dirname(ltrim($generator->searchModelClass, '\\')) ?>;
namespace <?= FileHelper::dirname(ltrim($generator->searchModelClass, '\\')) ?>;
use yii\base\Model;
use yii\data\ActiveDataProvider;

4
extensions/gii/generators/crud/templates/views/_form.php

@ -1,7 +1,7 @@
<?php
use yii\helpers\FileHelper;
use yii\helpers\Inflector;
use yii\helpers\StringHelper;
/**
* @var yii\web\View $this
@ -28,7 +28,7 @@ use yii\widgets\ActiveForm;
*/
?>
<div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-form">
<div class="<?= Inflector::camel2id(FileHelper::basename($generator->modelClass)) ?>-form">
<?= "<?php " ?>$form = ActiveForm::begin(); ?>

4
extensions/gii/generators/crud/templates/views/_search.php

@ -1,7 +1,7 @@
<?php
use yii\helpers\FileHelper;
use yii\helpers\Inflector;
use yii\helpers\StringHelper;
/**
* @var yii\web\View $this
@ -21,7 +21,7 @@ use yii\widgets\ActiveForm;
*/
?>
<div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-search">
<div class="<?= Inflector::camel2id(FileHelper::basename($generator->modelClass)) ?>-search">
<?= "<?php " ?>$form = ActiveForm::begin([
'action' => ['index'],

8
extensions/gii/generators/crud/templates/views/create.php

@ -1,7 +1,7 @@
<?php
use yii\helpers\FileHelper;
use yii\helpers\Inflector;
use yii\helpers\StringHelper;
/**
* @var yii\web\View $this
@ -18,11 +18,11 @@ use yii\helpers\Html;
* @var <?= ltrim($generator->modelClass, '\\') ?> $model
*/
$this->title = 'Create <?= Inflector::camel2words(StringHelper::basename($generator->modelClass)) ?>';
$this->params['breadcrumbs'][] = ['label' => '<?= Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass))) ?>', 'url' => ['index']];
$this->title = 'Create <?= Inflector::camel2words(FileHelper::basename($generator->modelClass)) ?>';
$this->params['breadcrumbs'][] = ['label' => '<?= Inflector::pluralize(Inflector::camel2words(BaseFileHelper::basename($generator->modelClass))) ?>', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-create">
<div class="<?= Inflector::camel2id(FileHelper::basename($generator->modelClass)) ?>-create">
<h1><?= "<?= " ?>Html::encode($this->title) ?></h1>

8
extensions/gii/generators/crud/templates/views/index.php

@ -1,7 +1,7 @@
<?php
use yii\helpers\FileHelper;
use yii\helpers\Inflector;
use yii\helpers\StringHelper;
/**
* @var yii\web\View $this
@ -23,17 +23,17 @@ use <?= $generator->indexWidgetType === 'grid' ? "yii\\grid\\GridView" : "yii\\w
* @var <?= ltrim($generator->searchModelClass, '\\') ?> $searchModel
*/
$this->title = '<?= Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass))) ?>';
$this->title = '<?= Inflector::pluralize(Inflector::camel2words(FileHelper::basename($generator->modelClass))) ?>';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-index">
<div class="<?= Inflector::camel2id(FileHelper::basename($generator->modelClass)) ?>-index">
<h1><?= "<?= " ?>Html::encode($this->title) ?></h1>
<?= "<?php " . ($generator->indexWidgetType === 'grid' ? "// " : "") ?>echo $this->render('_search', ['model' => $searchModel]); ?>
<p>
<?= "<?= " ?>Html::a('Create <?= StringHelper::basename($generator->modelClass) ?>', ['create'], ['class' => 'btn btn-success']) ?>
<?= "<?= " ?>Html::a('Create <?= FileHelper::basename($generator->modelClass) ?>', ['create'], ['class' => 'btn btn-success']) ?>
</p>
<?php if ($generator->indexWidgetType === 'grid'): ?>

8
extensions/gii/generators/crud/templates/views/update.php

@ -1,7 +1,7 @@
<?php
use yii\helpers\FileHelper;
use yii\helpers\Inflector;
use yii\helpers\StringHelper;
/**
* @var yii\web\View $this
@ -20,12 +20,12 @@ use yii\helpers\Html;
* @var <?= ltrim($generator->modelClass, '\\') ?> $model
*/
$this->title = 'Update <?= Inflector::camel2words(StringHelper::basename($generator->modelClass)) ?>: ' . $model-><?= $generator->getNameAttribute() ?>;
$this->params['breadcrumbs'][] = ['label' => '<?= Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass))) ?>', 'url' => ['index']];
$this->title = 'Update <?= Inflector::camel2words(FileHelper::basename($generator->modelClass)) ?>: ' . $model-><?= $generator->getNameAttribute() ?>;
$this->params['breadcrumbs'][] = ['label' => '<?= Inflector::pluralize(Inflector::camel2words(BaseFileHelper::basename($generator->modelClass))) ?>', 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' => $model-><?= $generator->getNameAttribute() ?>, 'url' => ['view', <?= $urlParams ?>]];
$this->params['breadcrumbs'][] = 'Update';
?>
<div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-update">
<div class="<?= Inflector::camel2id(FileHelper::basename($generator->modelClass)) ?>-update">
<h1><?= "<?= " ?>Html::encode($this->title) ?></h1>

6
extensions/gii/generators/crud/templates/views/view.php

@ -1,7 +1,7 @@
<?php
use yii\helpers\FileHelper;
use yii\helpers\Inflector;
use yii\helpers\StringHelper;
/**
* @var yii\web\View $this
@ -22,10 +22,10 @@ use yii\widgets\DetailView;
*/
$this->title = $model-><?= $generator->getNameAttribute() ?>;
$this->params['breadcrumbs'][] = ['label' => '<?= Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass))) ?>', 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' => '<?= Inflector::pluralize(Inflector::camel2words(FileHelper::basename($generator->modelClass))) ?>', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-view">
<div class="<?= Inflector::camel2id(FileHelper::basename($generator->modelClass)) ?>-view">
<h1><?= "<?= " ?>Html::encode($this->title) ?></h1>

4
extensions/gii/generators/module/Generator.php

@ -10,7 +10,7 @@ namespace yii\gii\generators\module;
use Yii;
use yii\gii\CodeFile;
use yii\helpers\Html;
use yii\helpers\StringHelper;
use yii\helpers\FileHelper;
/**
* This generator will generate the skeleton code needed by a module.
@ -119,7 +119,7 @@ EOD;
$files = [];
$modulePath = $this->getModulePath();
$files[] = new CodeFile(
$modulePath . '/' . StringHelper::basename($this->moduleClass) . '.php',
$modulePath . '/' . FileHelper::basename($this->moduleClass) . '.php',
$this->render("module.php")
);
$files[] = new CodeFile(

6
extensions/redis/ActiveRecord.php

@ -8,8 +8,8 @@
namespace yii\redis;
use yii\base\InvalidConfigException;
use yii\base\NotSupportedException;
use yii\db\BaseActiveRecord;
use yii\helpers\FileHelper;
use yii\helpers\Inflector;
use yii\helpers\StringHelper;
@ -97,7 +97,7 @@ class ActiveRecord extends BaseActiveRecord
*/
public static function keyPrefix()
{
return Inflector::camel2id(StringHelper::basename(get_called_class()), '_');
return Inflector::camel2id(FileHelper::basename(get_called_class()), '_');
}
/**
@ -288,7 +288,7 @@ class ActiveRecord extends BaseActiveRecord
if (is_numeric($key)) {
return $key;
} elseif (is_string($key)) {
return ctype_alnum($key) && StringHelper::strlen($key) <= 32 ? $key : md5($key);
return ctype_alnum($key) && StringHelper::byteLen($key) <= 32 ? $key : md5($key);
} elseif (is_array($key)) {
if (count($key) == 1) {
return self::buildKey(reset($key));

4
extensions/sphinx/ActiveRecord.php

@ -12,8 +12,8 @@ use yii\db\BaseActiveRecord;
use yii\base\NotSupportedException;
use yii\db\ActiveRelationInterface;
use yii\db\StaleObjectException;
use yii\helpers\FileHelper;
use yii\helpers\Inflector;
use yii\helpers\StringHelper;
use Yii;
/**
@ -166,7 +166,7 @@ abstract class ActiveRecord extends BaseActiveRecord
*/
public static function indexName()
{
return Inflector::camel2id(StringHelper::basename(get_called_class()), '_');
return Inflector::camel2id(FileHelper::basename(get_called_class()), '_');
}
/**

2
framework/yii/caching/Cache.php

@ -100,7 +100,7 @@ abstract class Cache extends Component implements \ArrayAccess
protected function buildKey($key)
{
if (is_string($key)) {
$key = ctype_alnum($key) && StringHelper::strlen($key) <= 32 ? $key : md5($key);
$key = ctype_alnum($key) && StringHelper::byteLen($key) <= 32 ? $key : md5($key);
} else {
$key = md5(json_encode($key));
}

9
framework/yii/db/ActiveRecord.php

@ -9,12 +9,7 @@
namespace yii\db;
use yii\base\InvalidConfigException;
use yii\base\Model;
use yii\base\InvalidParamException;
use yii\base\ModelEvent;
use yii\base\UnknownMethodException;
use yii\base\InvalidCallException;
use yii\helpers\StringHelper;
use yii\helpers\FileHelper;
use yii\helpers\Inflector;
/**
@ -174,7 +169,7 @@ class ActiveRecord extends BaseActiveRecord
*/
public static function tableName()
{
return 'tbl_' . Inflector::camel2id(StringHelper::basename(get_called_class()), '_');
return 'tbl_' . Inflector::camel2id(FileHelper::basename(get_called_class()), '_');
}
/**

50
framework/yii/helpers/BaseFileHelper.php

@ -292,11 +292,11 @@ class BaseFileHelper
if ($isDir = is_dir($path)) {
$path .= '/';
}
$n = StringHelper::strlen($path);
$n = StringHelper::byteLen($path);
if (!empty($options['except'])) {
foreach ($options['except'] as $name) {
if (StringHelper::substr($path, -StringHelper::strlen($name), $n) === $name) {
if (StringHelper::byteSubstr($path, -StringHelper::byteLen($name), $n) === $name) {
return false;
}
}
@ -304,7 +304,7 @@ class BaseFileHelper
if (!$isDir && !empty($options['only'])) {
foreach ($options['only'] as $name) {
if (StringHelper::substr($path, -StringHelper::strlen($name), $n) === $name) {
if (StringHelper::byteSubstr($path, -StringHelper::byteLen($name), $n) === $name) {
return true;
}
}
@ -338,4 +338,48 @@ class BaseFileHelper
chmod($path, $mode);
return $result;
}
/**
* Returns the trailing name component of a path.
* This method is similar to the php function `basename()` except that it will
* treat both \ and / as directory separators, independent of the operating system.
* This method was mainly created to work on php namespaces. When working with real
* file paths, php's `basename()` should work fine for you.
* Note: this method is not aware of the actual filesystem, or path components such as "..".
*
* @param string $path A path string.
* @param string $suffix If the name component ends in suffix this will also be cut off.
* @return string the trailing name component of the given path.
* @see http://www.php.net/manual/en/function.basename.php
*/
public static function basename($path, $suffix = '')
{
if (($len = mb_strlen($suffix)) > 0 && mb_substr($path, -$len) == $suffix) {
$path = mb_substr($path, 0, -$len);
}
$path = rtrim(str_replace('\\', '/', $path), '/\\');
if (($pos = mb_strrpos($path, '/')) !== false) {
return mb_substr($path, $pos + 1);
}
return $path;
}
/**
* Returns parent directory's path.
* This method is similar to `dirname()` except that it will treat
* both \ and / as directory separators, independent of the operating system.
*
* @param string $path A path string.
* @return string the parent directory's path.
* @see http://www.php.net/manual/en/function.basename.php
*/
public static function dirname($path)
{
$pos = mb_strrpos(str_replace('\\', '/', $path), '/');
if ($pos !== false) {
return mb_substr($path, 0, $pos);
} else {
return $path;
}
}
}

22
framework/yii/helpers/BaseSecurity.php

@ -80,10 +80,10 @@ class BaseSecurity
}
$module = static::openCryptModule();
$ivSize = mcrypt_enc_get_iv_size($module);
$iv = StringHelper::substr($data, 0, $ivSize);
$iv = StringHelper::byteSubstr($data, 0, $ivSize);
$key = static::deriveKey($password, $iv);
mcrypt_generic_init($module, $key, $iv);
$decrypted = mdecrypt_generic($module, StringHelper::substr($data, $ivSize, StringHelper::strlen($data)));
$decrypted = mdecrypt_generic($module, StringHelper::byteSubstr($data, $ivSize, StringHelper::byteLen($data)));
mcrypt_generic_deinit($module);
mcrypt_module_close($module);
return static::stripPadding($decrypted);
@ -96,7 +96,7 @@ class BaseSecurity
*/
protected static function addPadding($data)
{
$pad = self::CRYPT_BLOCK_SIZE - (StringHelper::strlen($data) % self::CRYPT_BLOCK_SIZE);
$pad = self::CRYPT_BLOCK_SIZE - (StringHelper::byteLen($data) % self::CRYPT_BLOCK_SIZE);
return $data . str_repeat(chr($pad), $pad);
}
@ -107,11 +107,11 @@ class BaseSecurity
*/
protected static function stripPadding($data)
{
$end = StringHelper::substr($data, -1, NULL);
$end = StringHelper::byteSubstr($data, -1, NULL);
$last = ord($end);
$n = StringHelper::strlen($data) - $last;
if (StringHelper::substr($data, $n, NULL) == str_repeat($end, $last)) {
return StringHelper::substr($data, 0, $n);
$n = StringHelper::byteLen($data) - $last;
if (StringHelper::byteSubstr($data, $n, NULL) == str_repeat($end, $last)) {
return StringHelper::byteSubstr($data, 0, $n);
}
return false;
}
@ -164,11 +164,11 @@ class BaseSecurity
*/
public static function validateData($data, $key, $algorithm = 'sha256')
{
$hashSize = StringHelper::strlen(hash_hmac($algorithm, 'test', $key));
$n = StringHelper::strlen($data);
$hashSize = StringHelper::byteLen(hash_hmac($algorithm, 'test', $key));
$n = StringHelper::byteLen($data);
if ($n >= $hashSize) {
$hash = StringHelper::substr($data, 0, $hashSize);
$data2 = StringHelper::substr($data, $hashSize, $n - $hashSize);
$hash = StringHelper::byteSubstr($data, 0, $hashSize);
$data2 = StringHelper::byteSubstr($data, $hashSize, $n - $hashSize);
return $hash === hash_hmac($algorithm, $data2, $key) ? $data2 : false;
} else {
return false;

45
framework/yii/helpers/BaseStringHelper.php

@ -26,7 +26,7 @@ class BaseStringHelper
* @param string $string the string being measured for length
* @return integer the number of bytes in the given string.
*/
public static function strlen($string)
public static function byteLen($string)
{
return mb_strlen($string, '8bit');
}
@ -40,52 +40,11 @@ class BaseStringHelper
* @return string the extracted part of string, or FALSE on failure or an empty string.
* @see http://www.php.net/manual/en/function.substr.php
*/
public static function substr($string, $start, $length)
public static function byteSubstr($string, $start, $length)
{
return mb_substr($string, $start, $length, '8bit');
}
/**
* Returns the trailing name component of a path.
* This method is similar to the php function `basename()` except that it will
* treat both \ and / as directory separators, independent of the operating system.
* This method was mainly created to work on php namespaces. When working with real
* file paths, php's `basename()` should work fine for you.
* Note: this method is not aware of the actual filesystem, or path components such as "..".
* @param string $path A path string.
* @param string $suffix If the name component ends in suffix this will also be cut off.
* @return string the trailing name component of the given path.
* @see http://www.php.net/manual/en/function.basename.php
*/
public static function basename($path, $suffix = '')
{
if (($len = mb_strlen($suffix)) > 0 && mb_substr($path, -$len) == $suffix) {
$path = mb_substr($path, 0, -$len);
}
$path = rtrim(str_replace('\\', '/', $path), '/\\');
if (($pos = mb_strrpos($path, '/')) !== false) {
return mb_substr($path, $pos + 1);
}
return $path;
}
/**
* Returns parent directory's path.
* This method is similar to `dirname()` except that it will treat
* both \ and / as directory separators, independent of the operating system.
* @param string $path A path string.
* @return string the parent directory's path.
* @see http://www.php.net/manual/en/function.basename.php
*/
public static function dirname($path)
{
$pos = mb_strrpos(str_replace('\\', '/', $path), '/');
if ($pos !== false) {
return mb_substr($path, 0, $pos);
} else {
return $path;
}
}
/**
* Compares two strings or string arrays, and return their differences.

6
framework/yii/web/Response.php

@ -382,7 +382,7 @@ class Response extends \yii\base\Response
public function sendContentAsFile($content, $attachmentName, $mimeType = 'application/octet-stream')
{
$headers = $this->getHeaders();
$contentLength = StringHelper::strlen($content);
$contentLength = StringHelper::byteLen($content);
$range = $this->getHttpRange($contentLength);
if ($range === false) {
$headers->set('Content-Range', "bytes */$contentLength");
@ -395,14 +395,14 @@ class Response extends \yii\base\Response
->setDefault('Content-Type', $mimeType)
->setDefault('Cache-Control', 'must-revalidate, post-check=0, pre-check=0')
->setDefault('Content-Transfer-Encoding', 'binary')
->setDefault('Content-Length', StringHelper::strlen($content))
->setDefault('Content-Length', StringHelper::byteLen($content))
->setDefault('Content-Disposition', "attachment; filename=\"$attachmentName\"");
list($begin, $end) = $range;
if ($begin !=0 || $end != $contentLength - 1) {
$this->setStatusCode(206);
$headers->set('Content-Range', "bytes $begin-$end/$contentLength");
$this->content = StringHelper::substr($content, $begin, $end - $begin + 1);
$this->content = StringHelper::byteSubstr($content, $begin, $end - $begin + 1);
} else {
$this->setStatusCode(200);
$this->content = $content;

4
framework/yii/web/XmlResponseFormatter.php

@ -12,7 +12,7 @@ use DOMElement;
use DOMText;
use yii\base\Arrayable;
use yii\base\Component;
use yii\helpers\StringHelper;
use yii\helpers\FileHelper;
/**
* XmlResponseFormatter formats the given data into an XML response content.
@ -66,7 +66,7 @@ class XmlResponseFormatter extends Component implements ResponseFormatterInterfa
protected function buildXml($element, $data)
{
if (is_object($data)) {
$child = new DOMElement(StringHelper::basename(get_class($data)));
$child = new DOMElement(FileHelper::basename(get_class($data)));
$element->appendChild($child);
if ($data instanceof Arrayable) {
$this->buildXml($child, $data->toArray());

65
tests/unit/framework/helpers/StringHelperTest.php

@ -1,6 +1,7 @@
<?php
namespace yiiunit\framework\helpers;
use yii\helpers\FileHelper;
use yii\helpers\StringHelper;
use yiiunit\TestCase;
@ -12,57 +13,57 @@ class StringHelperTest extends TestCase
{
public function testStrlen()
{
$this->assertEquals(4, StringHelper::strlen('this'));
$this->assertEquals(6, StringHelper::strlen('это'));
$this->assertEquals(4, StringHelper::byteLen('this'));
$this->assertEquals(6, StringHelper::byteLen('это'));
}
public function testSubstr()
{
$this->assertEquals('th', StringHelper::substr('this', 0, 2));
$this->assertEquals('э', StringHelper::substr('это', 0, 2));
$this->assertEquals('th', StringHelper::byteSubstr('this', 0, 2));
$this->assertEquals('э', StringHelper::byteSubstr('это', 0, 2));
}
public function testBasename()
{
$this->assertEquals('', StringHelper::basename(''));
$this->assertEquals('', FileHelper::basename(''));
$this->assertEquals('file', StringHelper::basename('file'));
$this->assertEquals('file.test', StringHelper::basename('file.test', '.test2'));
$this->assertEquals('file', StringHelper::basename('file.test', '.test'));
$this->assertEquals('file', FileHelper::basename('file'));
$this->assertEquals('file.test', FileHelper::basename('file.test', '.test2'));
$this->assertEquals('file', FileHelper::basename('file.test', '.test'));
$this->assertEquals('file', StringHelper::basename('/file'));
$this->assertEquals('file.test', StringHelper::basename('/file.test', '.test2'));
$this->assertEquals('file', StringHelper::basename('/file.test', '.test'));
$this->assertEquals('file', FileHelper::basename('/file'));
$this->assertEquals('file.test', FileHelper::basename('/file.test', '.test2'));
$this->assertEquals('file', FileHelper::basename('/file.test', '.test'));
$this->assertEquals('file', StringHelper::basename('/path/to/file'));
$this->assertEquals('file.test', StringHelper::basename('/path/to/file.test', '.test2'));
$this->assertEquals('file', StringHelper::basename('/path/to/file.test', '.test'));
$this->assertEquals('file', FileHelper::basename('/path/to/file'));
$this->assertEquals('file.test', FileHelper::basename('/path/to/file.test', '.test2'));
$this->assertEquals('file', FileHelper::basename('/path/to/file.test', '.test'));
$this->assertEquals('file', StringHelper::basename('\file'));
$this->assertEquals('file.test', StringHelper::basename('\file.test', '.test2'));
$this->assertEquals('file', StringHelper::basename('\file.test', '.test'));
$this->assertEquals('file', FileHelper::basename('\file'));
$this->assertEquals('file.test', FileHelper::basename('\file.test', '.test2'));
$this->assertEquals('file', FileHelper::basename('\file.test', '.test'));
$this->assertEquals('file', StringHelper::basename('C:\file'));
$this->assertEquals('file.test', StringHelper::basename('C:\file.test', '.test2'));
$this->assertEquals('file', StringHelper::basename('C:\file.test', '.test'));
$this->assertEquals('file', FileHelper::basename('C:\file'));
$this->assertEquals('file.test', FileHelper::basename('C:\file.test', '.test2'));
$this->assertEquals('file', FileHelper::basename('C:\file.test', '.test'));
$this->assertEquals('file', StringHelper::basename('C:\path\to\file'));
$this->assertEquals('file.test', StringHelper::basename('C:\path\to\file.test', '.test2'));
$this->assertEquals('file', StringHelper::basename('C:\path\to\file.test', '.test'));
$this->assertEquals('file', FileHelper::basename('C:\path\to\file'));
$this->assertEquals('file.test', FileHelper::basename('C:\path\to\file.test', '.test2'));
$this->assertEquals('file', FileHelper::basename('C:\path\to\file.test', '.test'));
// mixed paths
$this->assertEquals('file.test', StringHelper::basename('/path\to/file.test'));
$this->assertEquals('file.test', StringHelper::basename('/path/to\file.test'));
$this->assertEquals('file.test', StringHelper::basename('\path/to\file.test'));
$this->assertEquals('file.test', FileHelper::basename('/path\to/file.test'));
$this->assertEquals('file.test', FileHelper::basename('/path/to\file.test'));
$this->assertEquals('file.test', FileHelper::basename('\path/to\file.test'));
// \ and / in suffix
$this->assertEquals('file', StringHelper::basename('/path/to/filete/st', 'te/st'));
$this->assertEquals('st', StringHelper::basename('/path/to/filete/st', 'te\st'));
$this->assertEquals('file', StringHelper::basename('/path/to/filete\st', 'te\st'));
$this->assertEquals('st', StringHelper::basename('/path/to/filete\st', 'te/st'));
$this->assertEquals('file', FileHelper::basename('/path/to/filete/st', 'te/st'));
$this->assertEquals('st', FileHelper::basename('/path/to/filete/st', 'te\st'));
$this->assertEquals('file', FileHelper::basename('/path/to/filete\st', 'te\st'));
$this->assertEquals('st', FileHelper::basename('/path/to/filete\st', 'te/st'));
// http://www.php.net/manual/en/function.basename.php#72254
$this->assertEquals('foo', StringHelper::basename('/bar/foo/'));
$this->assertEquals('foo', StringHelper::basename('\\bar\\foo\\'));
$this->assertEquals('foo', FileHelper::basename('/bar/foo/'));
$this->assertEquals('foo', FileHelper::basename('\\bar\\foo\\'));
}
}

2
tests/unit/framework/web/ResponseTest.php

@ -57,7 +57,7 @@ class ResponseTest extends \yiiunit\TestCase
$this->assertEquals(206, $this->response->statusCode);
$headers = $this->response->headers;
$this->assertEquals("bytes", $headers->get('Accept-Ranges'));
$this->assertEquals("bytes " . $expectedHeader . '/' . StringHelper::strlen($fullContent), $headers->get('Content-Range'));
$this->assertEquals("bytes " . $expectedHeader . '/' . StringHelper::byteLen($fullContent), $headers->get('Content-Range'));
$this->assertEquals('text/plain', $headers->get('Content-Type'));
$this->assertEquals("$length", $headers->get('Content-Length'));
}

Loading…
Cancel
Save