mirror of
https://github.com/brmlab/brmsklad.git
synced 2025-12-17 14:13:58 +01:00
Upgrade CakePHP from 2.2.5 to 2.9.5
This commit is contained in:
parent
5a580df460
commit
235a541597
793 changed files with 60746 additions and 23753 deletions
|
|
@ -2,19 +2,18 @@
|
|||
/**
|
||||
* CakeNumberTest file
|
||||
*
|
||||
* PHP 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||||
* @package Cake.Test.Case.View.Helper
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('View', 'View');
|
||||
|
|
@ -70,6 +69,66 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$result = $this->Number->format($value, '-');
|
||||
$expected = '100-100-100';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$value = 0.00001;
|
||||
$result = $this->Number->format($value, array('places' => 1));
|
||||
$expected = '$0.0';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$value = -0.00001;
|
||||
$result = $this->Number->format($value, array('places' => 1));
|
||||
$expected = '$0.0';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$value = 1.23;
|
||||
$options = array('decimals' => ',', 'thousands' => '.', 'before' => '', 'after' => ' €');
|
||||
$result = $this->Number->format($value, $options);
|
||||
$expected = '1,23 €';
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testFormatDelta method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testFormatDelta() {
|
||||
$value = '100100100';
|
||||
|
||||
$result = $this->Number->formatDelta($value);
|
||||
$expected = '+100,100,100.00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->formatDelta($value, array('before' => '', 'after' => ''));
|
||||
$expected = '+100,100,100.00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->formatDelta($value, array('before' => '[', 'after' => ']'));
|
||||
$expected = '[+100,100,100.00]';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->formatDelta(-$value, array('before' => '[', 'after' => ']'));
|
||||
$expected = '[-100,100,100.00]';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->formatDelta(-$value, array('before' => '[ ', 'after' => ' ]'));
|
||||
$expected = '[ -100,100,100.00 ]';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$value = 0;
|
||||
$result = $this->Number->formatDelta($value, array('places' => 1, 'before' => '[', 'after' => ']'));
|
||||
$expected = '[0.0]';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$value = 0.0001;
|
||||
$result = $this->Number->formatDelta($value, array('places' => 1, 'before' => '[', 'after' => ']'));
|
||||
$expected = '[0.0]';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$value = 9876.1234;
|
||||
$result = $this->Number->formatDelta($value, array('places' => 1, 'decimals' => ',', 'thousands' => '.'));
|
||||
$expected = '+9.876,1';
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -80,31 +139,31 @@ class CakeNumberTest extends CakeTestCase {
|
|||
public function testMultibyteFormat() {
|
||||
$value = '5199100.0006';
|
||||
$result = $this->Number->format($value, array(
|
||||
'thousands' => ' ',
|
||||
'decimals' => '&',
|
||||
'places' => 3,
|
||||
'escape' => false,
|
||||
'before' => '',
|
||||
'thousands' => ' ',
|
||||
'decimals' => '&',
|
||||
'places' => 3,
|
||||
'escape' => false,
|
||||
'before' => '',
|
||||
));
|
||||
$expected = '5 199 100&001';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$value = 1000.45;
|
||||
$result = $this->Number->format($value, array(
|
||||
'thousands' => ',,',
|
||||
'decimals' => '.a',
|
||||
'escape' => false,
|
||||
'thousands' => ',,',
|
||||
'decimals' => '.a',
|
||||
'escape' => false,
|
||||
));
|
||||
$expected = '$1,,000.a45';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$value = 519919827593784.00;
|
||||
$this->Number->addFormat('RUR', array(
|
||||
'thousands' => 'ø€ƒ‡™',
|
||||
'decimals' => '(§.§)',
|
||||
'escape' => false,
|
||||
'wholeSymbol' => '€',
|
||||
'wholePosition' => 'after',
|
||||
'thousands' => 'ø€ƒ‡™',
|
||||
'decimals' => '(§.§)',
|
||||
'escape' => false,
|
||||
'wholeSymbol' => '€',
|
||||
'wholePosition' => 'after',
|
||||
));
|
||||
$result = $this->Number->currency($value, 'RUR');
|
||||
$expected = '519ø€ƒ‡™919ø€ƒ‡™827ø€ƒ‡™593ø€ƒ‡™784(§.§)00€';
|
||||
|
|
@ -112,9 +171,9 @@ class CakeNumberTest extends CakeTestCase {
|
|||
|
||||
$value = '13371337.1337';
|
||||
$result = CakeNumber::format($value, array(
|
||||
'thousands' => '- |-| /-\ >< () |2 -',
|
||||
'decimals' => '- £€€† -',
|
||||
'before' => ''
|
||||
'thousands' => '- |-| /-\ >< () |2 -',
|
||||
'decimals' => '- £€€† -',
|
||||
'before' => ''
|
||||
));
|
||||
$expected = '13- |-| /-\ >< () |2 -371- |-| /-\ >< () |2 -337- £€€† -13';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
|
@ -145,19 +204,22 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR');
|
||||
$expected = '€100.100.100,00';
|
||||
$expected = '€100.100.100,00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP');
|
||||
$expected = '£100,100,100.00';
|
||||
$expected = '£100,100,100.00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, '', array('thousands' => ' ', 'wholeSymbol' => '€', 'wholePosition' => 'after', 'decimals' => ',', 'zero' => 'Gratuit'));
|
||||
$expected = '100 100 100,00€';
|
||||
$options = array('thousands' => ' ', 'wholeSymbol' => 'EUR ', 'wholePosition' => 'before',
|
||||
'decimals' => ',', 'zero' => 'Gratuit');
|
||||
$result = $this->Number->currency($value, '', $options);
|
||||
$expected = 'EUR 100 100 100,00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(1000.45, null, array('after' => 'øre', 'before' => 'Kr. ', 'decimals' => ',', 'thousands' => '.'));
|
||||
$expected = 'Kr. 1.000,45';
|
||||
$options = array('after' => 'øre', 'before' => 'Kr.', 'decimals' => ',', 'thousands' => '.');
|
||||
$result = $this->Number->currency(1000.45, null, $options);
|
||||
$expected = 'Kr.1.000,45';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(0.5, 'USD');
|
||||
|
|
@ -176,12 +238,15 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$expected = '1.00 $';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(0.2, null, array('wholeSymbol' => ' $', 'wholePosition' => 'after', 'fractionSymbol' => 'cents'));
|
||||
$expected = '20cents';
|
||||
$options = array('wholeSymbol' => '$', 'wholePosition' => 'after', 'fractionSymbol' => ' cents');
|
||||
$result = $this->Number->currency(0.2, null, $options);
|
||||
$expected = '20 cents';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(0.2, null, array('wholeSymbol' => ' $', 'wholePosition' => 'after', 'fractionSymbol' => 'cents', 'fractionPosition' => 'before'));
|
||||
$expected = 'cents20';
|
||||
$options = array('wholeSymbol' => '$', 'wholePosition' => 'after', 'fractionSymbol' => 'cents ',
|
||||
'fractionPosition' => 'before');
|
||||
$result = $this->Number->currency(0.2, null, $options);
|
||||
$expected = 'cents 20';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(311, 'USD', array('wholePosition' => 'after'));
|
||||
|
|
@ -189,20 +254,96 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(0.2, 'EUR');
|
||||
$expected = '€0,20';
|
||||
$expected = '€0,20';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(12, null, array('wholeSymbol' => ' dollars', 'wholePosition' => 'after', 'fractionSymbol' => ' cents', 'fractionPosition' => 'after'));
|
||||
$options = array('wholeSymbol' => ' dollars', 'wholePosition' => 'after', 'fractionSymbol' => ' cents',
|
||||
'fractionPosition' => 'after');
|
||||
$result = $this->Number->currency(12, null, $options);
|
||||
$expected = '12.00 dollars';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(0.12, null, array('wholeSymbol' => ' dollars', 'wholePosition' => 'after', 'fractionSymbol' => ' cents', 'fractionPosition' => 'after'));
|
||||
$options = array('wholeSymbol' => ' dollars', 'wholePosition' => 'after', 'fractionSymbol' => ' cents',
|
||||
'fractionPosition' => 'after');
|
||||
$result = $this->Number->currency(0.12, null, $options);
|
||||
$expected = '12 cents';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(0.5, null, array('fractionSymbol' => false, 'fractionPosition' => 'before', 'wholeSymbol' => '$'));
|
||||
$options = array('fractionSymbol' => false, 'fractionPosition' => 'before', 'wholeSymbol' => '$');
|
||||
$result = $this->Number->currency(0.5, null, $options);
|
||||
$expected = '$0.50';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(0, 'GBP');
|
||||
$expected = '£0.00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(0.00000, 'GBP');
|
||||
$expected = '£0.00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('0.00000', 'GBP');
|
||||
$expected = '£0.00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('-2.23300', 'JPY');
|
||||
$expected = '(¥2.23)';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('22.389', 'CAD');
|
||||
$expected = '$22.39';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('4.111', 'AUD');
|
||||
$expected = '$4.11';
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test currency format with places and fraction exponents.
|
||||
* Places should only matter for non fraction values and vice versa.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testCurrencyWithFractionAndPlaces() {
|
||||
$result = $this->Number->currency('1.23', 'GBP', array('places' => 3));
|
||||
$expected = '£1.230';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('0.23', 'GBP', array('places' => 3));
|
||||
$expected = '23p';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('0.001', 'GBP', array('places' => 3));
|
||||
$expected = '0p';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$this->Number->addFormat('BHD', array('before' => 'BD ', 'fractionSymbol' => ' fils',
|
||||
'fractionExponent' => 3));
|
||||
$result = $this->Number->currency('1.234', 'BHD', array('places' => 2));
|
||||
$expected = 'BD 1.23';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('0.234', 'BHD', array('places' => 2));
|
||||
$expected = '234 fils';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('0.001', 'BHD', array('places' => 2));
|
||||
$expected = '1 fils';
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that the default fraction handling does not cause issues.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testCurrencyFractionSymbol() {
|
||||
$result = $this->Number->currency(0.2, '', array(
|
||||
'places' => 2,
|
||||
'decimal' => '.'
|
||||
));
|
||||
$this->assertEquals('0.2', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -231,6 +372,39 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test default currency
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDefaultCurrency() {
|
||||
$result = $this->Number->defaultCurrency();
|
||||
$this->assertEquals('USD', $result);
|
||||
$this->Number->addFormat('NOK', array('before' => 'Kr. '));
|
||||
|
||||
$this->Number->defaultCurrency('NOK');
|
||||
$result = $this->Number->defaultCurrency();
|
||||
$this->assertEquals('NOK', $result);
|
||||
|
||||
$result = $this->Number->currency(1000);
|
||||
$expected = 'Kr. 1,000.00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(2000);
|
||||
$expected = 'Kr. 2,000.00';
|
||||
$this->assertEquals($expected, $result);
|
||||
$this->Number->defaultCurrency('EUR');
|
||||
$result = $this->Number->currency(1000);
|
||||
$expected = '€1.000,00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency(2000);
|
||||
$expected = '€2.000,00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$this->Number->defaultCurrency('USD');
|
||||
}
|
||||
|
||||
/**
|
||||
* testCurrencyPositive method
|
||||
*
|
||||
|
|
@ -256,11 +430,11 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR');
|
||||
$expected = '€100.100.100,00';
|
||||
$expected = '€100.100.100,00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP');
|
||||
$expected = '£100,100,100.00';
|
||||
$expected = '£100,100,100.00';
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
|
|
@ -277,11 +451,11 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR');
|
||||
$expected = '(€100.100.100,00)';
|
||||
$expected = '(€100.100.100,00)';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP');
|
||||
$expected = '(£100,100,100.00)';
|
||||
$expected = '(£100,100,100.00)';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'USD', array('negative' => '-'));
|
||||
|
|
@ -289,11 +463,11 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR', array('negative' => '-'));
|
||||
$expected = '-€100.100.100,00';
|
||||
$expected = '-€100.100.100,00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP', array('negative' => '-'));
|
||||
$expected = '-£100,100,100.00';
|
||||
$expected = '-£100,100,100.00';
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
|
|
@ -310,7 +484,7 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR');
|
||||
$expected = '€0,99';
|
||||
$expected = '€0,99';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP');
|
||||
|
|
@ -331,7 +505,7 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR');
|
||||
$expected = '(€0,99)';
|
||||
$expected = '(€0,99)';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP');
|
||||
|
|
@ -343,7 +517,7 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR', array('negative' => '-'));
|
||||
$expected = '-€0,99';
|
||||
$expected = '-€0,99';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP', array('negative' => '-'));
|
||||
|
|
@ -364,11 +538,11 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'EUR');
|
||||
$expected = '€0,00';
|
||||
$expected = '€0,00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP');
|
||||
$expected = '£0.00';
|
||||
$expected = '£0.00';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP', array('zero' => 'FREE!'));
|
||||
|
|
@ -389,7 +563,7 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP', array('places' => 0));
|
||||
$expected = '£1,234,568';
|
||||
$expected = '£1,234,568';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('1234567.8912345', null, array('before' => 'GBP', 'places' => 3));
|
||||
|
|
@ -400,15 +574,15 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$expected = 'GBP650.1200';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency($value, 'GBP', array('escape' => true));
|
||||
$expected = '&#163;1,234,567.89';
|
||||
$result = $this->Number->currency($value, 'GBP', array('before' => '£ ', 'escape' => true));
|
||||
$expected = '&#163; 1,234,567.89';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('0.35', 'USD', array('after' => false));
|
||||
$expected = '$0.35';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('0.35', 'GBP', array('after' => false));
|
||||
$result = $this->Number->currency('0.35', 'GBP', array('before' => '£', 'after' => false, 'escape' => false));
|
||||
$expected = '£0.35';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
|
|
@ -417,7 +591,7 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->currency('0.35', 'EUR');
|
||||
$expected = '€0,35';
|
||||
$expected = '€0,35';
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
|
|
@ -491,12 +665,29 @@ class CakeNumberTest extends CakeTestCase {
|
|||
*/
|
||||
public function testReadableSizeLocalized() {
|
||||
$restore = setlocale(LC_NUMERIC, 0);
|
||||
setlocale(LC_NUMERIC, 'de_DE');
|
||||
|
||||
$this->skipIf(setlocale(LC_NUMERIC, 'de_DE') === false, "The German locale isn't available.");
|
||||
|
||||
$result = $this->Number->toReadableSize(1321205);
|
||||
$this->assertRegExp('/1[,.]26 MB/', $result);
|
||||
$this->assertEquals('1,26 MB', $result);
|
||||
|
||||
$result = $this->Number->toReadableSize(1024 * 1024 * 1024 * 512);
|
||||
$this->assertRegExp('/512[,.]00 GB/', $result);
|
||||
$this->assertEquals('512,00 GB', $result);
|
||||
setlocale(LC_NUMERIC, $restore);
|
||||
}
|
||||
|
||||
/**
|
||||
* test precision() with locales
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testPrecisionLocalized() {
|
||||
$restore = setlocale(LC_NUMERIC, 0);
|
||||
|
||||
$this->skipIf(setlocale(LC_NUMERIC, 'de_DE') === false, "The German locale isn't available.");
|
||||
|
||||
$result = $this->Number->precision(1.234);
|
||||
$this->assertEquals('1,234', $result);
|
||||
setlocale(LC_NUMERIC, $restore);
|
||||
}
|
||||
|
||||
|
|
@ -521,6 +712,78 @@ class CakeNumberTest extends CakeTestCase {
|
|||
$result = $this->Number->toPercentage(0, 4);
|
||||
$expected = '0.0000%';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->toPercentage(45, 0, array('multiply' => false));
|
||||
$expected = '45%';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->toPercentage(45, 2, array('multiply' => false));
|
||||
$expected = '45.00%';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->toPercentage(0, 0, array('multiply' => false));
|
||||
$expected = '0%';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->toPercentage(0, 4, array('multiply' => false));
|
||||
$expected = '0.0000%';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->toPercentage(0.456, 0, array('multiply' => true));
|
||||
$expected = '46%';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Number->toPercentage(0.456, 2, array('multiply' => true));
|
||||
$expected = '45.60%';
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testFromReadableSize
|
||||
*
|
||||
* @dataProvider filesizes
|
||||
* @return void
|
||||
*/
|
||||
public function testFromReadableSize($params, $expected) {
|
||||
$result = $this->Number->fromReadableSize($params['size'], $params['default']);
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testFromReadableSize
|
||||
*
|
||||
* @expectedException CakeException
|
||||
* @return void
|
||||
*/
|
||||
public function testFromReadableSizeException() {
|
||||
$this->Number->fromReadableSize('bogus', false);
|
||||
}
|
||||
|
||||
/**
|
||||
* filesizes dataprovider
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function filesizes() {
|
||||
return array(
|
||||
array(array('size' => '512B', 'default' => false), 512),
|
||||
array(array('size' => '1KB', 'default' => false), 1024),
|
||||
array(array('size' => '1.5KB', 'default' => false), 1536),
|
||||
array(array('size' => '1MB', 'default' => false), 1048576),
|
||||
array(array('size' => '1mb', 'default' => false), 1048576),
|
||||
array(array('size' => '1.5MB', 'default' => false), 1572864),
|
||||
array(array('size' => '1GB', 'default' => false), 1073741824),
|
||||
array(array('size' => '1.5GB', 'default' => false), 1610612736),
|
||||
array(array('size' => '1K', 'default' => false), 1024),
|
||||
array(array('size' => '1.5K', 'default' => false), 1536),
|
||||
array(array('size' => '1M', 'default' => false), 1048576),
|
||||
array(array('size' => '1m', 'default' => false), 1048576),
|
||||
array(array('size' => '1.5M', 'default' => false), 1572864),
|
||||
array(array('size' => '1G', 'default' => false), 1073741824),
|
||||
array(array('size' => '1.5G', 'default' => false), 1610612736),
|
||||
array(array('size' => '512', 'default' => 'Unknown type'), 512),
|
||||
array(array('size' => '2VB', 'default' => 'Unknown type'), 'Unknown type')
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,35 +1,46 @@
|
|||
<?php
|
||||
/**
|
||||
* StringTest file
|
||||
*
|
||||
* PHP 5
|
||||
* CakeTextTest file
|
||||
*
|
||||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @since CakePHP(tm) v 1.2.0.5432
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
App::uses('String', 'Utility');
|
||||
|
||||
App::uses('CakeText', 'Utility');
|
||||
|
||||
/**
|
||||
* StringTest class
|
||||
* CakeText Tests
|
||||
*
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @coversDefaultClass CakeText
|
||||
*/
|
||||
class StringTest extends CakeTestCase {
|
||||
class CakeTextTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* Setup object under test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
$this->Text = new String();
|
||||
$this->Text = new CakeText();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tear down object under test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function tearDown() {
|
||||
parent::tearDown();
|
||||
unset($this->Text);
|
||||
|
|
@ -39,9 +50,10 @@ class StringTest extends CakeTestCase {
|
|||
* testUuidGeneration method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::uuid
|
||||
*/
|
||||
public function testUuidGeneration() {
|
||||
$result = String::uuid();
|
||||
$result = CakeText::uuid();
|
||||
$pattern = "/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/";
|
||||
$match = (bool)preg_match($pattern, $result);
|
||||
$this->assertTrue($match);
|
||||
|
|
@ -51,6 +63,7 @@ class StringTest extends CakeTestCase {
|
|||
* testMultipleUuidGeneration method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::uuid
|
||||
*/
|
||||
public function testMultipleUuidGeneration() {
|
||||
$check = array();
|
||||
|
|
@ -58,7 +71,7 @@ class StringTest extends CakeTestCase {
|
|||
$pattern = "/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/";
|
||||
|
||||
for ($i = 0; $i < $count; $i++) {
|
||||
$result = String::uuid();
|
||||
$result = CakeText::uuid();
|
||||
$match = (bool)preg_match($pattern, $result);
|
||||
$this->assertTrue($match);
|
||||
$this->assertFalse(in_array($result, $check));
|
||||
|
|
@ -70,131 +83,132 @@ class StringTest extends CakeTestCase {
|
|||
* testInsert method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::insert
|
||||
*/
|
||||
public function testInsert() {
|
||||
$string = 'some string';
|
||||
$expected = 'some string';
|
||||
$result = String::insert($string, array());
|
||||
$result = CakeText::insert($string, array());
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '2 + 2 = :sum. Cake is :adjective.';
|
||||
$expected = '2 + 2 = 4. Cake is yummy.';
|
||||
$result = String::insert($string, array('sum' => '4', 'adjective' => 'yummy'));
|
||||
$result = CakeText::insert($string, array('sum' => '4', 'adjective' => 'yummy'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '2 + 2 = %sum. Cake is %adjective.';
|
||||
$result = String::insert($string, array('sum' => '4', 'adjective' => 'yummy'), array('before' => '%'));
|
||||
$result = CakeText::insert($string, array('sum' => '4', 'adjective' => 'yummy'), array('before' => '%'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '2 + 2 = 2sum2. Cake is 9adjective9.';
|
||||
$result = String::insert($string, array('sum' => '4', 'adjective' => 'yummy'), array('format' => '/([\d])%s\\1/'));
|
||||
$result = CakeText::insert($string, array('sum' => '4', 'adjective' => 'yummy'), array('format' => '/([\d])%s\\1/'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '2 + 2 = 12sum21. Cake is 23adjective45.';
|
||||
$expected = '2 + 2 = 4. Cake is 23adjective45.';
|
||||
$result = String::insert($string, array('sum' => '4', 'adjective' => 'yummy'), array('format' => '/([\d])([\d])%s\\2\\1/'));
|
||||
$result = CakeText::insert($string, array('sum' => '4', 'adjective' => 'yummy'), array('format' => '/([\d])([\d])%s\\2\\1/'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = ':web :web_site';
|
||||
$expected = 'www http';
|
||||
$result = String::insert($string, array('web' => 'www', 'web_site' => 'http'));
|
||||
$result = CakeText::insert($string, array('web' => 'www', 'web_site' => 'http'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '2 + 2 = <sum. Cake is <adjective>.';
|
||||
$expected = '2 + 2 = <sum. Cake is yummy.';
|
||||
$result = String::insert($string, array('sum' => '4', 'adjective' => 'yummy'), array('before' => '<', 'after' => '>'));
|
||||
$result = CakeText::insert($string, array('sum' => '4', 'adjective' => 'yummy'), array('before' => '<', 'after' => '>'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '2 + 2 = \:sum. Cake is :adjective.';
|
||||
$expected = '2 + 2 = :sum. Cake is yummy.';
|
||||
$result = String::insert($string, array('sum' => '4', 'adjective' => 'yummy'));
|
||||
$result = CakeText::insert($string, array('sum' => '4', 'adjective' => 'yummy'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '2 + 2 = !:sum. Cake is :adjective.';
|
||||
$result = String::insert($string, array('sum' => '4', 'adjective' => 'yummy'), array('escape' => '!'));
|
||||
$result = CakeText::insert($string, array('sum' => '4', 'adjective' => 'yummy'), array('escape' => '!'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '2 + 2 = \%sum. Cake is %adjective.';
|
||||
$expected = '2 + 2 = %sum. Cake is yummy.';
|
||||
$result = String::insert($string, array('sum' => '4', 'adjective' => 'yummy'), array('before' => '%'));
|
||||
$result = CakeText::insert($string, array('sum' => '4', 'adjective' => 'yummy'), array('before' => '%'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = ':a :b \:a :a';
|
||||
$expected = '1 2 :a 1';
|
||||
$result = String::insert($string, array('a' => 1, 'b' => 2));
|
||||
$result = CakeText::insert($string, array('a' => 1, 'b' => 2));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = ':a :b :c';
|
||||
$expected = '2 3';
|
||||
$result = String::insert($string, array('b' => 2, 'c' => 3), array('clean' => true));
|
||||
$result = CakeText::insert($string, array('b' => 2, 'c' => 3), array('clean' => true));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = ':a :b :c';
|
||||
$expected = '1 3';
|
||||
$result = String::insert($string, array('a' => 1, 'c' => 3), array('clean' => true));
|
||||
$result = CakeText::insert($string, array('a' => 1, 'c' => 3), array('clean' => true));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = ':a :b :c';
|
||||
$expected = '2 3';
|
||||
$result = String::insert($string, array('b' => 2, 'c' => 3), array('clean' => true));
|
||||
$result = CakeText::insert($string, array('b' => 2, 'c' => 3), array('clean' => true));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = ':a, :b and :c';
|
||||
$expected = '2 and 3';
|
||||
$result = String::insert($string, array('b' => 2, 'c' => 3), array('clean' => true));
|
||||
$result = CakeText::insert($string, array('b' => 2, 'c' => 3), array('clean' => true));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '":a, :b and :c"';
|
||||
$expected = '"1, 2"';
|
||||
$result = String::insert($string, array('a' => 1, 'b' => 2), array('clean' => true));
|
||||
$result = CakeText::insert($string, array('a' => 1, 'b' => 2), array('clean' => true));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '"${a}, ${b} and ${c}"';
|
||||
$expected = '"1, 2"';
|
||||
$result = String::insert($string, array('a' => 1, 'b' => 2), array('before' => '${', 'after' => '}', 'clean' => true));
|
||||
$result = CakeText::insert($string, array('a' => 1, 'b' => 2), array('before' => '${', 'after' => '}', 'clean' => true));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '<img src=":src" alt=":alt" class="foo :extra bar"/>';
|
||||
$expected = '<img src="foo" class="foo bar"/>';
|
||||
$result = String::insert($string, array('src' => 'foo'), array('clean' => 'html'));
|
||||
$result = CakeText::insert($string, array('src' => 'foo'), array('clean' => 'html'));
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '<img src=":src" class=":no :extra"/>';
|
||||
$expected = '<img src="foo"/>';
|
||||
$result = String::insert($string, array('src' => 'foo'), array('clean' => 'html'));
|
||||
$result = CakeText::insert($string, array('src' => 'foo'), array('clean' => 'html'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = '<img src=":src" class=":no :extra"/>';
|
||||
$expected = '<img src="foo" class="bar"/>';
|
||||
$result = String::insert($string, array('src' => 'foo', 'extra' => 'bar'), array('clean' => 'html'));
|
||||
$result = CakeText::insert($string, array('src' => 'foo', 'extra' => 'bar'), array('clean' => 'html'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = String::insert("this is a ? string", "test");
|
||||
$result = CakeText::insert("this is a ? string", "test");
|
||||
$expected = "this is a test string";
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = String::insert("this is a ? string with a ? ? ?", array('long', 'few?', 'params', 'you know'));
|
||||
$result = CakeText::insert("this is a ? string with a ? ? ?", array('long', 'few?', 'params', 'you know'));
|
||||
$expected = "this is a long string with a few? params you know";
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = String::insert('update saved_urls set url = :url where id = :id', array('url' => 'http://www.testurl.com/param1:url/param2:id','id' => 1));
|
||||
$result = CakeText::insert('update saved_urls set url = :url where id = :id', array('url' => 'http://www.testurl.com/param1:url/param2:id', 'id' => 1));
|
||||
$expected = "update saved_urls set url = http://www.testurl.com/param1:url/param2:id where id = 1";
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = String::insert('update saved_urls set url = :url where id = :id', array('id' => 1, 'url' => 'http://www.testurl.com/param1:url/param2:id'));
|
||||
$result = CakeText::insert('update saved_urls set url = :url where id = :id', array('id' => 1, 'url' => 'http://www.testurl.com/param1:url/param2:id'));
|
||||
$expected = "update saved_urls set url = http://www.testurl.com/param1:url/param2:id where id = 1";
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = String::insert(':me cake. :subject :verb fantastic.', array('me' => 'I :verb', 'subject' => 'cake', 'verb' => 'is'));
|
||||
$result = CakeText::insert(':me cake. :subject :verb fantastic.', array('me' => 'I :verb', 'subject' => 'cake', 'verb' => 'is'));
|
||||
$expected = "I :verb cake. cake is fantastic.";
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = String::insert(':I.am: :not.yet: passing.', array('I.am' => 'We are'), array('before' => ':', 'after' => ':', 'clean' => array('replacement' => ' of course', 'method' => 'text')));
|
||||
$result = CakeText::insert(':I.am: :not.yet: passing.', array('I.am' => 'We are'), array('before' => ':', 'after' => ':', 'clean' => array('replacement' => ' of course', 'method' => 'text')));
|
||||
$expected = "We are of course passing.";
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = String::insert(
|
||||
$result = CakeText::insert(
|
||||
':I.am: :not.yet: passing.',
|
||||
array('I.am' => 'We are'),
|
||||
array('before' => ':', 'after' => ':', 'clean' => true)
|
||||
|
|
@ -202,28 +216,28 @@ class StringTest extends CakeTestCase {
|
|||
$expected = "We are passing.";
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = String::insert('?-pended result', array('Pre'));
|
||||
$result = CakeText::insert('?-pended result', array('Pre'));
|
||||
$expected = "Pre-pended result";
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = 'switching :timeout / :timeout_count';
|
||||
$expected = 'switching 5 / 10';
|
||||
$result = String::insert($string, array('timeout' => 5, 'timeout_count' => 10));
|
||||
$result = CakeText::insert($string, array('timeout' => 5, 'timeout_count' => 10));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = 'switching :timeout / :timeout_count';
|
||||
$expected = 'switching 5 / 10';
|
||||
$result = String::insert($string, array('timeout_count' => 10, 'timeout' => 5));
|
||||
$result = CakeText::insert($string, array('timeout_count' => 10, 'timeout' => 5));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = 'switching :timeout_count by :timeout';
|
||||
$expected = 'switching 10 by 5';
|
||||
$result = String::insert($string, array('timeout' => 5, 'timeout_count' => 10));
|
||||
$result = CakeText::insert($string, array('timeout' => 5, 'timeout_count' => 10));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = 'switching :timeout_count by :timeout';
|
||||
$expected = 'switching 10 by 5';
|
||||
$result = String::insert($string, array('timeout_count' => 10, 'timeout' => 5));
|
||||
$result = CakeText::insert($string, array('timeout_count' => 10, 'timeout' => 5));
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
|
|
@ -231,35 +245,36 @@ class StringTest extends CakeTestCase {
|
|||
* test Clean Insert
|
||||
*
|
||||
* @return void
|
||||
* @covers ::cleanInsert
|
||||
*/
|
||||
public function testCleanInsert() {
|
||||
$result = String::cleanInsert(':incomplete', array(
|
||||
$result = CakeText::cleanInsert(':incomplete', array(
|
||||
'clean' => true, 'before' => ':', 'after' => ''
|
||||
));
|
||||
$this->assertEquals('', $result);
|
||||
|
||||
$result = String::cleanInsert(':incomplete', array(
|
||||
$result = CakeText::cleanInsert(':incomplete', array(
|
||||
'clean' => array('method' => 'text', 'replacement' => 'complete'),
|
||||
'before' => ':', 'after' => '')
|
||||
);
|
||||
$this->assertEquals('complete', $result);
|
||||
|
||||
$result = String::cleanInsert(':in.complete', array(
|
||||
$result = CakeText::cleanInsert(':in.complete', array(
|
||||
'clean' => true, 'before' => ':', 'after' => ''
|
||||
));
|
||||
$this->assertEquals('', $result);
|
||||
|
||||
$result = String::cleanInsert(':in.complete and', array(
|
||||
$result = CakeText::cleanInsert(':in.complete and', array(
|
||||
'clean' => true, 'before' => ':', 'after' => '')
|
||||
);
|
||||
$this->assertEquals('', $result);
|
||||
|
||||
$result = String::cleanInsert(':in.complete or stuff', array(
|
||||
$result = CakeText::cleanInsert(':in.complete or stuff', array(
|
||||
'clean' => true, 'before' => ':', 'after' => ''
|
||||
));
|
||||
$this->assertEquals('stuff', $result);
|
||||
|
||||
$result = String::cleanInsert(
|
||||
$result = CakeText::cleanInsert(
|
||||
'<p class=":missing" id=":missing">Text here</p>',
|
||||
array('clean' => 'html', 'before' => ':', 'after' => '')
|
||||
);
|
||||
|
|
@ -268,13 +283,14 @@ class StringTest extends CakeTestCase {
|
|||
|
||||
/**
|
||||
* Tests that non-insertable variables (i.e. arrays) are skipped when used as values in
|
||||
* String::insert().
|
||||
* CakeText::insert().
|
||||
*
|
||||
* @return void
|
||||
* @covers ::insert
|
||||
*/
|
||||
public function testAutoIgnoreBadInsertData() {
|
||||
$data = array('foo' => 'alpha', 'bar' => 'beta', 'fale' => array());
|
||||
$result = String::insert('(:foo > :bar || :fale!)', $data, array('clean' => 'text'));
|
||||
$result = CakeText::insert('(:foo > :bar || :fale!)', $data, array('clean' => 'text'));
|
||||
$this->assertEquals('(alpha > beta || !)', $result);
|
||||
}
|
||||
|
||||
|
|
@ -282,44 +298,147 @@ class StringTest extends CakeTestCase {
|
|||
* testTokenize method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::tokenize
|
||||
*/
|
||||
public function testTokenize() {
|
||||
$result = String::tokenize('A,(short,boring test)');
|
||||
$result = CakeText::tokenize('A,(short,boring test)');
|
||||
$expected = array('A', '(short,boring test)');
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = String::tokenize('A,(short,more interesting( test)');
|
||||
$result = CakeText::tokenize('A,(short,more interesting( test)');
|
||||
$expected = array('A', '(short,more interesting( test)');
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = String::tokenize('A,(short,very interesting( test))');
|
||||
$result = CakeText::tokenize('A,(short,very interesting( test))');
|
||||
$expected = array('A', '(short,very interesting( test))');
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = String::tokenize('"single tag"', ' ', '"', '"');
|
||||
$result = CakeText::tokenize('"single tag"', ' ', '"', '"');
|
||||
$expected = array('"single tag"');
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = String::tokenize('tagA "single tag" tagB', ' ', '"', '"');
|
||||
$result = CakeText::tokenize('tagA "single tag" tagB', ' ', '"', '"');
|
||||
$expected = array('tagA', '"single tag"', 'tagB');
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
// Ideographic width space.
|
||||
$result = CakeText::tokenize("tagA\xe3\x80\x80\"single\xe3\x80\x80tag\"\xe3\x80\x80tagB", "\xe3\x80\x80", '"', '"');
|
||||
$expected = array('tagA', '"single tag"', 'tagB');
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = CakeText::tokenize('');
|
||||
$expected = array();
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testReplaceWithQuestionMarkInString method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::insert
|
||||
*/
|
||||
public function testReplaceWithQuestionMarkInString() {
|
||||
$string = ':a, :b and :c?';
|
||||
$expected = '2 and 3?';
|
||||
$result = String::insert($string, array('b' => 2, 'c' => 3), array('clean' => true));
|
||||
$result = CakeText::insert($string, array('b' => 2, 'c' => 3), array('clean' => true));
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that wordWrap() works the same as built-in wordwrap function
|
||||
*
|
||||
* @dataProvider wordWrapProvider
|
||||
* @return void
|
||||
* @covers ::wordWrap
|
||||
* @covers ::_wordWrap
|
||||
*/
|
||||
public function testWordWrap($text, $width, $break = "\n", $cut = false) {
|
||||
$result = CakeText::wordWrap($text, $width, $break, $cut);
|
||||
$expected = wordwrap($text, $width, $break, $cut);
|
||||
$this->assertTextEquals($expected, $result, 'Text not wrapped same as built-in function.');
|
||||
}
|
||||
|
||||
/**
|
||||
* data provider for testWordWrap method
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function wordWrapProvider() {
|
||||
return array(
|
||||
array(
|
||||
'The quick brown fox jumped over the lazy dog.',
|
||||
33
|
||||
),
|
||||
array(
|
||||
'A very long woooooooooooord.',
|
||||
8
|
||||
),
|
||||
array(
|
||||
'A very long woooooooooooord. Right.',
|
||||
8
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* test that wordWrap() properly handle unicode strings.
|
||||
*
|
||||
* @return void
|
||||
* @covers ::wordWrap
|
||||
* @covers ::_wordWrap
|
||||
*/
|
||||
public function testWordWrapUnicodeAware() {
|
||||
$text = 'Но вим омниюм факёльиси элыктрам, мюнырэ лэгыры векж ыт. Выльёт квюандо нюмквуам ты кюм. Зыд эю рыбюм.';
|
||||
$result = CakeText::wordWrap($text, 33, "\n", true);
|
||||
$expected = <<<TEXT
|
||||
Но вим омниюм факёльиси элыктрам,
|
||||
мюнырэ лэгыры векж ыт. Выльёт квю
|
||||
андо нюмквуам ты кюм. Зыд эю рыбю
|
||||
м.
|
||||
TEXT;
|
||||
$this->assertTextEquals($expected, $result, 'Text not wrapped.');
|
||||
|
||||
$text = 'Но вим омниюм факёльиси элыктрам, мюнырэ лэгыры векж ыт. Выльёт квюандо нюмквуам ты кюм. Зыд эю рыбюм.';
|
||||
$result = CakeText::wordWrap($text, 33, "\n");
|
||||
$expected = <<<TEXT
|
||||
Но вим омниюм факёльиси элыктрам,
|
||||
мюнырэ лэгыры векж ыт. Выльёт
|
||||
квюандо нюмквуам ты кюм. Зыд эю
|
||||
рыбюм.
|
||||
TEXT;
|
||||
$this->assertTextEquals($expected, $result, 'Text not wrapped.');
|
||||
}
|
||||
|
||||
/**
|
||||
* test that wordWrap() properly handle newline characters.
|
||||
*
|
||||
* @return void
|
||||
* @covers ::wordWrap
|
||||
* @covers ::_wordWrap
|
||||
*/
|
||||
public function testWordWrapNewlineAware() {
|
||||
$text = 'This is a line that is almost the 55 chars long.
|
||||
This is a new sentence which is manually newlined, but is so long it needs two lines.';
|
||||
$result = CakeText::wordWrap($text, 55);
|
||||
$expected = <<<TEXT
|
||||
This is a line that is almost the 55 chars long.
|
||||
This is a new sentence which is manually newlined, but
|
||||
is so long it needs two lines.
|
||||
TEXT;
|
||||
$this->assertTextEquals($expected, $result, 'Text not wrapped.');
|
||||
}
|
||||
|
||||
/**
|
||||
* test wrap method.
|
||||
*
|
||||
* @return void
|
||||
* @covers ::wrap
|
||||
* @covers ::wordWrap
|
||||
* @covers ::_wordWrap
|
||||
*/
|
||||
public function testWrap() {
|
||||
$text = 'This is the song that never ends. This is the song that never ends. This is the song that never ends.';
|
||||
$result = String::wrap($text, 33);
|
||||
$result = CakeText::wrap($text, 33);
|
||||
$expected = <<<TEXT
|
||||
This is the song that never ends.
|
||||
This is the song that never ends.
|
||||
|
|
@ -327,14 +446,22 @@ This is the song that never ends.
|
|||
TEXT;
|
||||
$this->assertTextEquals($expected, $result, 'Text not wrapped.');
|
||||
|
||||
$result = String::wrap($text, array('width' => 20, 'wordWrap' => false));
|
||||
$result = CakeText::wrap($text, array('width' => 20, 'wordWrap' => false));
|
||||
$expected = 'This is the song th' . "\n" .
|
||||
'at never ends. This' . "\n" .
|
||||
' is the song that n' . "\n" .
|
||||
'ever ends. This is ' . "\n" .
|
||||
'the song that never' . "\n" .
|
||||
' ends.';
|
||||
$this->assertTextEquals($expected, $result, 'Text not wrapped.');
|
||||
|
||||
$text = 'Но вим омниюм факёльиси элыктрам, мюнырэ лэгыры векж ыт. Выльёт квюандо нюмквуам ты кюм. Зыд эю рыбюм.';
|
||||
$result = CakeText::wrap($text, 33);
|
||||
$expected = <<<TEXT
|
||||
This is the song th
|
||||
at never ends. This
|
||||
is the song that n
|
||||
ever ends. This is
|
||||
the song that never
|
||||
ends.
|
||||
Но вим омниюм факёльиси элыктрам,
|
||||
мюнырэ лэгыры векж ыт. Выльёт
|
||||
квюандо нюмквуам ты кюм. Зыд эю
|
||||
рыбюм.
|
||||
TEXT;
|
||||
$this->assertTextEquals($expected, $result, 'Text not wrapped.');
|
||||
}
|
||||
|
|
@ -343,10 +470,13 @@ TEXT;
|
|||
* test wrap() indenting
|
||||
*
|
||||
* @return void
|
||||
* @covers ::wrap
|
||||
* @covers ::wordWrap
|
||||
* @covers ::_wordWrap
|
||||
*/
|
||||
public function testWrapIndent() {
|
||||
$text = 'This is the song that never ends. This is the song that never ends. This is the song that never ends.';
|
||||
$result = String::wrap($text, array('width' => 33, 'indent' => "\t", 'indentAt' => 1));
|
||||
$result = CakeText::wrap($text, array('width' => 33, 'indent' => "\t", 'indentAt' => 1));
|
||||
$expected = <<<TEXT
|
||||
This is the song that never ends.
|
||||
This is the song that never ends.
|
||||
|
|
@ -359,6 +489,7 @@ TEXT;
|
|||
* testTruncate method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::truncate
|
||||
*/
|
||||
public function testTruncate() {
|
||||
$text1 = 'The quick brown fox jumps over the lazy dog';
|
||||
|
|
@ -372,6 +503,7 @@ TEXT;
|
|||
$text9 = 'НОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыь';
|
||||
$text10 = 'http://example.com/something/foo:bar';
|
||||
|
||||
$elipsis = "\xe2\x80\xa6";
|
||||
$this->assertSame($this->Text->truncate($text1, 15), 'The quick br...');
|
||||
$this->assertSame($this->Text->truncate($text1, 15, array('exact' => false)), 'The quick...');
|
||||
$this->assertSame($this->Text->truncate($text1, 100), 'The quick brown fox jumps over the lazy dog');
|
||||
|
|
@ -379,18 +511,18 @@ TEXT;
|
|||
$this->assertSame($this->Text->truncate($text2, 10, array('exact' => false)), '...');
|
||||
$this->assertSame($this->Text->truncate($text3, 20), '<b>© 2005-20...');
|
||||
$this->assertSame($this->Text->truncate($text4, 15), '<img src="my...');
|
||||
$this->assertSame($this->Text->truncate($text5, 6, array('ending' => '')), '0<b>1<');
|
||||
$this->assertSame($this->Text->truncate($text1, 15, array('html' => true)), 'The quick br...');
|
||||
$this->assertSame($this->Text->truncate($text1, 15, array('exact' => false, 'html' => true)), 'The quick...');
|
||||
$this->assertSame($this->Text->truncate($text2, 10, array('html' => true)), 'Heizölr...');
|
||||
$this->assertSame($this->Text->truncate($text2, 10, array('exact' => false, 'html' => true)), '...');
|
||||
$this->assertSame($this->Text->truncate($text3, 20, array('html' => true)), '<b>© 2005-2007, Cake...</b>');
|
||||
$this->assertSame($this->Text->truncate($text4, 15, array('html' => true)), '<img src="mypic.jpg"> This image ...');
|
||||
$this->assertSame($this->Text->truncate($text4, 45, array('html' => true)), '<img src="mypic.jpg"> This image tag is not XHTML conform!<br><hr/><b>But t...</b>');
|
||||
$this->assertSame($this->Text->truncate($text4, 90, array('html' => true)), '<img src="mypic.jpg"> This image tag is not XHTML conform!<br><hr/><b>But the following image tag should be conform <img src="mypic.jpg" alt="Me, myself and I" /></b><br />Grea...');
|
||||
$this->assertSame($this->Text->truncate($text5, 6, array('ending' => '', 'html' => true)), '0<b>1<i>2<span class="myclass">3</span>4<u>5</u></i></b>');
|
||||
$this->assertSame($this->Text->truncate($text5, 20, array('ending' => '', 'html' => true)), $text5);
|
||||
$this->assertSame($this->Text->truncate($text6, 57, array('exact' => false, 'html' => true)), "<p><strong>Extra dates have been announced for this year's...</strong></p>");
|
||||
$this->assertSame($this->Text->truncate($text5, 6, array('ellipsis' => '')), '0<b>1<');
|
||||
$this->assertSame($this->Text->truncate($text1, 15, array('html' => true)), 'The quick brow' . $elipsis);
|
||||
$this->assertSame($this->Text->truncate($text1, 15, array('exact' => false, 'html' => true)), 'The quick' . $elipsis);
|
||||
$this->assertSame($this->Text->truncate($text2, 10, array('html' => true)), 'Heizölrüc' . $elipsis);
|
||||
$this->assertSame($this->Text->truncate($text2, 10, array('exact' => false, 'html' => true)), $elipsis);
|
||||
$this->assertSame($this->Text->truncate($text3, 20, array('html' => true)), '<b>© 2005-2007, Cake S' . $elipsis . '</b>');
|
||||
$this->assertSame($this->Text->truncate($text4, 15, array('html' => true)), '<img src="mypic.jpg"> This image ta' . $elipsis);
|
||||
$this->assertSame($this->Text->truncate($text4, 45, array('html' => true)), '<img src="mypic.jpg"> This image tag is not XHTML conform!<br><hr/><b>But the' . $elipsis . '</b>');
|
||||
$this->assertSame($this->Text->truncate($text4, 90, array('html' => true)), '<img src="mypic.jpg"> This image tag is not XHTML conform!<br><hr/><b>But the following image tag should be conform <img src="mypic.jpg" alt="Me, myself and I" /></b><br />Great,' . $elipsis);
|
||||
$this->assertSame($this->Text->truncate($text5, 6, array('ellipsis' => '', 'html' => true)), '0<b>1<i>2<span class="myclass">3</span>4<u>5</u></i></b>');
|
||||
$this->assertSame($this->Text->truncate($text5, 20, array('ellipsis' => '', 'html' => true)), $text5);
|
||||
$this->assertSame($this->Text->truncate($text6, 57, array('exact' => false, 'html' => true)), "<p><strong>Extra dates have been announced for this year's" . $elipsis . "</strong></p>");
|
||||
$this->assertSame($this->Text->truncate($text7, 255), $text7);
|
||||
$this->assertSame($this->Text->truncate($text7, 15), 'El moño está...');
|
||||
$this->assertSame($this->Text->truncate($text8, 15), 'Vive la R' . chr(195) . chr(169) . 'pu...');
|
||||
|
|
@ -399,7 +531,7 @@ TEXT;
|
|||
|
||||
$text = '<p><span style="font-size: medium;"><a>Iamatestwithnospacesandhtml</a></span></p>';
|
||||
$result = $this->Text->truncate($text, 10, array(
|
||||
'ending' => '...',
|
||||
'ellipsis' => '...',
|
||||
'exact' => false,
|
||||
'html' => true
|
||||
));
|
||||
|
|
@ -422,7 +554,7 @@ podeís adquirirla.</span></p>
|
|||
<p><span style="font-size: medium;"><a>http://www.amazon.com/Steve-
|
||||
Jobs-Walter-Isaacson/dp/1451648537</a></span></p>';
|
||||
$result = $this->Text->truncate($text, 500, array(
|
||||
'ending' => '... ',
|
||||
'ellipsis' => '... ',
|
||||
'exact' => false,
|
||||
'html' => true
|
||||
));
|
||||
|
|
@ -441,12 +573,97 @@ Isaacson</strong>", aquí os dejamos la dirección de amazon donde
|
|||
podeís adquirirla.</span></p>
|
||||
<p><span style="font-size: medium;"><a>... </a></span></p>';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
// test deprecated `ending` (`ellipsis` taking precedence if both are defined)
|
||||
$result = $this->Text->truncate($text1, 31, array(
|
||||
'ending' => '.',
|
||||
'exact' => false,
|
||||
));
|
||||
$expected = 'The quick brown fox jumps.';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Text->truncate($text1, 31, array(
|
||||
'ellipsis' => '..',
|
||||
'ending' => '.',
|
||||
'exact' => false,
|
||||
));
|
||||
$expected = 'The quick brown fox jumps..';
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testTruncate method with non utf8 sites
|
||||
*
|
||||
* @return void
|
||||
* @covers ::truncate
|
||||
*/
|
||||
public function testTruncateLegacy() {
|
||||
Configure::write('App.encoding', 'ISO-8859-1');
|
||||
$text = '<b>© 2005-2007, Cake Software Foundation, Inc.</b><br />written by Alexander Wegener';
|
||||
$result = $this->Text->truncate($text, 31, array(
|
||||
'html' => true,
|
||||
'exact' => false,
|
||||
));
|
||||
$expected = '<b>© 2005-2007, Cake Software...</b>';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Text->truncate($text, 31, array(
|
||||
'html' => true,
|
||||
'exact' => true,
|
||||
));
|
||||
$expected = '<b>© 2005-2007, Cake Software F...</b>';
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testTail method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::tail
|
||||
*/
|
||||
public function testTail() {
|
||||
$text1 = 'The quick brown fox jumps over the lazy dog';
|
||||
$text2 = 'Heizölrückstoßabdämpfung';
|
||||
$text3 = 'El moño está en el lugar correcto. Eso fue lo que dijo la niña, ¿habrá dicho la verdad?';
|
||||
$text4 = 'Vive la R' . chr(195) . chr(169) . 'publique de France';
|
||||
$text5 = 'НОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыь';
|
||||
|
||||
$result = $this->Text->tail($text1, 13);
|
||||
$this->assertEquals('...e lazy dog', $result);
|
||||
|
||||
$result = $this->Text->tail($text1, 13, array('exact' => false));
|
||||
$this->assertEquals('...lazy dog', $result);
|
||||
|
||||
$result = $this->Text->tail($text1, 100);
|
||||
$this->assertEquals('The quick brown fox jumps over the lazy dog', $result);
|
||||
|
||||
$result = $this->Text->tail($text2, 10);
|
||||
$this->assertEquals('...;mpfung', $result);
|
||||
|
||||
$result = $this->Text->tail($text2, 10, array('exact' => false));
|
||||
$this->assertEquals('...', $result);
|
||||
|
||||
$result = $this->Text->tail($text3, 255);
|
||||
$this->assertEquals($text3, $result);
|
||||
|
||||
$result = $this->Text->tail($text3, 21);
|
||||
$this->assertEquals('...á dicho la verdad?', $result);
|
||||
|
||||
$result = $this->Text->tail($text4, 25);
|
||||
$this->assertEquals('...a R' . chr(195) . chr(169) . 'publique de France', $result);
|
||||
|
||||
$result = $this->Text->tail($text5, 10);
|
||||
$this->assertEquals('...цчшщъыь', $result);
|
||||
|
||||
$result = $this->Text->tail($text5, 6, array('ellipsis' => ''));
|
||||
$this->assertEquals('чшщъыь', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testHighlight method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::highlight
|
||||
*/
|
||||
public function testHighlight() {
|
||||
$text = 'This is a test text';
|
||||
|
|
@ -481,6 +698,7 @@ podeís adquirirla.</span></p>
|
|||
* testHighlightHtml method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::highlight
|
||||
*/
|
||||
public function testHighlightHtml() {
|
||||
$text1 = '<p>strongbow isn’t real cider</p>';
|
||||
|
|
@ -500,13 +718,14 @@ podeís adquirirla.</span></p>
|
|||
$this->assertEquals($this->Text->highlight($text3, array('strong', 'what'), $options), $text3);
|
||||
|
||||
$expected = '<b>What</b> a <b>strong</b> mouse: <img src="what-a-strong-mouse.png" alt="What a strong mouse!" />';
|
||||
$this->assertEquals($this->Text->highlight($text4, array('strong', 'what'), $options), $expected);
|
||||
$this->assertEquals($expected, $this->Text->highlight($text4, array('strong', 'what'), $options));
|
||||
}
|
||||
|
||||
/**
|
||||
* testHighlightMulti method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::highlight
|
||||
*/
|
||||
public function testHighlightMulti() {
|
||||
$text = 'This is a test text';
|
||||
|
|
@ -520,6 +739,7 @@ podeís adquirirla.</span></p>
|
|||
* testStripLinks method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::stripLinks
|
||||
*/
|
||||
public function testStripLinks() {
|
||||
$text = 'This is a test text';
|
||||
|
|
@ -547,6 +767,7 @@ podeís adquirirla.</span></p>
|
|||
* testHighlightCaseInsensitivity method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::highlight
|
||||
*/
|
||||
public function testHighlightCaseInsensitivity() {
|
||||
$text = 'This is a Test text';
|
||||
|
|
@ -563,6 +784,7 @@ podeís adquirirla.</span></p>
|
|||
* testExcerpt method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::excerpt
|
||||
*/
|
||||
public function testExcerpt() {
|
||||
$text = 'This is a phrase with test text to play with';
|
||||
|
|
@ -603,6 +825,7 @@ podeís adquirirla.</span></p>
|
|||
* testExcerptCaseInsensitivity method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::excerpt
|
||||
*/
|
||||
public function testExcerptCaseInsensitivity() {
|
||||
$text = 'This is a phrase with test text to play with';
|
||||
|
|
@ -620,6 +843,7 @@ podeís adquirirla.</span></p>
|
|||
* testListGeneration method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::toList
|
||||
*/
|
||||
public function testListGeneration() {
|
||||
$result = $this->Text->toList(array());
|
||||
|
|
@ -2,20 +2,20 @@
|
|||
/**
|
||||
* CakeTimeTest file
|
||||
*
|
||||
* PHP 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||||
* @package Cake.Test.Case.View.Helper
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('CakeTime', 'Utility');
|
||||
|
||||
/**
|
||||
|
|
@ -38,8 +38,10 @@ class CakeTimeTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
$this->Time = new CakeTime();
|
||||
$this->_systemTimezoneIdentifier = date_default_timezone_get();
|
||||
Configure::write('Config.language', 'eng');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -48,6 +50,7 @@ class CakeTimeTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function tearDown() {
|
||||
parent::tearDown();
|
||||
unset($this->Time);
|
||||
$this->_restoreSystemTimezone();
|
||||
}
|
||||
|
|
@ -69,13 +72,13 @@ class CakeTimeTest extends CakeTestCase {
|
|||
*/
|
||||
public function testToQuarter() {
|
||||
$result = $this->Time->toQuarter('2007-12-25');
|
||||
$this->assertEquals(4, $result);
|
||||
$this->assertSame(4, $result);
|
||||
|
||||
$result = $this->Time->toQuarter('2007-9-25');
|
||||
$this->assertEquals(3, $result);
|
||||
$this->assertSame(3, $result);
|
||||
|
||||
$result = $this->Time->toQuarter('2007-3-25');
|
||||
$this->assertEquals(1, $result);
|
||||
$this->assertSame(1, $result);
|
||||
|
||||
$result = $this->Time->toQuarter('2007-3-25', true);
|
||||
$this->assertEquals(array('2007-01-01', '2007-03-31'), $result);
|
||||
|
|
@ -105,9 +108,9 @@ class CakeTimeTest extends CakeTestCase {
|
|||
array('-2 days -3 hours', '2 days, 3 hours ago'),
|
||||
array('-1 week', '1 week ago'),
|
||||
array('-2 weeks -2 days', '2 weeks, 2 days ago'),
|
||||
array('+1 week', '1 week'),
|
||||
array('+1 week 1 day', '1 week, 1 day'),
|
||||
array('+2 weeks 2 day', '2 weeks, 2 days'),
|
||||
array('+1 week', 'in 1 week'),
|
||||
array('+1 week 1 day', 'in 1 week, 1 day'),
|
||||
array('+2 weeks 2 day', 'in 2 weeks, 2 days'),
|
||||
array('2007-9-24', 'on 24/9/07'),
|
||||
array('now', 'just now'),
|
||||
);
|
||||
|
|
@ -133,37 +136,37 @@ class CakeTimeTest extends CakeTestCase {
|
|||
return array(
|
||||
array(
|
||||
'+4 months +2 weeks +3 days',
|
||||
'4 months, 2 weeks, 3 days',
|
||||
'in 4 months, 2 weeks, 3 days',
|
||||
'8 years'
|
||||
),
|
||||
array(
|
||||
'+4 months +2 weeks +1 day',
|
||||
'4 months, 2 weeks, 1 day',
|
||||
'in 4 months, 2 weeks, 1 day',
|
||||
'8 years'
|
||||
),
|
||||
array(
|
||||
'+3 months +2 weeks',
|
||||
'3 months, 2 weeks',
|
||||
'in 3 months, 2 weeks',
|
||||
'8 years'
|
||||
),
|
||||
array(
|
||||
'+3 months +2 weeks +1 day',
|
||||
'3 months, 2 weeks, 1 day',
|
||||
'in 3 months, 2 weeks, 1 day',
|
||||
'8 years'
|
||||
),
|
||||
array(
|
||||
'+1 months +1 week +1 day',
|
||||
'1 month, 1 week, 1 day',
|
||||
'in 1 month, 1 week, 1 day',
|
||||
'8 years'
|
||||
),
|
||||
array(
|
||||
'+2 months +2 days',
|
||||
'2 months, 2 days',
|
||||
'in 2 months, 2 days',
|
||||
'on ' . date('j/n/y', strtotime('+2 months +2 days'))
|
||||
),
|
||||
array(
|
||||
'+2 months +12 days',
|
||||
'2 months, 1 week, 5 days',
|
||||
'in 2 months, 1 week, 5 days',
|
||||
'3 months'
|
||||
),
|
||||
);
|
||||
|
|
@ -182,6 +185,34 @@ class CakeTimeTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* test the custom string options for timeAgoInWords
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testTimeAgoInWordsCustomStrings() {
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('-8 years -4 months -2 weeks -3 days'),
|
||||
array('relativeString' => 'at least %s ago', 'accuracy' => array('year' => 'year'), 'end' => '+10 years')
|
||||
);
|
||||
$expected = 'at least 8 years ago';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('+8 years +4 months +2 weeks +3 days'),
|
||||
array('relativeStringFuture' => 'not in the next %s', 'accuracy' => array('year' => 'year'), 'end' => '+10 years')
|
||||
);
|
||||
$expected = 'not in the next 8 years';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('+4 months +2 weeks +3 days'),
|
||||
array('absoluteString' => 'exactly on %s', 'accuracy' => array('year' => 'year'), 'end' => '+2 months')
|
||||
);
|
||||
$expected = 'exactly on ' . date('j/n/y', strtotime('+4 months +2 weeks +3 days'));
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the accuracy option for timeAgoInWords()
|
||||
*
|
||||
|
|
@ -192,40 +223,54 @@ class CakeTimeTest extends CakeTestCase {
|
|||
strtotime('+8 years +4 months +2 weeks +3 days'),
|
||||
array('accuracy' => array('year' => 'year'), 'end' => '+10 years')
|
||||
);
|
||||
$expected = '8 years';
|
||||
$expected = 'in 8 years';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('+8 years +4 months +2 weeks +3 days'),
|
||||
array('accuracy' => array('year' => 'month'), 'end' => '+10 years')
|
||||
);
|
||||
$expected = '8 years, 4 months';
|
||||
$expected = 'in 8 years, 4 months';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('+8 years +4 months +2 weeks +3 days'),
|
||||
array('accuracy' => array('year' => 'week'), 'end' => '+10 years')
|
||||
);
|
||||
$expected = '8 years, 4 months, 2 weeks';
|
||||
$expected = 'in 8 years, 4 months, 2 weeks';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('+8 years +4 months +2 weeks +3 days'),
|
||||
array('accuracy' => array('year' => 'day'), 'end' => '+10 years')
|
||||
);
|
||||
$expected = '8 years, 4 months, 2 weeks, 3 days';
|
||||
$expected = 'in 8 years, 4 months, 2 weeks, 3 days';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('+1 years +5 weeks'),
|
||||
array('accuracy' => array('year' => 'year'), 'end' => '+10 years')
|
||||
);
|
||||
$expected = '1 year';
|
||||
$expected = 'in 1 year';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('+58 minutes'),
|
||||
array('accuracy' => 'hour')
|
||||
);
|
||||
$expected = 'in about an hour';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('+23 hours'),
|
||||
array('accuracy' => 'day')
|
||||
);
|
||||
$expected = 'in about a day';
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the format option of timeAgoInWords()
|
||||
* Test the format option of timeAgoInWords() with date() and strftime compatible strings
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
|
@ -233,20 +278,32 @@ class CakeTimeTest extends CakeTestCase {
|
|||
$result = $this->Time->timeAgoInWords('2007-9-25', 'Y-m-d');
|
||||
$this->assertEquals('on 2007-09-25', $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords('2007-9-25', 'Y-m-d');
|
||||
$this->assertEquals('on 2007-09-25', $result);
|
||||
$result = $this->Time->timeAgoInWords('2007-9-25', '%x');
|
||||
$this->assertEquals('on ' . strftime('%x', strtotime('2007-9-25')), $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('+2 weeks +2 days'),
|
||||
'Y-m-d'
|
||||
);
|
||||
$this->assertRegExp('/^2 weeks, [1|2] day(s)?$/', $result);
|
||||
$this->assertRegExp('/^in 2 weeks, [1|2] day(s)?$/', $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('+2 weeks +2 days'),
|
||||
'%x'
|
||||
);
|
||||
$this->assertRegExp('/^in 2 weeks, [1|2] day(s)?$/', $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('+2 months +2 days'),
|
||||
array('end' => '1 month', 'format' => 'Y-m-d')
|
||||
);
|
||||
$this->assertEquals('on ' . date('Y-m-d', strtotime('+2 months +2 days')), $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('+2 months +2 days'),
|
||||
array('end' => '1 month', 'format' => '%x')
|
||||
);
|
||||
$this->assertEquals('on ' . strftime('%x', strtotime('+2 months +2 days')), $result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -309,6 +366,18 @@ class CakeTimeTest extends CakeTestCase {
|
|||
array('end' => '2 years')
|
||||
);
|
||||
$this->assertEquals('1 year, 1 month, 5 days ago', $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('-58 minutes'),
|
||||
array('accuracy' => 'hour')
|
||||
);
|
||||
$this->assertEquals('about an hour ago', $result);
|
||||
|
||||
$result = $this->Time->timeAgoInWords(
|
||||
strtotime('-23 hours'),
|
||||
array('accuracy' => 'day')
|
||||
);
|
||||
$this->assertEquals('about a day ago', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -367,6 +436,12 @@ class CakeTimeTest extends CakeTestCase {
|
|||
$time = time() + DAY;
|
||||
$this->assertEquals('Tomorrow, ' . date('H:i', $time), $this->Time->niceShort($time));
|
||||
|
||||
$time = strtotime('+6 days');
|
||||
$this->assertEquals('On ' . date('l F d, H:i', $time), $this->Time->niceShort($time));
|
||||
|
||||
$time = strtotime('-6 days');
|
||||
$this->assertEquals(date('l F d, H:i', $time), $this->Time->niceShort($time));
|
||||
|
||||
date_default_timezone_set('Europe/London');
|
||||
$result = $this->Time->niceShort('2005-01-15 10:00:00', new DateTimeZone('Europe/Brussels'));
|
||||
$this->assertEquals('Jan 15th 2005, 11:00', $result);
|
||||
|
|
@ -379,6 +454,19 @@ class CakeTimeTest extends CakeTestCase {
|
|||
$this->_restoreSystemTimezone();
|
||||
}
|
||||
|
||||
/**
|
||||
* testNiceShort translations
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testNiceShortI18n() {
|
||||
$restore = setlocale(LC_ALL, 0);
|
||||
setlocale(LC_ALL, 'es_ES');
|
||||
$time = strtotime('2015-01-07 03:05:00');
|
||||
$this->assertEquals('ene 7th 2015, 03:05', $this->Time->niceShort($time));
|
||||
setlocale(LC_ALL, $restore);
|
||||
}
|
||||
|
||||
/**
|
||||
* testDaysAsSql method
|
||||
*
|
||||
|
|
@ -470,7 +558,7 @@ class CakeTimeTest extends CakeTestCase {
|
|||
$expected = date('l jS \of F Y h:i:s A', $time);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$this->assertFalse($this->Time->toServer(time(), new Object()));
|
||||
$this->assertFalse($this->Time->toServer(time(), new CakeObject()));
|
||||
|
||||
date_default_timezone_set('UTC');
|
||||
|
||||
|
|
@ -541,11 +629,20 @@ class CakeTimeTest extends CakeTestCase {
|
|||
$result = $this->Time->format('Y-m-d', null, 'never');
|
||||
$this->assertEquals('never', $result);
|
||||
|
||||
$result = $this->Time->format('Y-m-d', '');
|
||||
$this->assertSame('', $result);
|
||||
|
||||
$result = $this->Time->format('Y-m-d', false);
|
||||
$this->assertSame('', $result);
|
||||
|
||||
$result = $this->Time->format('2012-01-13', '%d-%m-%Y', 'invalid');
|
||||
$this->assertEquals('13-01-2012', $result);
|
||||
|
||||
$result = $this->Time->format('nonsense', '%d-%m-%Y', 'invalid', 'UTC');
|
||||
$this->assertEquals('invalid', $result);
|
||||
|
||||
$result = $this->Time->format('0000-00-00', '%d-%m-%Y', 'invalid');
|
||||
$this->assertEquals('invalid', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -590,6 +687,40 @@ class CakeTimeTest extends CakeTestCase {
|
|||
$this->assertFalse($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testIsFuture method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testIsFuture() {
|
||||
$this->assertTrue($this->Time->isFuture('+1 month'));
|
||||
$this->assertTrue($this->Time->isFuture('+1 days'));
|
||||
$this->assertTrue($this->Time->isFuture('+1 minute'));
|
||||
$this->assertTrue($this->Time->isFuture('+1 second'));
|
||||
|
||||
$this->assertFalse($this->Time->isFuture('-1 second'));
|
||||
$this->assertFalse($this->Time->isFuture('-1 day'));
|
||||
$this->assertFalse($this->Time->isFuture('-1 week'));
|
||||
$this->assertFalse($this->Time->isFuture('-1 month'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testIsPast method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testIsPast() {
|
||||
$this->assertFalse($this->Time->isPast('+1 month'));
|
||||
$this->assertFalse($this->Time->isPast('+1 days'));
|
||||
$this->assertFalse($this->Time->isPast('+1 minute'));
|
||||
$this->assertFalse($this->Time->isPast('+1 second'));
|
||||
|
||||
$this->assertTrue($this->Time->isPast('-1 second'));
|
||||
$this->assertTrue($this->Time->isPast('-1 day'));
|
||||
$this->assertTrue($this->Time->isPast('-1 week'));
|
||||
$this->assertTrue($this->Time->isPast('-1 month'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testIsThisWeek method
|
||||
*
|
||||
|
|
@ -847,6 +978,7 @@ class CakeTimeTest extends CakeTestCase {
|
|||
|
||||
$date = new DateTime('+1 hour', new DateTimeZone('America/New_York'));
|
||||
$result = $this->Time->fromString($date, 'Asia/Kuwait');
|
||||
|
||||
$date->setTimezone(new DateTimeZone('Asia/Kuwait'));
|
||||
$expected = $date->format('U') + $date->getOffset();
|
||||
$this->assertWithinMargin($expected, $result, 1);
|
||||
|
|
@ -854,6 +986,18 @@ class CakeTimeTest extends CakeTestCase {
|
|||
$this->_restoreSystemTimezone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that datetimes in the default timezone are not modified.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testFromStringWithDateTimeNoConversion() {
|
||||
Configure::write('Config.timezone', date_default_timezone_get());
|
||||
$date = new DateTime('2013-04-09');
|
||||
$result = $this->Time->fromString($date);
|
||||
$this->assertEquals($result, $date->format('U'));
|
||||
}
|
||||
|
||||
/**
|
||||
* test converting time specifiers using a time definition localfe file
|
||||
*
|
||||
|
|
@ -944,12 +1088,12 @@ class CakeTimeTest extends CakeTestCase {
|
|||
}
|
||||
|
||||
/**
|
||||
* test convert %e on windows.
|
||||
* test convert %e on Windows.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testConvertPercentE() {
|
||||
$this->skipIf(DIRECTORY_SEPARATOR !== '\\', 'Cannot run windows tests on non-windows OS.');
|
||||
$this->skipIf(DIRECTORY_SEPARATOR !== '\\', 'Cannot run Windows tests on non-Windows OS.');
|
||||
|
||||
$time = strtotime('Thu Jan 14 11:43:39 2010');
|
||||
$result = $this->Time->convertSpecifiers('%e', $time);
|
||||
|
|
@ -1022,6 +1166,10 @@ class CakeTimeTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testListTimezones() {
|
||||
$this->skipIf(
|
||||
version_compare(PHP_VERSION, '5.4.0', '<='),
|
||||
'This test requires newer libicu which is in php5.4+'
|
||||
);
|
||||
$return = CakeTime::listTimezones();
|
||||
$this->assertTrue(isset($return['Asia']['Asia/Bangkok']));
|
||||
$this->assertEquals('Bangkok', $return['Asia']['Asia/Bangkok']);
|
||||
|
|
@ -1035,6 +1183,19 @@ class CakeTimeTest extends CakeTestCase {
|
|||
$this->assertTrue(isset($return['Asia']['Asia/Bangkok']));
|
||||
$this->assertFalse(isset($return['Pacific']));
|
||||
|
||||
$return = CakeTime::listTimezones(null, null, array('abbr' => true));
|
||||
$this->assertTrue(isset($return['Asia']['Asia/Jakarta']));
|
||||
$this->assertEquals('Jakarta - WIB', $return['Asia']['Asia/Jakarta']);
|
||||
$this->assertEquals('Regina - CST', $return['America']['America/Regina']);
|
||||
|
||||
$return = CakeTime::listTimezones(null, null, array(
|
||||
'abbr' => true,
|
||||
'before' => ' (',
|
||||
'after' => ')',
|
||||
));
|
||||
$this->assertEquals('Jayapura (WIT)', $return['Asia']['Asia/Jayapura']);
|
||||
$this->assertEquals('Regina (CST)', $return['America']['America/Regina']);
|
||||
|
||||
$return = CakeTime::listTimezones('#^(America|Pacific)/#', null, false);
|
||||
$this->assertTrue(isset($return['America/Argentina/Buenos_Aires']));
|
||||
$this->assertTrue(isset($return['Pacific/Tahiti']));
|
||||
|
|
@ -1055,7 +1216,7 @@ class CakeTimeTest extends CakeTestCase {
|
|||
* from one timezone to the other correctly
|
||||
*
|
||||
* @return void
|
||||
**/
|
||||
*/
|
||||
public function testCorrectTimezoneConversion() {
|
||||
date_default_timezone_set('UTC');
|
||||
$date = '2012-01-01 10:00:00';
|
||||
|
|
|
|||
|
|
@ -2,20 +2,20 @@
|
|||
/**
|
||||
* ClassRegistryTest file
|
||||
*
|
||||
* PHP 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @since CakePHP(tm) v 1.2.0.5432
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('ClassRegistry', 'Utility');
|
||||
|
||||
/**
|
||||
|
|
@ -28,7 +28,7 @@ class ClassRegisterModel extends CakeTestModel {
|
|||
/**
|
||||
* useTable property
|
||||
*
|
||||
* @var bool false
|
||||
* @var bool
|
||||
*/
|
||||
public $useTable = false;
|
||||
}
|
||||
|
|
@ -39,13 +39,6 @@ class ClassRegisterModel extends CakeTestModel {
|
|||
* @package Cake.Test.Case.Utility
|
||||
*/
|
||||
class RegisterArticle extends ClassRegisterModel {
|
||||
|
||||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'RegisterArticle'
|
||||
*/
|
||||
public $name = 'RegisterArticle';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -54,13 +47,6 @@ class RegisterArticle extends ClassRegisterModel {
|
|||
* @package Cake.Test.Case.Utility
|
||||
*/
|
||||
class RegisterArticleFeatured extends ClassRegisterModel {
|
||||
|
||||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'RegisterArticleFeatured'
|
||||
*/
|
||||
public $name = 'RegisterArticleFeatured';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -69,13 +55,6 @@ class RegisterArticleFeatured extends ClassRegisterModel {
|
|||
* @package Cake.Test.Case.Utility
|
||||
*/
|
||||
class RegisterArticleTag extends ClassRegisterModel {
|
||||
|
||||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'RegisterArticleTag'
|
||||
*/
|
||||
public $name = 'RegisterArticleTag';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -88,7 +67,7 @@ class RegistryPluginAppModel extends ClassRegisterModel {
|
|||
/**
|
||||
* tablePrefix property
|
||||
*
|
||||
* @var string 'something_'
|
||||
* @var string
|
||||
*/
|
||||
public $tablePrefix = 'something_';
|
||||
}
|
||||
|
|
@ -99,13 +78,6 @@ class RegistryPluginAppModel extends ClassRegisterModel {
|
|||
* @package Cake.Test.Case.Utility
|
||||
*/
|
||||
class TestRegistryPluginModel extends RegistryPluginAppModel {
|
||||
|
||||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'TestRegistryPluginModel'
|
||||
*/
|
||||
public $name = 'TestRegistryPluginModel';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -114,13 +86,6 @@ class TestRegistryPluginModel extends RegistryPluginAppModel {
|
|||
* @package Cake.Test.Case.Utility
|
||||
*/
|
||||
class RegisterCategory extends ClassRegisterModel {
|
||||
|
||||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'RegisterCategory'
|
||||
*/
|
||||
public $name = 'RegisterCategory';
|
||||
}
|
||||
/**
|
||||
* RegisterPrefixedDs class
|
||||
|
|
@ -132,7 +97,7 @@ class RegisterPrefixedDs extends ClassRegisterModel {
|
|||
/**
|
||||
* useDbConfig property
|
||||
*
|
||||
* @var string 'doesnotexist'
|
||||
* @var string
|
||||
*/
|
||||
public $useDbConfig = 'doesnotexist';
|
||||
}
|
||||
|
|
@ -169,7 +134,7 @@ class ClassRegistryTest extends CakeTestCase {
|
|||
*/
|
||||
public function testAddModel() {
|
||||
$Tag = ClassRegistry::init('RegisterArticleTag');
|
||||
$this->assertTrue(is_a($Tag, 'RegisterArticleTag'));
|
||||
$this->assertInstanceOf('RegisterArticleTag', $Tag);
|
||||
|
||||
$TagCopy = ClassRegistry::isKeySet('RegisterArticleTag');
|
||||
$this->assertTrue($TagCopy);
|
||||
|
|
@ -178,11 +143,11 @@ class ClassRegistryTest extends CakeTestCase {
|
|||
|
||||
$TagCopy = ClassRegistry::getObject('RegisterArticleTag');
|
||||
|
||||
$this->assertTrue(is_a($TagCopy, 'RegisterArticleTag'));
|
||||
$this->assertInstanceOf('RegisterArticleTag', $TagCopy);
|
||||
$this->assertSame($Tag, $TagCopy);
|
||||
|
||||
$NewTag = ClassRegistry::init(array('class' => 'RegisterArticleTag', 'alias' => 'NewTag'));
|
||||
$this->assertTrue(is_a($Tag, 'RegisterArticleTag'));
|
||||
$this->assertInstanceOf('RegisterArticleTag', $NewTag);
|
||||
|
||||
$NewTagCopy = ClassRegistry::init(array('class' => 'RegisterArticleTag', 'alias' => 'NewTag'));
|
||||
|
||||
|
|
@ -199,17 +164,17 @@ class ClassRegistryTest extends CakeTestCase {
|
|||
$this->assertTrue($TagCopy->name === 'SomeOtherName');
|
||||
|
||||
$User = ClassRegistry::init(array('class' => 'RegisterUser', 'alias' => 'User', 'table' => false));
|
||||
$this->assertTrue(is_a($User, 'AppModel'));
|
||||
$this->assertInstanceOf('AppModel', $User);
|
||||
|
||||
$UserCopy = ClassRegistry::init(array('class' => 'RegisterUser', 'alias' => 'User', 'table' => false));
|
||||
$this->assertTrue(is_a($UserCopy, 'AppModel'));
|
||||
$this->assertInstanceOf('AppModel', $UserCopy);
|
||||
$this->assertEquals($User, $UserCopy);
|
||||
|
||||
$Category = ClassRegistry::init(array('class' => 'RegisterCategory'));
|
||||
$this->assertTrue(is_a($Category, 'RegisterCategory'));
|
||||
$this->assertInstanceOf('RegisterCategory', $Category);
|
||||
|
||||
$ParentCategory = ClassRegistry::init(array('class' => 'RegisterCategory', 'alias' => 'ParentCategory'));
|
||||
$this->assertTrue(is_a($ParentCategory, 'RegisterCategory'));
|
||||
$this->assertInstanceOf('RegisterCategory', $ParentCategory);
|
||||
$this->assertNotSame($Category, $ParentCategory);
|
||||
|
||||
$this->assertNotEquals($Category->alias, $ParentCategory->alias);
|
||||
|
|
@ -217,21 +182,50 @@ class ClassRegistryTest extends CakeTestCase {
|
|||
$this->assertEquals('ParentCategory', $ParentCategory->alias);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that init() can make models with alias set properly
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testAddModelWithAlias() {
|
||||
$tag = ClassRegistry::init(array('class' => 'RegisterArticleTag', 'alias' => 'NewTag'));
|
||||
$this->assertInstanceOf('RegisterArticleTag', $tag);
|
||||
$this->assertSame('NewTag', $tag->alias);
|
||||
$this->assertSame('RegisterArticleTag', $tag->name);
|
||||
|
||||
$newTag = ClassRegistry::init(array('class' => 'RegisterArticleTag', 'alias' => 'OtherTag'));
|
||||
$this->assertInstanceOf('RegisterArticleTag', $tag);
|
||||
$this->assertSame('OtherTag', $newTag->alias);
|
||||
$this->assertSame('RegisterArticleTag', $newTag->name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that init() can make the Aco models with alias set properly
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testAddModelWithAliasAco() {
|
||||
$aco = ClassRegistry::init(array('class' => 'Aco', 'alias' => 'CustomAco'));
|
||||
$this->assertInstanceOf('Aco', $aco);
|
||||
$this->assertSame('Aco', $aco->name);
|
||||
$this->assertSame('CustomAco', $aco->alias);
|
||||
}
|
||||
|
||||
/**
|
||||
* testClassRegistryFlush method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testClassRegistryFlush() {
|
||||
$Tag = ClassRegistry::init('RegisterArticleTag');
|
||||
ClassRegistry::init('RegisterArticleTag');
|
||||
|
||||
$ArticleTag = ClassRegistry::getObject('RegisterArticleTag');
|
||||
$this->assertTrue(is_a($ArticleTag, 'RegisterArticleTag'));
|
||||
$this->assertInstanceOf('RegisterArticleTag', $ArticleTag);
|
||||
ClassRegistry::flush();
|
||||
|
||||
$NoArticleTag = ClassRegistry::isKeySet('RegisterArticleTag');
|
||||
$this->assertFalse($NoArticleTag);
|
||||
$this->assertTrue(is_a($ArticleTag, 'RegisterArticleTag'));
|
||||
$this->assertInstanceOf('RegisterArticleTag', $ArticleTag);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -266,13 +260,13 @@ class ClassRegistryTest extends CakeTestCase {
|
|||
$this->assertTrue($Tag);
|
||||
|
||||
$Article = ClassRegistry::getObject('Article');
|
||||
$this->assertTrue(is_a($Article, 'RegisterArticle'));
|
||||
$this->assertInstanceOf('RegisterArticle', $Article);
|
||||
|
||||
$Featured = ClassRegistry::getObject('Featured');
|
||||
$this->assertTrue(is_a($Featured, 'RegisterArticleFeatured'));
|
||||
$this->assertInstanceOf('RegisterArticleFeatured', $Featured);
|
||||
|
||||
$Tag = ClassRegistry::getObject('Tag');
|
||||
$this->assertTrue(is_a($Tag, 'RegisterArticleTag'));
|
||||
$this->assertInstanceOf('RegisterArticleTag', $Tag);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -287,15 +281,15 @@ class ClassRegistryTest extends CakeTestCase {
|
|||
//Faking a plugin
|
||||
CakePlugin::load('RegistryPlugin', array('path' => '/fake/path'));
|
||||
$TestRegistryPluginModel = ClassRegistry::init('RegistryPlugin.TestRegistryPluginModel');
|
||||
$this->assertTrue(is_a($TestRegistryPluginModel, 'TestRegistryPluginModel'));
|
||||
$this->assertInstanceOf('TestRegistryPluginModel', $TestRegistryPluginModel);
|
||||
|
||||
$this->assertEquals('something_', $TestRegistryPluginModel->tablePrefix);
|
||||
|
||||
$PluginUser = ClassRegistry::init(array('class' => 'RegistryPlugin.RegisterUser', 'alias' => 'RegistryPluginUser', 'table' => false));
|
||||
$this->assertTrue(is_a($PluginUser, 'RegistryPluginAppModel'));
|
||||
$this->assertInstanceOf('RegistryPluginAppModel', $PluginUser);
|
||||
|
||||
$PluginUserCopy = ClassRegistry::getObject('RegistryPluginUser');
|
||||
$this->assertTrue(is_a($PluginUserCopy, 'RegistryPluginAppModel'));
|
||||
$this->assertInstanceOf('RegistryPluginAppModel', $PluginUserCopy);
|
||||
$this->assertSame($PluginUser, $PluginUserCopy);
|
||||
CakePlugin::unload();
|
||||
}
|
||||
|
|
@ -303,6 +297,7 @@ class ClassRegistryTest extends CakeTestCase {
|
|||
/**
|
||||
* Tests prefixed datasource names for test purposes
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testPrefixedTestDatasource() {
|
||||
ClassRegistry::config(array('testing' => true));
|
||||
|
|
@ -322,6 +317,7 @@ class ClassRegistryTest extends CakeTestCase {
|
|||
/**
|
||||
* Tests that passing the string parameter to init() will return false if the model does not exists
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testInitStrict() {
|
||||
$this->assertFalse(ClassRegistry::init('NonExistent', true));
|
||||
|
|
|
|||
|
|
@ -1,20 +1,22 @@
|
|||
<?php
|
||||
/**
|
||||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://cakephp.org CakePHP Project
|
||||
* @since CakePHP(tm) v 1.2.0.5432
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('Debugger', 'Utility');
|
||||
|
||||
/**
|
||||
* DebugggerTestCaseDebuggger class
|
||||
* DebuggerTestCaseDebugger class
|
||||
*
|
||||
* @package Cake.Test.Case.Utility
|
||||
*/
|
||||
|
|
@ -65,7 +67,7 @@ class DebuggerTest extends CakeTestCase {
|
|||
public function testDocRef() {
|
||||
ini_set('docref_root', '');
|
||||
$this->assertEquals(ini_get('docref_root'), '');
|
||||
$debugger = new Debugger();
|
||||
new Debugger();
|
||||
$this->assertEquals(ini_get('docref_root'), 'http://php.net/');
|
||||
}
|
||||
|
||||
|
|
@ -87,7 +89,7 @@ class DebuggerTest extends CakeTestCase {
|
|||
$pattern = '/<code>.*?<span style\="color\: \#\d+">.*?<\?php/';
|
||||
$this->assertRegExp($pattern, $result[0]);
|
||||
|
||||
$result = Debugger::excerpt(__FILE__, 10, 2);
|
||||
$result = Debugger::excerpt(__FILE__, 11, 2);
|
||||
$this->assertEquals(5, count($result));
|
||||
|
||||
$pattern = '/<span style\="color\: \#\d{6}">\*<\/span>/';
|
||||
|
|
@ -141,8 +143,8 @@ class DebuggerTest extends CakeTestCase {
|
|||
'a' => array(
|
||||
'href' => "javascript:void(0);",
|
||||
'onclick' => "preg:/document\.getElementById\('cakeErr[a-z0-9]+\-trace'\)\.style\.display = " .
|
||||
"\(document\.getElementById\('cakeErr[a-z0-9]+\-trace'\)\.style\.display == 'none'" .
|
||||
" \? '' \: 'none'\);/"
|
||||
"\(document\.getElementById\('cakeErr[a-z0-9]+\-trace'\)\.style\.display == 'none'" .
|
||||
" \? '' \: 'none'\);/"
|
||||
),
|
||||
'b' => array(), 'Notice', '/b', ' (8)',
|
||||
));
|
||||
|
|
@ -153,6 +155,24 @@ class DebuggerTest extends CakeTestCase {
|
|||
$this->assertContains('$wrong = ''', $result[3], 'Context should be HTML escaped.');
|
||||
}
|
||||
|
||||
/**
|
||||
* test encodes error messages
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testOutputEncodeDescription() {
|
||||
set_error_handler('Debugger::showError');
|
||||
$this->_restoreError = true;
|
||||
|
||||
ob_start();
|
||||
$a = array();
|
||||
$b = $a['<script>alert(1)</script>'];
|
||||
$result = ob_get_clean();
|
||||
|
||||
$this->assertNotContains('<script>alert(1)', $result);
|
||||
$this->assertContains('<script>alert(1)', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that changes in output formats using Debugger::output() change the templates used.
|
||||
*
|
||||
|
|
@ -171,7 +191,7 @@ class DebuggerTest extends CakeTestCase {
|
|||
|
||||
Debugger::output('xml', array(
|
||||
'error' => '<error><code>{:code}</code><file>{:file}</file><line>{:line}</line>' .
|
||||
'{:description}</error>',
|
||||
'{:description}</error>',
|
||||
'context' => "<context>{:context}</context>",
|
||||
'trace' => "<stack>{:trace}</stack>",
|
||||
));
|
||||
|
|
@ -185,7 +205,7 @@ class DebuggerTest extends CakeTestCase {
|
|||
'error' => array(),
|
||||
'code' => array(), '8', '/code',
|
||||
'file' => array(), 'preg:/[^<]+/', '/file',
|
||||
'line' => array(), '' . (intval(__LINE__) - 7), '/line',
|
||||
'line' => array(), '' . ((int)__LINE__ - 7), '/line',
|
||||
'preg:/Undefined variable:\s+foo/',
|
||||
'/error'
|
||||
);
|
||||
|
|
@ -223,7 +243,7 @@ class DebuggerTest extends CakeTestCase {
|
|||
|
||||
Debugger::addFormat('js', array(
|
||||
'traceLine' => '{:reference} - <a href="txmt://open?url=file://{:file}' .
|
||||
'&line={:line}">{:path}</a>, line {:line}'
|
||||
'&line={:line}">{:path}</a>, line {:line}'
|
||||
));
|
||||
Debugger::outputAs('js');
|
||||
|
||||
|
|
@ -232,7 +252,7 @@ class DebuggerTest extends CakeTestCase {
|
|||
|
||||
Debugger::addFormat('xml', array(
|
||||
'error' => '<error><code>{:code}</code><file>{:file}</file><line>{:line}</line>' .
|
||||
'{:description}</error>',
|
||||
'{:description}</error>',
|
||||
));
|
||||
Debugger::outputAs('xml');
|
||||
|
||||
|
|
@ -244,7 +264,7 @@ class DebuggerTest extends CakeTestCase {
|
|||
'<error',
|
||||
'<code', '8', '/code',
|
||||
'<file', 'preg:/[^<]+/', '/file',
|
||||
'<line', '' . (intval(__LINE__) - 7), '/line',
|
||||
'<line', '' . ((int)__LINE__ - 7), '/line',
|
||||
'preg:/Undefined variable:\s+foo/',
|
||||
'/error'
|
||||
);
|
||||
|
|
@ -272,6 +292,8 @@ class DebuggerTest extends CakeTestCase {
|
|||
|
||||
/**
|
||||
* Test method for testing addFormat with callbacks.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function customFormat($error, $strings) {
|
||||
return $error['error'] . ': I eated an error ' . $error['file'];
|
||||
|
|
@ -331,10 +353,47 @@ object(View) {
|
|||
request => object(CakeRequest) {}
|
||||
response => object(CakeResponse) {}
|
||||
elementCache => 'default'
|
||||
elementCacheSettings => array()
|
||||
Html => object(HtmlHelper) {}
|
||||
Form => object(FormHelper) {}
|
||||
int => (int) 2
|
||||
float => (float) 1.333
|
||||
|
||||
TEXT;
|
||||
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
|
||||
$expected .= <<<TEXT
|
||||
[protected] _passedVars => array(
|
||||
(int) 0 => 'viewVars',
|
||||
(int) 1 => 'autoLayout',
|
||||
(int) 2 => 'ext',
|
||||
(int) 3 => 'helpers',
|
||||
(int) 4 => 'view',
|
||||
(int) 5 => 'layout',
|
||||
(int) 6 => 'name',
|
||||
(int) 7 => 'theme',
|
||||
(int) 8 => 'layoutPath',
|
||||
(int) 9 => 'viewPath',
|
||||
(int) 10 => 'request',
|
||||
(int) 11 => 'plugin',
|
||||
(int) 12 => 'passedArgs',
|
||||
(int) 13 => 'cacheAction'
|
||||
)
|
||||
[protected] _scripts => array()
|
||||
[protected] _paths => array()
|
||||
[protected] _pathsForPlugin => array()
|
||||
[protected] _parents => array()
|
||||
[protected] _current => null
|
||||
[protected] _currentType => ''
|
||||
[protected] _stack => array()
|
||||
[protected] _eventManager => object(CakeEventManager) {}
|
||||
[protected] _eventManagerConfigured => false
|
||||
|
||||
TEXT;
|
||||
}
|
||||
$expected .= <<<TEXT
|
||||
}
|
||||
TEXT;
|
||||
|
||||
$this->assertTextEquals($expected, $result);
|
||||
|
||||
$data = array(
|
||||
|
|
@ -362,6 +421,44 @@ array(
|
|||
[maximum depth reached]
|
||||
)
|
||||
)
|
||||
TEXT;
|
||||
$this->assertTextEquals($expected, $result);
|
||||
|
||||
$data = false;
|
||||
$result = Debugger::exportVar($data);
|
||||
$expected = <<<TEXT
|
||||
false
|
||||
TEXT;
|
||||
$this->assertTextEquals($expected, $result);
|
||||
|
||||
$file = fopen('php://output', 'w');
|
||||
fclose($file);
|
||||
$result = Debugger::exportVar($file);
|
||||
$this->assertTextEquals('unknown', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test exporting various kinds of false.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testExportVarZero() {
|
||||
$data = array(
|
||||
'nothing' => '',
|
||||
'null' => null,
|
||||
'false' => false,
|
||||
'szero' => '0',
|
||||
'zero' => 0
|
||||
);
|
||||
$result = Debugger::exportVar($data);
|
||||
$expected = <<<TEXT
|
||||
array(
|
||||
'nothing' => '',
|
||||
'null' => null,
|
||||
'false' => false,
|
||||
'szero' => '0',
|
||||
'zero' => (int) 0
|
||||
)
|
||||
TEXT;
|
||||
$this->assertTextEquals($expected, $result);
|
||||
}
|
||||
|
|
@ -375,21 +472,44 @@ TEXT;
|
|||
if (file_exists(LOGS . 'debug.log')) {
|
||||
unlink(LOGS . 'debug.log');
|
||||
}
|
||||
CakeLog::config('file', array('engine' => 'File', 'path' => TMP . 'logs' . DS));
|
||||
|
||||
Debugger::log('cool');
|
||||
$result = file_get_contents(LOGS . 'debug.log');
|
||||
$this->assertRegExp('/DebuggerTest\:\:testLog/i', $result);
|
||||
$this->assertRegExp("/'cool'/", $result);
|
||||
$this->assertContains('DebuggerTest::testLog', $result);
|
||||
$this->assertContains("'cool'", $result);
|
||||
|
||||
unlink(LOGS . 'debug.log');
|
||||
|
||||
Debugger::log(array('whatever', 'here'));
|
||||
$result = file_get_contents(LOGS . 'debug.log');
|
||||
$this->assertRegExp('/DebuggerTest\:\:testLog/i', $result);
|
||||
$this->assertRegExp('/\[main\]/', $result);
|
||||
$this->assertRegExp('/array/', $result);
|
||||
$this->assertRegExp("/'whatever',/", $result);
|
||||
$this->assertRegExp("/'here'/", $result);
|
||||
$this->assertContains('DebuggerTest::testLog', $result);
|
||||
$this->assertContains('[main]', $result);
|
||||
$this->assertContains('array', $result);
|
||||
$this->assertContains("'whatever',", $result);
|
||||
$this->assertContains("'here'", $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* test log() depth
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testLogDepth() {
|
||||
if (file_exists(LOGS . 'debug.log')) {
|
||||
unlink(LOGS . 'debug.log');
|
||||
}
|
||||
CakeLog::config('file', array('engine' => 'File', 'path' => TMP . 'logs' . DS));
|
||||
|
||||
$val = array(
|
||||
'test' => array('key' => 'val')
|
||||
);
|
||||
Debugger::log($val, LOG_DEBUG, 0);
|
||||
$result = file_get_contents(LOGS . 'debug.log');
|
||||
$this->assertContains('DebuggerTest::testLog', $result);
|
||||
$this->assertNotContains("/'val'/", $result);
|
||||
|
||||
unlink(LOGS . 'debug.log');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -413,8 +533,11 @@ TEXT;
|
|||
ob_start();
|
||||
Debugger::dump($var);
|
||||
$result = ob_get_clean();
|
||||
|
||||
$open = PHP_SAPI === 'cli' ? "\n" : '<pre>';
|
||||
$close = PHP_SAPI === 'cli' ? "\n" : '</pre>';
|
||||
$expected = <<<TEXT
|
||||
<pre>array(
|
||||
{$open}array(
|
||||
'People' => array(
|
||||
(int) 0 => array(
|
||||
'name' => 'joeseph',
|
||||
|
|
@ -427,7 +550,22 @@ TEXT;
|
|||
'hair' => 'black'
|
||||
)
|
||||
)
|
||||
)</pre>
|
||||
){$close}
|
||||
TEXT;
|
||||
$this->assertTextEquals($expected, $result);
|
||||
|
||||
ob_start();
|
||||
Debugger::dump($var, 1);
|
||||
$result = ob_get_clean();
|
||||
|
||||
$open = PHP_SAPI === 'cli' ? "\n" : '<pre>';
|
||||
$close = PHP_SAPI === 'cli' ? "\n" : '</pre>';
|
||||
$expected = <<<TEXT
|
||||
{$open}array(
|
||||
'People' => array(
|
||||
[maximum depth reached]
|
||||
)
|
||||
){$close}
|
||||
TEXT;
|
||||
$this->assertTextEquals($expected, $result);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,20 +2,20 @@
|
|||
/**
|
||||
* FileTest file
|
||||
*
|
||||
* PHP 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('File', 'Utility');
|
||||
App::uses('Folder', 'Utility');
|
||||
|
||||
|
|
@ -23,13 +23,14 @@ App::uses('Folder', 'Utility');
|
|||
* FileTest class
|
||||
*
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @coversDefaultClass File
|
||||
*/
|
||||
class FileTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* File property
|
||||
*
|
||||
* @var mixed null
|
||||
* @var mixed
|
||||
*/
|
||||
public $File = null;
|
||||
|
||||
|
|
@ -62,6 +63,15 @@ class FileTest extends CakeTestCase {
|
|||
* testBasic method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::__construct
|
||||
* @covers ::info
|
||||
* @covers ::ext
|
||||
* @covers ::name
|
||||
* @covers ::md5
|
||||
* @covers ::size
|
||||
* @covers ::owner
|
||||
* @covers ::group
|
||||
* @covers ::Folder
|
||||
*/
|
||||
public function testBasic() {
|
||||
$file = CAKE . DS . 'LICENSE.txt';
|
||||
|
|
@ -81,8 +91,7 @@ class FileTest extends CakeTestCase {
|
|||
'filesize' => filesize($file),
|
||||
'mime' => 'text/plain'
|
||||
);
|
||||
if (
|
||||
!function_exists('finfo_open') &&
|
||||
if (!function_exists('finfo_open') &&
|
||||
(!function_exists('mime_content_type') ||
|
||||
function_exists('mime_content_type') &&
|
||||
mime_content_type($this->File->pwd()) === false)
|
||||
|
|
@ -125,13 +134,14 @@ class FileTest extends CakeTestCase {
|
|||
|
||||
/**
|
||||
* testPermission method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::perms
|
||||
*/
|
||||
public function testPermission() {
|
||||
$this->skipIf(DIRECTORY_SEPARATOR === '\\', 'File permissions tests not supported on Windows.');
|
||||
|
||||
$dir = TMP . 'tests' . DS . 'permissions' . DS;
|
||||
$Folder = new Folder($dir);
|
||||
|
||||
$old = umask();
|
||||
|
||||
umask(0002);
|
||||
|
|
@ -173,6 +183,7 @@ class FileTest extends CakeTestCase {
|
|||
* testRead method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::read
|
||||
*/
|
||||
public function testRead() {
|
||||
$file = __FILE__;
|
||||
|
|
@ -204,6 +215,7 @@ class FileTest extends CakeTestCase {
|
|||
* testOffset method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::offset
|
||||
*/
|
||||
public function testOffset() {
|
||||
$this->File->close();
|
||||
|
|
@ -217,25 +229,26 @@ class FileTest extends CakeTestCase {
|
|||
$this->assertTrue(is_resource($this->File->handle));
|
||||
|
||||
$result = $this->File->offset();
|
||||
$expecting = 0;
|
||||
$this->assertSame($result, $expecting);
|
||||
$expected = 0;
|
||||
$this->assertSame($expected, $result);
|
||||
|
||||
$data = file_get_contents(__FILE__);
|
||||
$success = $this->File->offset(5);
|
||||
$expecting = substr($data, 5, 3);
|
||||
$expected = substr($data, 5, 3);
|
||||
$result = $this->File->read(3);
|
||||
$this->assertTrue($success);
|
||||
$this->assertEquals($expecting, $result);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = $this->File->offset();
|
||||
$expecting = 5 + 3;
|
||||
$this->assertSame($result, $expecting);
|
||||
$expected = 5 + 3;
|
||||
$this->assertSame($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testOpen method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::open
|
||||
*/
|
||||
public function testOpen() {
|
||||
$this->File->handle = null;
|
||||
|
|
@ -260,6 +273,7 @@ class FileTest extends CakeTestCase {
|
|||
* testClose method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::close
|
||||
*/
|
||||
public function testClose() {
|
||||
$this->File->handle = null;
|
||||
|
|
@ -277,6 +291,9 @@ class FileTest extends CakeTestCase {
|
|||
* testCreate method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::create
|
||||
* @covers ::exists
|
||||
* @covers ::clearStatCache
|
||||
*/
|
||||
public function testCreate() {
|
||||
$tmpFile = TMP . 'tests' . DS . 'cakephp.file.test.tmp';
|
||||
|
|
@ -284,10 +301,29 @@ class FileTest extends CakeTestCase {
|
|||
$this->assertTrue($File->exists());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the exists() method.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testExists() {
|
||||
$tmpFile = TMP . 'tests/cakephp.file.test.tmp';
|
||||
$file = new File($tmpFile, true, 0777);
|
||||
$this->assertTrue($file->exists(), 'absolute path should exist');
|
||||
|
||||
$file = new File('file://' . $tmpFile, false);
|
||||
$this->assertTrue($file->exists(), 'file:// should exist.');
|
||||
|
||||
$file = new File('/something/bad', false);
|
||||
$this->assertFalse($file->exists(), 'missing file should not exist.');
|
||||
}
|
||||
|
||||
/**
|
||||
* testOpeningNonExistentFileCreatesIt method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::open
|
||||
* @covers ::create
|
||||
*/
|
||||
public function testOpeningNonExistentFileCreatesIt() {
|
||||
$someFile = new File(TMP . 'some_file.txt', false);
|
||||
|
|
@ -301,26 +337,28 @@ class FileTest extends CakeTestCase {
|
|||
* testPrepare method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::prepare
|
||||
*/
|
||||
public function testPrepare() {
|
||||
$string = "some\nvery\ncool\r\nteststring here\n\n\nfor\r\r\n\n\r\n\nhere";
|
||||
if (DS == '\\') {
|
||||
if (DS === '\\') {
|
||||
$expected = "some\r\nvery\r\ncool\r\nteststring here\r\n\r\n\r\n";
|
||||
$expected .= "for\r\n\r\n\r\n\r\n\r\nhere";
|
||||
} else {
|
||||
$expected = "some\nvery\ncool\nteststring here\n\n\nfor\n\n\n\n\nhere";
|
||||
}
|
||||
$this->assertSame(File::prepare($string), $expected);
|
||||
$this->assertSame($expected, File::prepare($string));
|
||||
|
||||
$expected = "some\r\nvery\r\ncool\r\nteststring here\r\n\r\n\r\n";
|
||||
$expected .= "for\r\n\r\n\r\n\r\n\r\nhere";
|
||||
$this->assertSame(File::prepare($string, true), $expected);
|
||||
$this->assertSame($expected, File::prepare($string, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* testReadable method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::readable
|
||||
*/
|
||||
public function testReadable() {
|
||||
$someFile = new File(TMP . 'some_file.txt', false);
|
||||
|
|
@ -334,6 +372,7 @@ class FileTest extends CakeTestCase {
|
|||
* testWritable method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::writable
|
||||
*/
|
||||
public function testWritable() {
|
||||
$someFile = new File(TMP . 'some_file.txt', false);
|
||||
|
|
@ -347,6 +386,7 @@ class FileTest extends CakeTestCase {
|
|||
* testExecutable method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::executable
|
||||
*/
|
||||
public function testExecutable() {
|
||||
$someFile = new File(TMP . 'some_file.txt', false);
|
||||
|
|
@ -360,6 +400,7 @@ class FileTest extends CakeTestCase {
|
|||
* testLastAccess method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::lastAccess
|
||||
*/
|
||||
public function testLastAccess() {
|
||||
$someFile = new File(TMP . 'some_file.txt', false);
|
||||
|
|
@ -374,6 +415,7 @@ class FileTest extends CakeTestCase {
|
|||
* testLastChange method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::lastChange
|
||||
*/
|
||||
public function testLastChange() {
|
||||
$someFile = new File(TMP . 'some_file.txt', false);
|
||||
|
|
@ -392,11 +434,12 @@ class FileTest extends CakeTestCase {
|
|||
* testWrite method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::write
|
||||
*/
|
||||
public function testWrite() {
|
||||
if (!$tmpFile = $this->_getTmpFile()) {
|
||||
return false;
|
||||
};
|
||||
}
|
||||
if (file_exists($tmpFile)) {
|
||||
unlink($tmpFile);
|
||||
}
|
||||
|
|
@ -422,11 +465,12 @@ class FileTest extends CakeTestCase {
|
|||
* testAppend method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::append
|
||||
*/
|
||||
public function testAppend() {
|
||||
if (!$tmpFile = $this->_getTmpFile()) {
|
||||
return false;
|
||||
};
|
||||
}
|
||||
if (file_exists($tmpFile)) {
|
||||
unlink($tmpFile);
|
||||
}
|
||||
|
|
@ -434,22 +478,31 @@ class FileTest extends CakeTestCase {
|
|||
$TmpFile = new File($tmpFile);
|
||||
$this->assertFalse(file_exists($tmpFile));
|
||||
|
||||
$fragments = array('CakePHP\'s', ' test suite', ' was here ...', '');
|
||||
$fragments = array('CakePHP\'s', ' test suite', ' was here ...');
|
||||
$data = null;
|
||||
$size = 0;
|
||||
foreach ($fragments as $fragment) {
|
||||
$r = $TmpFile->append($fragment);
|
||||
$this->assertTrue($r);
|
||||
$this->assertTrue(file_exists($tmpFile));
|
||||
$data = $data . $fragment;
|
||||
$this->assertEquals($data, file_get_contents($tmpFile));
|
||||
$newSize = $TmpFile->size();
|
||||
$this->assertTrue($newSize > $size);
|
||||
$size = $newSize;
|
||||
$TmpFile->close();
|
||||
}
|
||||
|
||||
$TmpFile->append('');
|
||||
$this->assertEquals($data, file_get_contents($tmpFile));
|
||||
$TmpFile->close();
|
||||
}
|
||||
|
||||
/**
|
||||
* testDelete method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::delete
|
||||
*/
|
||||
public function testDelete() {
|
||||
if (!$tmpFile = $this->_getTmpFile()) {
|
||||
|
|
@ -475,6 +528,7 @@ class FileTest extends CakeTestCase {
|
|||
* active filehandles open.
|
||||
*
|
||||
* @return void
|
||||
* @covers ::delete
|
||||
*/
|
||||
public function testDeleteAfterRead() {
|
||||
if (!$tmpFile = $this->_getTmpFile()) {
|
||||
|
|
@ -492,6 +546,7 @@ class FileTest extends CakeTestCase {
|
|||
* testCopy method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::copy
|
||||
*/
|
||||
public function testCopy() {
|
||||
$dest = TMP . 'tests' . DS . 'cakephp.file.test.tmp';
|
||||
|
|
@ -520,13 +575,14 @@ class FileTest extends CakeTestCase {
|
|||
* Test mime()
|
||||
*
|
||||
* @return void
|
||||
* @covers ::mime
|
||||
*/
|
||||
public function testMime() {
|
||||
$this->skipIf(!function_exists('finfo_open') && !function_exists('mime_content_type'), 'Not able to read mime type');
|
||||
$path = CAKE . 'Test' . DS . 'test_app' . DS . 'webroot' . DS . 'img' . DS . 'cake.power.gif';
|
||||
$file = new File($path);
|
||||
$expected = 'image/gif';
|
||||
if (function_exists('mime_content_type') && false === mime_content_type($file->pwd())) {
|
||||
if (function_exists('mime_content_type') && mime_content_type($file->pwd()) === false) {
|
||||
$expected = false;
|
||||
}
|
||||
$this->assertEquals($expected, $file->mime());
|
||||
|
|
@ -542,7 +598,7 @@ class FileTest extends CakeTestCase {
|
|||
$tmpFile = TMP . 'tests' . DS . 'cakephp.file.test.tmp';
|
||||
if (is_writable(dirname($tmpFile)) && (!file_exists($tmpFile) || is_writable($tmpFile))) {
|
||||
return $tmpFile;
|
||||
};
|
||||
}
|
||||
|
||||
if ($paintSkip) {
|
||||
$trace = debug_backtrace();
|
||||
|
|
@ -554,4 +610,54 @@ class FileTest extends CakeTestCase {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* testReplaceText method
|
||||
*
|
||||
* @return void
|
||||
* @covers ::replaceText
|
||||
*/
|
||||
public function testReplaceText() {
|
||||
$TestFile = new File(dirname(__FILE__) . '/../../test_app/Vendor/welcome.php');
|
||||
$TmpFile = new File(TMP . 'tests' . DS . 'cakephp.file.test.tmp');
|
||||
|
||||
// Copy the test file to the temporary location
|
||||
$TestFile->copy($TmpFile->path, true);
|
||||
|
||||
// Replace the contents of the tempory file
|
||||
$result = $TmpFile->replaceText('welcome.php', 'welcome.tmp');
|
||||
$this->assertTrue($result);
|
||||
|
||||
// Double check
|
||||
$expected = 'This is the welcome.tmp file in vendors directory';
|
||||
$contents = $TmpFile->read();
|
||||
$this->assertContains($expected, $contents);
|
||||
|
||||
$search = array('This is the', 'welcome.php file', 'in tmp directory');
|
||||
$replace = array('This should be a', 'welcome.tmp file', 'in the Lib directory');
|
||||
|
||||
// Replace the contents of the tempory file
|
||||
$result = $TmpFile->replaceText($search, $replace);
|
||||
$this->assertTrue($result);
|
||||
|
||||
// Double check
|
||||
$expected = 'This should be a welcome.tmp file in vendors directory';
|
||||
$contents = $TmpFile->read();
|
||||
$this->assertContains($expected, $contents);
|
||||
|
||||
$TmpFile->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that no path is being set for passed file paths that
|
||||
* do not exist.
|
||||
*
|
||||
* @return void
|
||||
* @covers ::pwd
|
||||
*/
|
||||
public function testNoPartialPathBeingSetForNonExistentPath() {
|
||||
$tmpFile = new File('/non/existent/file');
|
||||
$this->assertNull($tmpFile->pwd());
|
||||
$this->assertNull($tmpFile->path);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,20 +2,20 @@
|
|||
/**
|
||||
* FolderTest file
|
||||
*
|
||||
* PHP 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('Folder', 'Utility');
|
||||
App::uses('File', 'Utility');
|
||||
|
||||
|
|
@ -29,14 +29,19 @@ class FolderTest extends CakeTestCase {
|
|||
protected static $_tmp = array();
|
||||
|
||||
/**
|
||||
* Save the directory names in TMP
|
||||
* Save the directory names in TMP and make sure default directories exist
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function setUpBeforeClass() {
|
||||
$dirs = array('cache', 'logs', 'sessions', 'tests');
|
||||
foreach ($dirs as $dir) {
|
||||
new Folder(TMP . $dir, true);
|
||||
}
|
||||
|
||||
foreach (scandir(TMP) as $file) {
|
||||
if (is_dir(TMP . $file) && !in_array($file, array('.', '..'))) {
|
||||
self::$_tmp[] = $file;
|
||||
static::$_tmp[] = $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -57,7 +62,7 @@ class FolderTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function tearDown() {
|
||||
$exclude = array_merge(self::$_tmp, array('.', '..'));
|
||||
$exclude = array_merge(static::$_tmp, array('.', '..'));
|
||||
foreach (scandir(TMP) as $dir) {
|
||||
if (is_dir(TMP . $dir) && !in_array($dir, $exclude)) {
|
||||
$iterator = new RecursiveDirectoryIterator(TMP . $dir);
|
||||
|
|
@ -71,6 +76,7 @@ class FolderTest extends CakeTestCase {
|
|||
rmdir(TMP . $dir);
|
||||
}
|
||||
}
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -103,28 +109,86 @@ class FolderTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testInPath() {
|
||||
$path = dirname(dirname(__FILE__));
|
||||
$inside = dirname($path) . DS;
|
||||
// "/Test/test_app/"
|
||||
$basePath = CAKE . 'Test' . DS . 'test_app' . DS;
|
||||
$Base = new Folder($basePath);
|
||||
|
||||
$Folder = new Folder($path);
|
||||
$result = $Base->pwd();
|
||||
$this->assertEquals($basePath, $result);
|
||||
|
||||
$result = $Folder->pwd();
|
||||
$this->assertEquals($path, $result);
|
||||
// is "/" in "/Test/test_app/"
|
||||
$result = $Base->inPath(realpath(DS), true);
|
||||
$this->assertFalse($result, true);
|
||||
|
||||
$result = Folder::isSlashTerm($inside);
|
||||
// is "/Test/test_app/" in "/Test/test_app/"
|
||||
$result = $Base->inPath($basePath, true);
|
||||
$this->assertTrue($result);
|
||||
|
||||
$result = $Folder->realpath('Test/');
|
||||
$this->assertEquals($path . DS . 'Test' . DS, $result);
|
||||
|
||||
$result = $Folder->inPath('Test' . DS);
|
||||
// is "/Test/test_app" in "/Test/test_app/"
|
||||
$result = $Base->inPath(mb_substr($basePath, 0, -1), true);
|
||||
$this->assertTrue($result);
|
||||
|
||||
$result = $Folder->inPath(DS . 'non-existing' . $inside);
|
||||
// is "/Test/test_app/sub" in "/Test/test_app/"
|
||||
$result = $Base->inPath($basePath . 'sub', true);
|
||||
$this->assertTrue($result);
|
||||
|
||||
// is "/Test" in "/Test/test_app/"
|
||||
$result = $Base->inPath(dirname($basePath), true);
|
||||
$this->assertFalse($result);
|
||||
|
||||
$result = $Folder->inPath($path . DS . 'Model', true);
|
||||
// is "/Test/other/(...)Test/test_app" in "/Test/test_app/"
|
||||
$result = $Base->inPath(TMP . 'tests' . DS . 'other' . DS . $basePath, true);
|
||||
$this->assertFalse($result);
|
||||
|
||||
// is "/Test/test_app/" in "/"
|
||||
$result = $Base->inPath(realpath(DS));
|
||||
$this->assertTrue($result);
|
||||
|
||||
// is "/Test/test_app/" in "/Test/test_app/"
|
||||
$result = $Base->inPath($basePath);
|
||||
$this->assertTrue($result);
|
||||
|
||||
// is "/Test/test_app/" in "/Test/test_app"
|
||||
$result = $Base->inPath(mb_substr($basePath, 0, -1));
|
||||
$this->assertTrue($result);
|
||||
|
||||
// is "/Test/test_app/" in "/Test"
|
||||
$result = $Base->inPath(dirname($basePath));
|
||||
$this->assertTrue($result);
|
||||
|
||||
// is "/Test/test_app/" in "/Test/test_app/sub"
|
||||
$result = $Base->inPath($basePath . 'sub');
|
||||
$this->assertFalse($result);
|
||||
|
||||
// is "/other/Test/test_app/" in "/Test/test_app/"
|
||||
$VirtualBase = new Folder();
|
||||
$VirtualBase->path = '/other/Test/test_app';
|
||||
$result = $VirtualBase->inPath('/Test/test_app/');
|
||||
$this->assertFalse($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for the testInPathInvalidPathArgument test
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function inPathInvalidPathArgumentDataProvider() {
|
||||
return array(
|
||||
array(''),
|
||||
array('relative/path/'),
|
||||
array('unknown://stream-wrapper')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider inPathInvalidPathArgumentDataProvider
|
||||
* @param string $path
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage The $path argument is expected to be an absolute path.
|
||||
*/
|
||||
public function testInPathInvalidPathArgument($path) {
|
||||
$Folder = new Folder();
|
||||
$Folder->inPath($path);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -164,13 +228,29 @@ class FolderTest extends CakeTestCase {
|
|||
$this->assertTrue($Folder->delete());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that relative paths to create() are added to cwd.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testCreateRelative() {
|
||||
$folder = new Folder(TMP);
|
||||
$path = TMP . 'tests' . DS . 'relative-test';
|
||||
$result = $folder->create('tests' . DS . 'relative-test');
|
||||
$this->assertTrue($result, 'should create');
|
||||
|
||||
$this->assertTrue(is_dir($path), 'Folder was not made');
|
||||
$folder = new Folder($path);
|
||||
$folder->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* test recursive directory create failure.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testRecursiveCreateFailure() {
|
||||
$this->skipIf(DIRECTORY_SEPARATOR === '\\', 'Cant perform operations using permissions on windows.');
|
||||
$this->skipIf(DIRECTORY_SEPARATOR === '\\', 'Cant perform operations using permissions on Windows.');
|
||||
|
||||
$path = TMP . 'tests' . DS . 'one';
|
||||
mkdir($path);
|
||||
|
|
@ -338,11 +418,24 @@ class FolderTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testAddPathElement() {
|
||||
$expected = DS . 'some' . DS . 'dir' . DS . 'another_path';
|
||||
|
||||
$result = Folder::addPathElement(DS . 'some' . DS . 'dir', 'another_path');
|
||||
$this->assertEquals(DS . 'some' . DS . 'dir' . DS . 'another_path', $result);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = Folder::addPathElement(DS . 'some' . DS . 'dir' . DS, 'another_path');
|
||||
$this->assertEquals(DS . 'some' . DS . 'dir' . DS . 'another_path', $result);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = Folder::addPathElement(DS . 'some' . DS . 'dir', array('another_path'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = Folder::addPathElement(DS . 'some' . DS . 'dir' . DS, array('another_path'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$expected = DS . 'some' . DS . 'dir' . DS . 'another_path' . DS . 'and' . DS . 'another';
|
||||
|
||||
$result = Folder::addPathElement(DS . 'some' . DS . 'dir', array('another_path', 'and', 'another'));
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -369,7 +462,7 @@ class FolderTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testFolderReadWithHiddenFiles() {
|
||||
$this->skipIf(!is_writeable(TMP), 'Cant test Folder::read with hidden files unless the tmp folder is writable.');
|
||||
$this->skipIf(!is_writable(TMP), 'Cant test Folder::read with hidden files unless the tmp folder is writable.');
|
||||
|
||||
$Folder = new Folder(TMP . 'folder_tree_hidden', true, 0777);
|
||||
mkdir($Folder->path . DS . '.svn');
|
||||
|
|
@ -452,7 +545,7 @@ class FolderTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testFolderTreeWithHiddenFiles() {
|
||||
$this->skipIf(!is_writeable(TMP), 'Can\'t test Folder::tree with hidden files unless the tmp folder is writable.');
|
||||
$this->skipIf(!is_writable(TMP), 'Can\'t test Folder::tree with hidden files unless the tmp folder is writable.');
|
||||
|
||||
$Folder = new Folder(TMP . 'folder_tree_hidden', true, 0777);
|
||||
mkdir($Folder->path . DS . '.svn', 0777, true);
|
||||
|
|
@ -529,6 +622,8 @@ class FolderTest extends CakeTestCase {
|
|||
$this->assertFalse(Folder::isAbsolute('0:\\path\\to\\file'));
|
||||
$this->assertFalse(Folder::isAbsolute('\\path/to/file'));
|
||||
$this->assertFalse(Folder::isAbsolute('\\path\\to\\file'));
|
||||
$this->assertFalse(Folder::isAbsolute('notRegisteredStreamWrapper://example'));
|
||||
$this->assertFalse(Folder::isAbsolute('://example'));
|
||||
|
||||
$this->assertTrue(Folder::isAbsolute('/usr/local'));
|
||||
$this->assertTrue(Folder::isAbsolute('//path/to/file'));
|
||||
|
|
@ -536,6 +631,7 @@ class FolderTest extends CakeTestCase {
|
|||
$this->assertTrue(Folder::isAbsolute('C:\\path\\to\\file'));
|
||||
$this->assertTrue(Folder::isAbsolute('d:\\path\\to\\file'));
|
||||
$this->assertTrue(Folder::isAbsolute('\\\\vmware-host\\Shared Folders\\file'));
|
||||
$this->assertTrue(Folder::isAbsolute('http://www.example.com'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -635,7 +731,7 @@ class FolderTest extends CakeTestCase {
|
|||
$this->assertSame(array_diff($expected, $result), array());
|
||||
|
||||
$result = $Folder->find('.*', true);
|
||||
$expected = array('config.php', 'routes.php');
|
||||
$expected = array('cacert.pem', 'config.php', 'routes.php');
|
||||
$this->assertSame($expected, $result);
|
||||
|
||||
$result = $Folder->find('.*\.php');
|
||||
|
|
@ -761,6 +857,55 @@ class FolderTest extends CakeTestCase {
|
|||
$Folder->delete($Folder->pwd() . 'config_non_existent');
|
||||
}
|
||||
|
||||
/**
|
||||
* test that errors and messages can be resetted
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testReset() {
|
||||
$path = TMP . 'folder_delete_test';
|
||||
mkdir($path);
|
||||
$folder = $path . DS . 'sub';
|
||||
mkdir($folder);
|
||||
$file = $folder . DS . 'file';
|
||||
touch($file);
|
||||
|
||||
chmod($folder, 0555);
|
||||
chmod($file, 0444);
|
||||
|
||||
$Folder = new Folder($folder);
|
||||
$return = $Folder->delete();
|
||||
$this->assertFalse($return);
|
||||
|
||||
$messages = $Folder->messages();
|
||||
$errors = $Folder->errors();
|
||||
$expected = array(
|
||||
$file . ' NOT removed',
|
||||
$folder . ' NOT removed',
|
||||
);
|
||||
sort($expected);
|
||||
sort($errors);
|
||||
$this->assertEmpty($messages);
|
||||
$this->assertEquals($expected, $errors);
|
||||
|
||||
chmod($file, 0644);
|
||||
chmod($folder, 0755);
|
||||
|
||||
$return = $Folder->delete();
|
||||
$this->assertTrue($return);
|
||||
|
||||
$messages = $Folder->messages();
|
||||
$errors = $Folder->errors();
|
||||
$expected = array(
|
||||
$file . ' removed',
|
||||
$folder . ' removed',
|
||||
);
|
||||
sort($expected);
|
||||
sort($messages);
|
||||
$this->assertEmpty($errors);
|
||||
$this->assertEquals($expected, $messages);
|
||||
}
|
||||
|
||||
/**
|
||||
* testDelete method
|
||||
*
|
||||
|
|
@ -803,6 +948,64 @@ class FolderTest extends CakeTestCase {
|
|||
/**
|
||||
* testCopy method
|
||||
*
|
||||
* Verify that subdirectories existing in both destination and source directory
|
||||
* are merged recursively.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testCopy() {
|
||||
extract($this->_setupFilesystem());
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->copy($folderThree);
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file1.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folderA' . DS . 'fileA.php'));
|
||||
|
||||
$Folder = new Folder($folderTwo);
|
||||
$result = $Folder->copy($folderThree);
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file1.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file2.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folderA' . DS . 'fileA.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folderB' . DS . 'fileB.php'));
|
||||
|
||||
$Folder = new Folder($path);
|
||||
$Folder->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* testCopyWithMerge method
|
||||
*
|
||||
* Verify that subdirectories existing in both destination and source directory
|
||||
* are merged recursively.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testCopyWithMerge() {
|
||||
extract($this->_setupFilesystem());
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->copy($folderThree);
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file1.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folderA' . DS . 'fileA.php'));
|
||||
|
||||
$Folder = new Folder($folderTwo);
|
||||
$result = $Folder->copy(array('to' => $folderThree, 'scheme' => Folder::MERGE));
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file1.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file2.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folderA' . DS . 'fileA.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folderB' . DS . 'fileB.php'));
|
||||
|
||||
$Folder = new Folder($path);
|
||||
$Folder->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* testCopyWithSkip method
|
||||
*
|
||||
* Verify that directories and files are copied recursively
|
||||
* even if the destination directory already exists.
|
||||
* Subdirectories existing in both destination and source directory
|
||||
|
|
@ -810,128 +1013,357 @@ class FolderTest extends CakeTestCase {
|
|||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testCopy() {
|
||||
public function testCopyWithSkip() {
|
||||
extract($this->_setupFilesystem());
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->copy(array('to' => $folderTwo, 'scheme' => Folder::SKIP));
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'file1.php'));
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'folderA' . DS . 'fileA.php'));
|
||||
|
||||
$Folder = new Folder($folderTwo);
|
||||
$Folder->delete();
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->copy(array('to' => $folderTwo, 'scheme' => Folder::SKIP));
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'file1.php'));
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'folderA' . DS . 'fileA.php'));
|
||||
|
||||
$Folder = new Folder($folderTwo);
|
||||
$Folder->delete();
|
||||
|
||||
new Folder($folderTwo, true);
|
||||
new Folder($folderTwo . DS . 'folderB', true);
|
||||
file_put_contents($folderTwo . DS . 'file2.php', 'touched');
|
||||
file_put_contents($folderTwo . DS . 'folderB' . DS . 'fileB.php', 'untouched');
|
||||
|
||||
$Folder = new Folder($folderTwo);
|
||||
$result = $Folder->copy(array('to' => $folderThree, 'scheme' => Folder::SKIP));
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file2.php'));
|
||||
$this->assertEquals('touched', file_get_contents($folderThree . DS . 'file2.php'));
|
||||
$this->assertEquals('untouched', file_get_contents($folderThree . DS . 'folderB' . DS . 'fileB.php'));
|
||||
|
||||
$Folder = new Folder($path);
|
||||
$Folder->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that SKIP mode skips files too.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testCopyWithSkipFileSkipped() {
|
||||
$path = TMP . 'folder_test';
|
||||
$folderOne = $path . DS . 'folder1';
|
||||
$folderTwo = $folderOne . DS . 'folder2';
|
||||
$folderThree = $path . DS . 'folder3';
|
||||
$fileOne = $folderOne . DS . 'file1.php';
|
||||
$fileTwo = $folderTwo . DS . 'file2.php';
|
||||
$folderTwo = $path . DS . 'folder2';
|
||||
|
||||
new Folder($path, true);
|
||||
new Folder($folderOne, true);
|
||||
new Folder($folderTwo, true);
|
||||
new Folder($folderThree, true);
|
||||
touch($fileOne);
|
||||
touch($fileTwo);
|
||||
file_put_contents($folderOne . DS . 'fileA.txt', 'Folder One File');
|
||||
file_put_contents($folderTwo . DS . 'fileA.txt', 'Folder Two File');
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->copy($folderThree);
|
||||
$result = $Folder->copy(array('to' => $folderTwo, 'scheme' => Folder::SKIP));
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file1.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folder2' . DS . 'file2.php'));
|
||||
$this->assertEquals('Folder Two File', file_get_contents($folderTwo . DS . 'fileA.txt'));
|
||||
}
|
||||
|
||||
$Folder = new Folder($folderThree);
|
||||
$Folder->delete();
|
||||
/**
|
||||
* testCopyWithOverwrite
|
||||
*
|
||||
* Verify that subdirectories existing in both destination and source directory
|
||||
* are overwritten/replaced recursively.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testCopyWithOverwrite() {
|
||||
extract($this->_setupFilesystem());
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->copy($folderThree);
|
||||
$this->assertTrue($result);
|
||||
$Folder->copy(array('to' => $folderThree, 'scheme' => Folder::OVERWRITE));
|
||||
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file1.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folder2' . DS . 'file2.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folderA' . DS . 'fileA.php'));
|
||||
|
||||
$Folder = new Folder($folderThree);
|
||||
$Folder->delete();
|
||||
$Folder = new Folder($folderTwo);
|
||||
$result = $Folder->copy(array('to' => $folderThree, 'scheme' => Folder::OVERWRITE));
|
||||
$this->assertTrue($result);
|
||||
|
||||
new Folder($folderThree, true);
|
||||
new Folder($folderThree . DS . 'folder2', true);
|
||||
file_put_contents($folderThree . DS . 'folder2' . DS . 'file2.php', 'untouched');
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folderA' . DS . 'fileA.php'));
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->copy($folderThree);
|
||||
unlink($fileOneA);
|
||||
$result = $Folder->copy(array('to' => $folderThree, 'scheme' => Folder::OVERWRITE));
|
||||
$this->assertTrue($result);
|
||||
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file1.php'));
|
||||
$this->assertEquals('untouched', file_get_contents($folderThree . DS . 'folder2' . DS . 'file2.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file2.php'));
|
||||
$this->assertTrue(!file_exists($folderThree . DS . 'folderA' . DS . 'fileA.php'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folderB' . DS . 'fileB.php'));
|
||||
|
||||
$Folder = new Folder($path);
|
||||
$Folder->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup filesystem for copy tests
|
||||
* $path: folder_test/
|
||||
* - folder1/file1.php
|
||||
* - folder1/folderA/fileA.php
|
||||
* - folder2/file2.php
|
||||
* - folder2/folderB/fileB.php
|
||||
* - folder3/
|
||||
*
|
||||
* @return array Filenames to extract in the test methods
|
||||
*/
|
||||
protected function _setupFilesystem() {
|
||||
$path = TMP . 'folder_test';
|
||||
|
||||
$folderOne = $path . DS . 'folder1';
|
||||
$folderOneA = $folderOne . DS . 'folderA';
|
||||
$folderTwo = $path . DS . 'folder2';
|
||||
$folderTwoB = $folderTwo . DS . 'folderB';
|
||||
$folderThree = $path . DS . 'folder3';
|
||||
|
||||
$fileOne = $folderOne . DS . 'file1.php';
|
||||
$fileTwo = $folderTwo . DS . 'file2.php';
|
||||
$fileOneA = $folderOneA . DS . 'fileA.php';
|
||||
$fileTwoB = $folderTwoB . DS . 'fileB.php';
|
||||
|
||||
new Folder($path, true);
|
||||
new Folder($folderOne, true);
|
||||
new Folder($folderOneA, true);
|
||||
new Folder($folderTwo, true);
|
||||
new Folder($folderTwoB, true);
|
||||
new Folder($folderThree, true);
|
||||
touch($fileOne);
|
||||
touch($fileTwo);
|
||||
touch($fileOneA);
|
||||
touch($fileTwoB);
|
||||
|
||||
return compact(
|
||||
'path',
|
||||
'folderOne', 'folderOneA', 'folderTwo', 'folderTwoB', 'folderThree',
|
||||
'fileOne', 'fileOneA', 'fileTwo', 'fileTwoB');
|
||||
}
|
||||
|
||||
/**
|
||||
* testMove method
|
||||
*
|
||||
* Verify that directories and files are moved recursively
|
||||
* even if the destination directory already exists.
|
||||
* Subdirectories existing in both destination and source directory
|
||||
* are skipped and not merged or overwritten.
|
||||
* are merged recursively.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testMove() {
|
||||
$path = TMP . 'folder_test';
|
||||
$folderOne = $path . DS . 'folder1';
|
||||
$folderTwo = $folderOne . DS . 'folder2';
|
||||
$folderThree = $path . DS . 'folder3';
|
||||
$fileOne = $folderOne . DS . 'file1.php';
|
||||
$fileTwo = $folderTwo . DS . 'file2.php';
|
||||
|
||||
new Folder($path, true);
|
||||
new Folder($folderOne, true);
|
||||
new Folder($folderTwo, true);
|
||||
new Folder($folderThree, true);
|
||||
touch($fileOne);
|
||||
touch($fileTwo);
|
||||
extract($this->_setupFilesystem());
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->move($folderThree);
|
||||
$result = $Folder->move($folderTwo);
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file1.php'));
|
||||
$this->assertTrue(is_dir($folderThree . DS . 'folder2'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folder2' . DS . 'file2.php'));
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'file1.php'));
|
||||
$this->assertTrue(is_dir($folderTwo . DS . 'folderB'));
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'folderB' . DS . 'fileB.php'));
|
||||
$this->assertFalse(file_exists($fileOne));
|
||||
$this->assertFalse(file_exists($folderTwo));
|
||||
$this->assertFalse(file_exists($fileTwo));
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'folderA'));
|
||||
$this->assertFalse(file_exists($folderOneA));
|
||||
$this->assertFalse(file_exists($fileOneA));
|
||||
|
||||
$Folder = new Folder($folderThree);
|
||||
$Folder = new Folder($folderTwo);
|
||||
$Folder->delete();
|
||||
|
||||
new Folder($folderOne, true);
|
||||
new Folder($folderTwo, true);
|
||||
new Folder($folderOneA, true);
|
||||
touch($fileOne);
|
||||
touch($fileTwo);
|
||||
touch($fileOneA);
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->move($folderThree);
|
||||
$result = $Folder->move($folderTwo);
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file1.php'));
|
||||
$this->assertTrue(is_dir($folderThree . DS . 'folder2'));
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'folder2' . DS . 'file2.php'));
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'file1.php'));
|
||||
$this->assertTrue(is_dir($folderTwo . DS . 'folderA'));
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'folderA' . DS . 'fileA.php'));
|
||||
$this->assertFalse(file_exists($fileOne));
|
||||
$this->assertFalse(file_exists($folderTwo));
|
||||
$this->assertFalse(file_exists($fileTwo));
|
||||
$this->assertFalse(file_exists($folderOneA));
|
||||
$this->assertFalse(file_exists($fileOneA));
|
||||
|
||||
$Folder = new Folder($folderThree);
|
||||
$Folder = new Folder($folderTwo);
|
||||
$Folder->delete();
|
||||
|
||||
new Folder($folderOne, true);
|
||||
new Folder($folderOneA, true);
|
||||
new Folder($folderTwo, true);
|
||||
new Folder($folderThree, true);
|
||||
new Folder($folderThree . DS . 'folder2', true);
|
||||
new Folder($folderTwoB, true);
|
||||
touch($fileOne);
|
||||
touch($fileTwo);
|
||||
file_put_contents($folderThree . DS . 'folder2' . DS . 'file2.php', 'untouched');
|
||||
touch($fileOneA);
|
||||
new Folder($folderOne . DS . 'folderB', true);
|
||||
touch($folderOne . DS . 'folderB' . DS . 'fileB.php');
|
||||
file_put_contents($folderTwoB . DS . 'fileB.php', 'untouched');
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->move($folderThree);
|
||||
$result = $Folder->move($folderTwo);
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderThree . DS . 'file1.php'));
|
||||
$this->assertEquals('untouched', file_get_contents($folderThree . DS . 'folder2' . DS . 'file2.php'));
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'file1.php'));
|
||||
$this->assertEquals('', file_get_contents($folderTwoB . DS . 'fileB.php'));
|
||||
$this->assertFalse(file_exists($fileOne));
|
||||
$this->assertFalse(file_exists($folderTwo));
|
||||
$this->assertFalse(file_exists($fileTwo));
|
||||
$this->assertFalse(file_exists($folderOneA));
|
||||
$this->assertFalse(file_exists($fileOneA));
|
||||
|
||||
$Folder = new Folder($path);
|
||||
$Folder->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* testMoveWithSkip method
|
||||
*
|
||||
* Verify that directories and files are moved recursively
|
||||
* even if the destination directory already exists.
|
||||
* Subdirectories existing in both destination and source directory
|
||||
* are skipped and not merged or overwritten.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testMoveWithSkip() {
|
||||
extract($this->_setupFilesystem());
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->move(array('to' => $folderTwo, 'scheme' => Folder::SKIP));
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'file1.php'));
|
||||
$this->assertTrue(is_dir($folderTwo . DS . 'folderB'));
|
||||
$this->assertTrue(file_exists($folderTwoB . DS . 'fileB.php'));
|
||||
$this->assertFalse(file_exists($fileOne));
|
||||
$this->assertFalse(file_exists($folderOneA));
|
||||
$this->assertFalse(file_exists($fileOneA));
|
||||
|
||||
$Folder = new Folder($folderTwo);
|
||||
$Folder->delete();
|
||||
|
||||
new Folder($folderOne, true);
|
||||
new Folder($folderOneA, true);
|
||||
new Folder($folderTwo, true);
|
||||
touch($fileOne);
|
||||
touch($fileOneA);
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->move(array('to' => $folderTwo, 'scheme' => Folder::SKIP));
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'file1.php'));
|
||||
$this->assertTrue(is_dir($folderTwo . DS . 'folderA'));
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'folderA' . DS . 'fileA.php'));
|
||||
$this->assertFalse(file_exists($fileOne));
|
||||
$this->assertFalse(file_exists($folderOneA));
|
||||
$this->assertFalse(file_exists($fileOneA));
|
||||
|
||||
$Folder = new Folder($folderTwo);
|
||||
$Folder->delete();
|
||||
|
||||
new Folder($folderOne, true);
|
||||
new Folder($folderOneA, true);
|
||||
new Folder($folderTwo, true);
|
||||
new Folder($folderTwoB, true);
|
||||
touch($fileOne);
|
||||
touch($fileOneA);
|
||||
file_put_contents($folderTwoB . DS . 'fileB.php', 'untouched');
|
||||
|
||||
$Folder = new Folder($folderOne);
|
||||
$result = $Folder->move(array('to' => $folderTwo, 'scheme' => Folder::SKIP));
|
||||
$this->assertTrue($result);
|
||||
$this->assertTrue(file_exists($folderTwo . DS . 'file1.php'));
|
||||
$this->assertEquals('untouched', file_get_contents($folderTwoB . DS . 'fileB.php'));
|
||||
$this->assertFalse(file_exists($fileOne));
|
||||
$this->assertFalse(file_exists($folderOneA));
|
||||
$this->assertFalse(file_exists($fileOneA));
|
||||
|
||||
$Folder = new Folder($path);
|
||||
$Folder->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* testSortByTime method
|
||||
*
|
||||
* Verify that the order using modified time is correct.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSortByTime() {
|
||||
$Folder = new Folder(TMP . 'test_sort_by_time', true);
|
||||
|
||||
$file2 = new File($Folder->pwd() . DS . 'file_2.tmp');
|
||||
$file2->create();
|
||||
|
||||
sleep(1);
|
||||
|
||||
$file1 = new File($Folder->pwd() . DS . 'file_1.tmp');
|
||||
$file1->create();
|
||||
|
||||
$expected = array('file_2.tmp', 'file_1.tmp');
|
||||
$result = $Folder->find('.*', Folder::SORT_TIME);
|
||||
$this->assertSame($expected, $result);
|
||||
|
||||
$Folder->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* testSortByTime2 method
|
||||
*
|
||||
* Verify that the sort order using modified time is correct.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSortByTime2() {
|
||||
$Folder = new Folder(TMP . 'test_sort_by_time2', true);
|
||||
|
||||
$fileC = new File($Folder->pwd() . DS . 'c.txt');
|
||||
$fileC->create();
|
||||
|
||||
sleep(1);
|
||||
|
||||
$fileA = new File($Folder->pwd() . DS . 'a.txt');
|
||||
$fileA->create();
|
||||
|
||||
sleep(1);
|
||||
|
||||
$fileB = new File($Folder->pwd() . DS . 'b.txt');
|
||||
$fileB->create();
|
||||
|
||||
$expected = array('c.txt', 'a.txt', 'b.txt');
|
||||
$result = $Folder->find('.*', Folder::SORT_TIME);
|
||||
$this->assertSame($expected, $result);
|
||||
|
||||
$Folder->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify that the sort order using name is correct.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSortByName() {
|
||||
$Folder = new Folder(TMP . 'test_sort_by_name', true);
|
||||
|
||||
$fileA = new File($Folder->pwd() . DS . 'a.txt');
|
||||
$fileA->create();
|
||||
|
||||
$fileC = new File($Folder->pwd() . DS . 'c.txt');
|
||||
$fileC->create();
|
||||
|
||||
sleep(1);
|
||||
|
||||
$fileB = new File($Folder->pwd() . DS . 'b.txt');
|
||||
$fileB->create();
|
||||
|
||||
$expected = array('a.txt', 'b.txt', 'c.txt');
|
||||
$result = $Folder->find('.*', Folder::SORT_NAME);
|
||||
$this->assertSame($expected, $result);
|
||||
|
||||
$Folder->delete();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +1,33 @@
|
|||
<?php
|
||||
/**
|
||||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||
* Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2011, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://cakephp.org CakePHP(tm) Project
|
||||
* @package Cake.Utility
|
||||
* @since CakePHP(tm) v 2.2.0
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('Hash', 'Utility');
|
||||
|
||||
/**
|
||||
* HashTest
|
||||
*
|
||||
* @package Cake.Utility
|
||||
*/
|
||||
class HashTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* Data provider
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function articleData() {
|
||||
return array(
|
||||
array(
|
||||
|
|
@ -129,6 +141,11 @@ class HashTest extends CakeTestCase {
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function userData() {
|
||||
return array(
|
||||
array(
|
||||
|
|
@ -167,10 +184,21 @@ class HashTest extends CakeTestCase {
|
|||
/**
|
||||
* Test get()
|
||||
*
|
||||
* return void
|
||||
* @return void
|
||||
*/
|
||||
public function testGet() {
|
||||
$data = self::articleData();
|
||||
$data = array('abc', 'def');
|
||||
|
||||
$result = Hash::get($data, '0');
|
||||
$this->assertEquals('abc', $result);
|
||||
|
||||
$result = Hash::get($data, 0);
|
||||
$this->assertEquals('abc', $result);
|
||||
|
||||
$result = Hash::get($data, '1');
|
||||
$this->assertEquals('def', $result);
|
||||
|
||||
$data = static::articleData();
|
||||
|
||||
$result = Hash::get(array(), '1.Article.title');
|
||||
$this->assertNull($result);
|
||||
|
|
@ -187,6 +215,10 @@ class HashTest extends CakeTestCase {
|
|||
$result = Hash::get($data, '5.Article.title');
|
||||
$this->assertNull($result);
|
||||
|
||||
$default = array('empty');
|
||||
$this->assertEquals($default, Hash::get($data, '5.Article.title', $default));
|
||||
$this->assertEquals($default, Hash::get(array(), '5.Article.title', $default));
|
||||
|
||||
$result = Hash::get($data, '1.Article.title.not_there');
|
||||
$this->assertNull($result);
|
||||
|
||||
|
|
@ -197,6 +229,42 @@ class HashTest extends CakeTestCase {
|
|||
$this->assertEquals($data[1]['Article'], $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that get() can extract '' key data.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetEmptyKey() {
|
||||
$data = array(
|
||||
'' => 'some value'
|
||||
);
|
||||
$result = Hash::get($data, '');
|
||||
$this->assertSame($data[''], $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get() with an invalid path
|
||||
*
|
||||
* @expectedException InvalidArgumentException
|
||||
* @return void
|
||||
*/
|
||||
public function testGetInvalidPath() {
|
||||
Hash::get(array('one' => 'two'), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test testGetNullPath()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetNullPath() {
|
||||
$result = Hash::get(array('one' => 'two'), null, '-');
|
||||
$this->assertEquals('-', $result);
|
||||
|
||||
$result = Hash::get(array('one' => 'two'), '', '-');
|
||||
$this->assertEquals('-', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test dimensions.
|
||||
*
|
||||
|
|
@ -233,42 +301,37 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testMaxDimensions() {
|
||||
$data = array();
|
||||
$result = Hash::maxDimensions($data);
|
||||
$this->assertEquals(0, $result);
|
||||
|
||||
$data = array('a', 'b');
|
||||
$result = Hash::maxDimensions($data);
|
||||
$this->assertEquals(1, $result);
|
||||
|
||||
$data = array('1' => '1.1', '2', '3' => array('3.1' => '3.1.1'));
|
||||
$result = Hash::maxDimensions($data);
|
||||
$this->assertEquals($result, 2);
|
||||
|
||||
$data = array('1' => array('1.1' => '1.1.1'), '2', '3' => array('3.1' => array('3.1.1' => '3.1.1.1')));
|
||||
$data = array(
|
||||
'1' => array('1.1' => '1.1.1'),
|
||||
'2',
|
||||
'3' => array('3.1' => array('3.1.1' => '3.1.1.1'))
|
||||
);
|
||||
$result = Hash::maxDimensions($data);
|
||||
$this->assertEquals($result, 3);
|
||||
|
||||
$data = array(
|
||||
'1' => array('1.1' => '1.1.1'),
|
||||
array('2' => array('2.1' => array('2.1.1' => '2.1.1.1'))),
|
||||
'3' => array('3.1' => array('3.1.1' => '3.1.1.1'))
|
||||
);
|
||||
$result = Hash::maxDimensions($data);
|
||||
$this->assertEquals($result, 4);
|
||||
|
||||
$data = array(
|
||||
'1' => array('1.1' => '1.1.1'),
|
||||
array('2' => array('2.1' => array('2.1.1' => array('2.1.1.1')))),
|
||||
'3' => array('3.1' => array('3.1.1' => '3.1.1.1'))
|
||||
);
|
||||
$result = Hash::maxDimensions($data);
|
||||
$this->assertEquals($result, 5);
|
||||
|
||||
$data = array(
|
||||
'1' => array('1.1' => '1.1.1'),
|
||||
array('2' => array('2.1' => array('2.1.1' => array('2.1.1.1' => '2.1.1.1.1')))),
|
||||
'3' => array('3.1' => array('3.1.1' => '3.1.1.1'))
|
||||
);
|
||||
$result = Hash::maxDimensions($data);
|
||||
$this->assertEquals($result, 5);
|
||||
|
||||
$data = array(
|
||||
'1' => array('1.1' => '1.1.1'),
|
||||
array('2' => array('2.1' => array('2.1.1' => array('2.1.1.1' => '2.1.1.1.1')))),
|
||||
'3' => array('3.1' => array('3.1.1' => '3.1.1.1'))
|
||||
'1' => array(
|
||||
'1.1' => '1.1.1',
|
||||
'1.2' => array(
|
||||
'1.2.1' => array(
|
||||
'1.2.1.1',
|
||||
array('1.2.2.1')
|
||||
)
|
||||
)
|
||||
),
|
||||
'2' => array('2.1' => '2.1.1')
|
||||
);
|
||||
$result = Hash::maxDimensions($data);
|
||||
$this->assertEquals($result, 5);
|
||||
|
|
@ -509,7 +572,7 @@ class HashTest extends CakeTestCase {
|
|||
'Validator',
|
||||
'Transactional'
|
||||
);
|
||||
$this->assertEquals(Hash::merge($a, $b), $expected);
|
||||
$this->assertEquals($expected, Hash::merge($a, $b));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -575,6 +638,12 @@ class HashTest extends CakeTestCase {
|
|||
);
|
||||
$this->assertTrue(Hash::contains($b, $a));
|
||||
$this->assertFalse(Hash::contains($a, $b));
|
||||
|
||||
$a = array(0 => 'test', 'string' => null);
|
||||
$this->assertTrue(Hash::contains($a, array('string' => null)));
|
||||
|
||||
$a = array(0 => 'test', 'string' => null);
|
||||
$this->assertTrue(Hash::contains($a, array('test')));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -641,6 +710,9 @@ class HashTest extends CakeTestCase {
|
|||
|
||||
$data = array('one', 2 => 'two', 3 => 'three', 4 => 'four', 'a' => 'five');
|
||||
$this->assertFalse(Hash::numeric(array_keys($data)));
|
||||
|
||||
$data = array(2.4, 1, 0, -1, -2);
|
||||
$this->assertTrue(Hash::numeric($data));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -649,7 +721,7 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testExtractBasic() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
|
||||
$result = Hash::extract($data, '');
|
||||
$this->assertEquals($data, $result);
|
||||
|
|
@ -659,6 +731,9 @@ class HashTest extends CakeTestCase {
|
|||
|
||||
$result = Hash::extract($data, '1.Article.title');
|
||||
$this->assertEquals(array('Second Article'), $result);
|
||||
|
||||
$result = Hash::extract(array(false), '{n}.Something.another_thing');
|
||||
$this->assertEquals(array(), $result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -667,7 +742,7 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testExtractNumericKey() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
$result = Hash::extract($data, '{n}.Article.title');
|
||||
$expected = array(
|
||||
'First Article', 'Second Article',
|
||||
|
|
@ -746,7 +821,7 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testExtractStringKey() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
$result = Hash::extract($data, '{n}.{s}.user');
|
||||
$expected = array(
|
||||
'mariano',
|
||||
|
|
@ -761,13 +836,39 @@ class HashTest extends CakeTestCase {
|
|||
$this->assertEquals(array('foo'), $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test wildcard matcher
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testExtractWildcard() {
|
||||
$data = array(
|
||||
'02000009C5560001' => array('name' => 'Mr. Alphanumeric'),
|
||||
'2300000918020101' => array('name' => 'Mr. Numeric'),
|
||||
'390000096AB30001' => array('name' => 'Mrs. Alphanumeric'),
|
||||
'stuff' => array('name' => 'Ms. Word'),
|
||||
123 => array('name' => 'Mr. Number'),
|
||||
true => array('name' => 'Ms. Bool'),
|
||||
);
|
||||
$result = Hash::extract($data, '{*}.name');
|
||||
$expected = array(
|
||||
'Mr. Alphanumeric',
|
||||
'Mr. Numeric',
|
||||
'Mrs. Alphanumeric',
|
||||
'Ms. Word',
|
||||
'Mr. Number',
|
||||
'Ms. Bool',
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the attribute presense selector.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testExtractAttributePresence() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
|
||||
$result = Hash::extract($data, '{n}.Article[published]');
|
||||
$expected = array($data[1]['Article']);
|
||||
|
|
@ -784,7 +885,7 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testExtractAttributeEquality() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
|
||||
$result = Hash::extract($data, '{n}.Article[id=3]');
|
||||
$expected = array($data[2]['Article']);
|
||||
|
|
@ -801,13 +902,75 @@ class HashTest extends CakeTestCase {
|
|||
$this->assertEquals(5, $result[3]['id']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test extracting based on attributes with boolean values.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testExtractAttributeBoolean() {
|
||||
$users = array(
|
||||
array(
|
||||
'id' => 2,
|
||||
'username' => 'johndoe',
|
||||
'active' => true
|
||||
),
|
||||
array(
|
||||
'id' => 5,
|
||||
'username' => 'kevin',
|
||||
'active' => true
|
||||
),
|
||||
array(
|
||||
'id' => 9,
|
||||
'username' => 'samantha',
|
||||
'active' => false
|
||||
),
|
||||
);
|
||||
$result = Hash::extract($users, '{n}[active=0]');
|
||||
$this->assertCount(1, $result);
|
||||
$this->assertEquals($users[2], $result[0]);
|
||||
|
||||
$result = Hash::extract($users, '{n}[active=false]');
|
||||
$this->assertCount(1, $result);
|
||||
$this->assertEquals($users[2], $result[0]);
|
||||
|
||||
$result = Hash::extract($users, '{n}[active=1]');
|
||||
$this->assertCount(2, $result);
|
||||
$this->assertEquals($users[0], $result[0]);
|
||||
$this->assertEquals($users[1], $result[1]);
|
||||
|
||||
$result = Hash::extract($users, '{n}[active=true]');
|
||||
$this->assertCount(2, $result);
|
||||
$this->assertEquals($users[0], $result[0]);
|
||||
$this->assertEquals($users[1], $result[1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that attribute matchers don't cause errors on scalar data.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testExtractAttributeEqualityOnScalarValue() {
|
||||
$data = array(
|
||||
'Entity' => array(
|
||||
'id' => 1,
|
||||
'data1' => 'value',
|
||||
)
|
||||
);
|
||||
$result = Hash::extract($data, 'Entity[id=1].data1');
|
||||
$this->assertEquals(array('value'), $result);
|
||||
|
||||
$data = array('Entity' => false );
|
||||
$result = Hash::extract($data, 'Entity[id=1].data1');
|
||||
$this->assertEquals(array(), $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test comparison operators.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testExtractAttributeComparison() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
|
||||
$result = Hash::extract($data, '{n}.Comment.{n}[user_id > 2]');
|
||||
$expected = array($data[0]['Comment'][1]);
|
||||
|
|
@ -836,7 +999,7 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testExtractAttributeMultiple() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
|
||||
$result = Hash::extract($data, '{n}.Comment.{n}[user_id > 2][id=1]');
|
||||
$this->assertEmpty($result);
|
||||
|
|
@ -853,15 +1016,21 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testExtractAttributePattern() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
|
||||
$result = Hash::extract($data, '{n}.Article[title=/^First/]');
|
||||
$expected = array($data[0]['Article']);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = Hash::extract($data, '{n}.Article[title=/^Fir[a-z]+/]');
|
||||
$expected = array($data[0]['Article']);
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that extract() + matching can hit null things.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testExtractMatchesNull() {
|
||||
$data = array(
|
||||
|
|
@ -928,7 +1097,7 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testSort() {
|
||||
$result = Hash::sort(array(), '{n}.name', 'asc');
|
||||
$result = Hash::sort(array(), '{n}.name');
|
||||
$this->assertEquals(array(), $result);
|
||||
|
||||
$a = array(
|
||||
|
|
@ -951,7 +1120,7 @@ class HashTest extends CakeTestCase {
|
|||
'Friend' => array(array('name' => 'Nate'))
|
||||
)
|
||||
);
|
||||
$a = Hash::sort($a, '{n}.Friend.{n}.name', 'asc');
|
||||
$a = Hash::sort($a, '{n}.Friend.{n}.name');
|
||||
$this->assertEquals($a, $b);
|
||||
|
||||
$b = array(
|
||||
|
|
@ -1017,7 +1186,7 @@ class HashTest extends CakeTestCase {
|
|||
1 => array('Person' => array('name' => 'Jeff')),
|
||||
);
|
||||
$a = Hash::sort($a, '{n}.Person.name', 'ASC', 'STRING');
|
||||
$this->assertEquals($a, $b);
|
||||
$this->assertSame($a, $b);
|
||||
|
||||
$names = array(
|
||||
array('employees' => array(
|
||||
|
|
@ -1040,7 +1209,38 @@ class HashTest extends CakeTestCase {
|
|||
array('employees' => array(array('name' => array()))),
|
||||
array('employees' => array(array('name' => array())))
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
$this->assertSame($expected, $result);
|
||||
|
||||
$a = array(
|
||||
'SU' => array(
|
||||
'total_fulfillable' => 2
|
||||
),
|
||||
'AA' => array(
|
||||
'total_fulfillable' => 1
|
||||
),
|
||||
'LX' => array(
|
||||
'total_fulfillable' => 0
|
||||
),
|
||||
'BL' => array(
|
||||
'total_fulfillable' => 3
|
||||
),
|
||||
);
|
||||
$expected = array(
|
||||
'LX' => array(
|
||||
'total_fulfillable' => 0
|
||||
),
|
||||
'AA' => array(
|
||||
'total_fulfillable' => 1
|
||||
),
|
||||
'SU' => array(
|
||||
'total_fulfillable' => 2
|
||||
),
|
||||
'BL' => array(
|
||||
'total_fulfillable' => 3
|
||||
),
|
||||
);
|
||||
$result = Hash::sort($a, '{s}.total_fulfillable', 'asc');
|
||||
$this->assertSame($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1114,6 +1314,97 @@ class HashTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test natural sorting ignoring case.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSortNaturalIgnoreCase() {
|
||||
if (version_compare(PHP_VERSION, '5.4.0', '<')) {
|
||||
$this->markTestSkipped('SORT_NATURAL is available since PHP 5.4.');
|
||||
}
|
||||
$items = array(
|
||||
array('Item' => array('image' => 'img1.jpg')),
|
||||
array('Item' => array('image' => 'img99.jpg')),
|
||||
array('Item' => array('image' => 'Img12.jpg')),
|
||||
array('Item' => array('image' => 'Img10.jpg')),
|
||||
array('Item' => array('image' => 'img2.jpg')),
|
||||
);
|
||||
$result = Hash::sort($items, '{n}.Item.image', 'desc', array('type' => 'natural', 'ignoreCase' => true));
|
||||
$expected = array(
|
||||
array('Item' => array('image' => 'img99.jpg')),
|
||||
array('Item' => array('image' => 'Img12.jpg')),
|
||||
array('Item' => array('image' => 'Img10.jpg')),
|
||||
array('Item' => array('image' => 'img2.jpg')),
|
||||
array('Item' => array('image' => 'img1.jpg')),
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = Hash::sort($items, '{n}.Item.image', 'asc', array('type' => 'natural', 'ignoreCase' => true));
|
||||
$expected = array(
|
||||
array('Item' => array('image' => 'img1.jpg')),
|
||||
array('Item' => array('image' => 'img2.jpg')),
|
||||
array('Item' => array('image' => 'Img10.jpg')),
|
||||
array('Item' => array('image' => 'Img12.jpg')),
|
||||
array('Item' => array('image' => 'img99.jpg')),
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that sort() with 'natural' type will fallback to 'regular' as SORT_NATURAL is introduced in PHP 5.4
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSortNaturalFallbackToRegular() {
|
||||
if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
|
||||
$this->markTestSkipped('Skipping SORT_NATURAL fallback test on PHP >= 5.4');
|
||||
}
|
||||
|
||||
$a = array(
|
||||
0 => array('Person' => array('name' => 'Jeff')),
|
||||
1 => array('Shirt' => array('color' => 'black'))
|
||||
);
|
||||
$b = array(
|
||||
0 => array('Shirt' => array('color' => 'black')),
|
||||
1 => array('Person' => array('name' => 'Jeff')),
|
||||
);
|
||||
$sorted = Hash::sort($a, '{n}.Person.name', 'asc', 'natural');
|
||||
$this->assertEquals($sorted, $b);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test sort() with locale option.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSortLocale() {
|
||||
// get the current locale
|
||||
$oldLocale = setlocale(LC_COLLATE, '0');
|
||||
|
||||
$updated = setlocale(LC_COLLATE, 'de_DE.utf8');
|
||||
$this->skipIf($updated === false, 'Could not set locale to de_DE.utf8, skipping test.');
|
||||
|
||||
$items = array(
|
||||
array('Item' => array('entry' => 'Übergabe')),
|
||||
array('Item' => array('entry' => 'Ostfriesland')),
|
||||
array('Item' => array('entry' => 'Äpfel')),
|
||||
array('Item' => array('entry' => 'Apfel')),
|
||||
);
|
||||
|
||||
$result = Hash::sort($items, '{n}.Item.entry', 'asc', 'locale');
|
||||
$expected = array(
|
||||
array('Item' => array('entry' => 'Apfel')),
|
||||
array('Item' => array('entry' => 'Äpfel')),
|
||||
array('Item' => array('entry' => 'Ostfriesland')),
|
||||
array('Item' => array('entry' => 'Übergabe')),
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
// change to the original locale
|
||||
setlocale(LC_COLLATE, $oldLocale);
|
||||
}
|
||||
|
||||
/**
|
||||
* test sorting with out of order keys.
|
||||
*
|
||||
|
|
@ -1146,7 +1437,7 @@ class HashTest extends CakeTestCase {
|
|||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSortString() {
|
||||
public function testSortStringKeys() {
|
||||
$toSort = array(
|
||||
'four' => array('number' => 4, 'some' => 'foursome'),
|
||||
'six' => array('number' => 6, 'some' => 'sixsome'),
|
||||
|
|
@ -1178,6 +1469,50 @@ class HashTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* test sorting with string ignoring case.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSortStringIgnoreCase() {
|
||||
$toSort = array(
|
||||
array('Item' => array('name' => 'bar')),
|
||||
array('Item' => array('name' => 'Baby')),
|
||||
array('Item' => array('name' => 'Baz')),
|
||||
array('Item' => array('name' => 'bat')),
|
||||
);
|
||||
$sorted = Hash::sort($toSort, '{n}.Item.name', 'asc', array('type' => 'string', 'ignoreCase' => true));
|
||||
$expected = array(
|
||||
array('Item' => array('name' => 'Baby')),
|
||||
array('Item' => array('name' => 'bar')),
|
||||
array('Item' => array('name' => 'bat')),
|
||||
array('Item' => array('name' => 'Baz')),
|
||||
);
|
||||
$this->assertEquals($expected, $sorted);
|
||||
}
|
||||
|
||||
/**
|
||||
* test regular sorting ignoring case.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSortRegularIgnoreCase() {
|
||||
$toSort = array(
|
||||
array('Item' => array('name' => 'bar')),
|
||||
array('Item' => array('name' => 'Baby')),
|
||||
array('Item' => array('name' => 'Baz')),
|
||||
array('Item' => array('name' => 'bat')),
|
||||
);
|
||||
$sorted = Hash::sort($toSort, '{n}.Item.name', 'asc', array('type' => 'regular', 'ignoreCase' => true));
|
||||
$expected = array(
|
||||
array('Item' => array('name' => 'Baby')),
|
||||
array('Item' => array('name' => 'bar')),
|
||||
array('Item' => array('name' => 'bat')),
|
||||
array('Item' => array('name' => 'Baz')),
|
||||
);
|
||||
$this->assertEquals($expected, $sorted);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test insert()
|
||||
*
|
||||
|
|
@ -1202,6 +1537,13 @@ class HashTest extends CakeTestCase {
|
|||
'pages' => array('name' => array()),
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$a = array(
|
||||
'foo' => array('bar' => 'baz')
|
||||
);
|
||||
$result = Hash::insert($a, 'some.0123.path', array('foo' => array('bar' => 'baz')));
|
||||
$expected = array('foo' => array('bar' => 'baz'));
|
||||
$this->assertEquals($expected, Hash::get($result, 'some.0123.path'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1210,7 +1552,7 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testInsertMulti() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
|
||||
$result = Hash::insert($data, '{n}.Article.insert', 'value');
|
||||
$this->assertEquals('value', $result[0]['Article']['insert']);
|
||||
|
|
@ -1219,6 +1561,23 @@ class HashTest extends CakeTestCase {
|
|||
$result = Hash::insert($data, '{n}.Comment.{n}.insert', 'value');
|
||||
$this->assertEquals('value', $result[0]['Comment'][0]['insert']);
|
||||
$this->assertEquals('value', $result[0]['Comment'][1]['insert']);
|
||||
|
||||
$data = array(
|
||||
0 => array('Item' => array('id' => 1, 'title' => 'first')),
|
||||
1 => array('Item' => array('id' => 2, 'title' => 'second')),
|
||||
2 => array('Item' => array('id' => 3, 'title' => 'third')),
|
||||
3 => array('Item' => array('id' => 4, 'title' => 'fourth')),
|
||||
4 => array('Item' => array('id' => 5, 'title' => 'fifth')),
|
||||
);
|
||||
$result = Hash::insert($data, '{n}.Item[id=/\b2|\b4/]', array('test' => 2));
|
||||
$expected = array(
|
||||
0 => array('Item' => array('id' => 1, 'title' => 'first')),
|
||||
1 => array('Item' => array('id' => 2, 'title' => 'second', 'test' => 2)),
|
||||
2 => array('Item' => array('id' => 3, 'title' => 'third')),
|
||||
3 => array('Item' => array('id' => 4, 'title' => 'fourth', 'test' => 2)),
|
||||
4 => array('Item' => array('id' => 5, 'title' => 'fifth')),
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1282,6 +1641,35 @@ class HashTest extends CakeTestCase {
|
|||
$result = Hash::remove($a, 'pages.2.vars');
|
||||
$expected = $a;
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$a = array(
|
||||
0 => array(
|
||||
'name' => 'pages'
|
||||
),
|
||||
1 => array(
|
||||
'name' => 'files'
|
||||
)
|
||||
);
|
||||
|
||||
$result = Hash::remove($a, '{n}[name=files]');
|
||||
$expected = array(
|
||||
0 => array(
|
||||
'name' => 'pages'
|
||||
)
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$array = array(
|
||||
0 => 'foo',
|
||||
1 => array(
|
||||
0 => 'baz'
|
||||
)
|
||||
);
|
||||
$expected = $array;
|
||||
$result = Hash::remove($array, '{n}.part');
|
||||
$this->assertEquals($expected, $result);
|
||||
$result = Hash::remove($array, '{n}.{n}.part');
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1290,7 +1678,7 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testRemoveMulti() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
|
||||
$result = Hash::remove($data, '{n}.Article.title');
|
||||
$this->assertFalse(isset($result[0]['Article']['title']));
|
||||
|
|
@ -1301,6 +1689,22 @@ class HashTest extends CakeTestCase {
|
|||
$this->assertFalse(isset($result[0]['Article']['user_id']));
|
||||
$this->assertFalse(isset($result[0]['Article']['title']));
|
||||
$this->assertFalse(isset($result[0]['Article']['body']));
|
||||
|
||||
$data = array(
|
||||
0 => array('Item' => array('id' => 1, 'title' => 'first')),
|
||||
1 => array('Item' => array('id' => 2, 'title' => 'second')),
|
||||
2 => array('Item' => array('id' => 3, 'title' => 'third')),
|
||||
3 => array('Item' => array('id' => 4, 'title' => 'fourth')),
|
||||
4 => array('Item' => array('id' => 5, 'title' => 'fifth')),
|
||||
);
|
||||
|
||||
$result = Hash::remove($data, '{n}.Item[id=/\b2|\b4/]');
|
||||
$expected = array(
|
||||
0 => array('Item' => array('id' => 1, 'title' => 'first')),
|
||||
2 => array('Item' => array('id' => 3, 'title' => 'third')),
|
||||
4 => array('Item' => array('id' => 5, 'title' => 'fifth')),
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1341,7 +1745,7 @@ class HashTest extends CakeTestCase {
|
|||
$result = Hash::combine(array(), '{n}.User.id', '{n}.User.Data');
|
||||
$this->assertTrue(empty($result));
|
||||
|
||||
$a = self::userData();
|
||||
$a = static::userData();
|
||||
|
||||
$result = Hash::combine($a, '{n}.User.id');
|
||||
$expected = array(2 => null, 14 => null, 25 => null);
|
||||
|
|
@ -1366,13 +1770,41 @@ class HashTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* test combine() giving errors on key/value length mismatches.
|
||||
*
|
||||
* @expectedException CakeException
|
||||
* @return void
|
||||
*/
|
||||
public function testCombineErrorMissingValue() {
|
||||
$data = array(
|
||||
array('User' => array('id' => 1, 'name' => 'mark')),
|
||||
array('User' => array('name' => 'jose')),
|
||||
);
|
||||
Hash::combine($data, '{n}.User.id', '{n}.User.name');
|
||||
}
|
||||
|
||||
/**
|
||||
* test combine() giving errors on key/value length mismatches.
|
||||
*
|
||||
* @expectedException CakeException
|
||||
* @return void
|
||||
*/
|
||||
public function testCombineErrorMissingKey() {
|
||||
$data = array(
|
||||
array('User' => array('id' => 1, 'name' => 'mark')),
|
||||
array('User' => array('id' => 2)),
|
||||
);
|
||||
Hash::combine($data, '{n}.User.id', '{n}.User.name');
|
||||
}
|
||||
|
||||
/**
|
||||
* test combine() with a group path.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testCombineWithGroupPath() {
|
||||
$a = self::userData();
|
||||
$a = static::userData();
|
||||
|
||||
$result = Hash::combine($a, '{n}.User.id', '{n}.User.Data', '{n}.User.group_id');
|
||||
$expected = array(
|
||||
|
|
@ -1429,7 +1861,7 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testCombineWithFormatting() {
|
||||
$a = self::userData();
|
||||
$a = static::userData();
|
||||
|
||||
$result = Hash::combine(
|
||||
$a,
|
||||
|
|
@ -1495,7 +1927,7 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testFormat() {
|
||||
$data = self::userData();
|
||||
$data = static::userData();
|
||||
|
||||
$result = Hash::format(
|
||||
$data,
|
||||
|
|
@ -1555,15 +1987,20 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testMap() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
|
||||
$result = Hash::map($data, '{n}.Article.id', array($this, 'mapCallback'));
|
||||
$expected = array(2, 4, 6, 8, 10);
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testApply
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testApply() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
|
||||
$result = Hash::apply($data, '{n}.Article.id', 'array_sum');
|
||||
$this->assertEquals(15, $result);
|
||||
|
|
@ -1575,7 +2012,7 @@ class HashTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testReduce() {
|
||||
$data = self::articleData();
|
||||
$data = static::articleData();
|
||||
|
||||
$result = Hash::reduce($data, '{n}.Article.id', array($this, 'reduceCallback'));
|
||||
$this->assertEquals(15, $result);
|
||||
|
|
@ -1584,8 +2021,8 @@ class HashTest extends CakeTestCase {
|
|||
/**
|
||||
* testing method for map callbacks.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @return mixed.
|
||||
* @param mixed $value Value
|
||||
* @return mixed
|
||||
*/
|
||||
public function mapCallback($value) {
|
||||
return $value * 2;
|
||||
|
|
@ -1594,9 +2031,9 @@ class HashTest extends CakeTestCase {
|
|||
/**
|
||||
* testing method for reduce callbacks.
|
||||
*
|
||||
* @param mixed $one
|
||||
* @param mixed $two
|
||||
* @return mixed.
|
||||
* @param mixed $one First param
|
||||
* @param mixed $two Second param
|
||||
* @return mixed
|
||||
*/
|
||||
public function reduceCallback($one, $two) {
|
||||
return $one + $two;
|
||||
|
|
@ -2018,6 +2455,25 @@ class HashTest extends CakeTestCase {
|
|||
$this->assertEquals($input, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that nest() throws an InvalidArgumentException when providing an invalid input.
|
||||
*
|
||||
* @expectedException InvalidArgumentException
|
||||
* @return void
|
||||
*/
|
||||
public function testNestInvalid() {
|
||||
$input = array(
|
||||
array(
|
||||
'ParentCategory' => array(
|
||||
'id' => '1',
|
||||
'name' => 'Lorem ipsum dolor sit amet',
|
||||
'parent_id' => '1'
|
||||
)
|
||||
)
|
||||
);
|
||||
Hash::nest($input);
|
||||
}
|
||||
|
||||
/**
|
||||
* testMergeDiff method
|
||||
*
|
||||
|
|
@ -2162,7 +2618,19 @@ class HashTest extends CakeTestCase {
|
|||
)
|
||||
)
|
||||
);
|
||||
$this->assertEquals($result, $expected);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$data = array('a.b.100.a' => null, 'a.b.200.a' => null);
|
||||
$expected = array(
|
||||
'a' => array(
|
||||
'b' => array(
|
||||
100 => array('a' => null),
|
||||
200 => array('a' => null)
|
||||
)
|
||||
)
|
||||
);
|
||||
$result = Hash::expand($data);
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -2210,52 +2678,52 @@ class HashTest extends CakeTestCase {
|
|||
'Order.Item.0.Product.sizes.4.Size.qty' => '',
|
||||
'Order.Item.0.Product.sizes.4.Size.size' => '12-18mo',
|
||||
'Order.Item.0.Product.sizes.4.Size.id' => '42',
|
||||
'Order.Item.0.Art.imprint_locations.0.id' => (int) 2,
|
||||
'Order.Item.0.Art.imprint_locations.0.id' => 2,
|
||||
'Order.Item.0.Art.imprint_locations.0.name' => 'Left Chest',
|
||||
'Order.Item.0.Art.imprint_locations.0.imprint_type.id' => (int) 7,
|
||||
'Order.Item.0.Art.imprint_locations.0.imprint_type.id' => 7,
|
||||
'Order.Item.0.Art.imprint_locations.0.imprint_type.type' => 'Embroidery',
|
||||
'Order.Item.0.Art.imprint_locations.0.art' => '',
|
||||
'Order.Item.0.Art.imprint_locations.0.num_colors' => (int) 3,
|
||||
'Order.Item.0.Art.imprint_locations.0.num_colors' => 3,
|
||||
'Order.Item.0.Art.imprint_locations.0.description' => 'Wooo! This is Embroidery!!',
|
||||
'Order.Item.0.Art.imprint_locations.0.lines.0' => 'Platen',
|
||||
'Order.Item.0.Art.imprint_locations.0.lines.1' => 'Logo',
|
||||
'Order.Item.0.Art.imprint_locations.0.height' => (int) 4,
|
||||
'Order.Item.0.Art.imprint_locations.0.width' => (int) 5,
|
||||
'Order.Item.0.Art.imprint_locations.0.height' => 4,
|
||||
'Order.Item.0.Art.imprint_locations.0.width' => 5,
|
||||
'Order.Item.0.Art.imprint_locations.0.stitch_density' => 'Light',
|
||||
'Order.Item.0.Art.imprint_locations.0.metallic_thread' => true,
|
||||
'Order.Item.0.Art.imprint_locations.1.id' => (int) 4,
|
||||
'Order.Item.0.Art.imprint_locations.1.id' => 4,
|
||||
'Order.Item.0.Art.imprint_locations.1.name' => 'Full Back',
|
||||
'Order.Item.0.Art.imprint_locations.1.imprint_type.id' => (int) 6,
|
||||
'Order.Item.0.Art.imprint_locations.1.imprint_type.id' => 6,
|
||||
'Order.Item.0.Art.imprint_locations.1.imprint_type.type' => 'Screenprinting',
|
||||
'Order.Item.0.Art.imprint_locations.1.art' => '',
|
||||
'Order.Item.0.Art.imprint_locations.1.num_colors' => (int) 3,
|
||||
'Order.Item.0.Art.imprint_locations.1.num_colors' => 3,
|
||||
'Order.Item.0.Art.imprint_locations.1.description' => 'Wooo! This is Screenprinting!!',
|
||||
'Order.Item.0.Art.imprint_locations.1.lines.0' => 'Platen',
|
||||
'Order.Item.0.Art.imprint_locations.1.lines.1' => 'Logo',
|
||||
'Order.Item.0.Art.imprint_locations.2.id' => (int) 26,
|
||||
'Order.Item.0.Art.imprint_locations.2.id' => 26,
|
||||
'Order.Item.0.Art.imprint_locations.2.name' => 'HS - JSY Name Below',
|
||||
'Order.Item.0.Art.imprint_locations.2.imprint_type.id' => (int) 9,
|
||||
'Order.Item.0.Art.imprint_locations.2.imprint_type.id' => 9,
|
||||
'Order.Item.0.Art.imprint_locations.2.imprint_type.type' => 'Names',
|
||||
'Order.Item.0.Art.imprint_locations.2.description' => 'Wooo! This is Names!!',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.0.active' => (int) 1,
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.0.active' => 1,
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.0.name' => 'Benjamin Talavera',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.0.color' => 'Red',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.0.height' => '3',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.0.layout' => 'Arched',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.0.style' => 'Classic',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.1.active' => (int) 0,
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.1.active' => 0,
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.1.name' => 'Rishi Narayan',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.1.color' => 'Cardinal',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.1.height' => '4',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.1.layout' => 'Straight',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.S.1.style' => 'Team US',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.M.0.active' => (int) 1,
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.M.0.active' => 1,
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.M.0.name' => 'Brandon Plasters',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.M.0.color' => 'Red',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.M.0.height' => '3',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.M.0.layout' => 'Arched',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.M.0.style' => 'Classic',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.M.1.active' => (int) 0,
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.M.1.active' => 0,
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.M.1.name' => 'Andrew Reed',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.M.1.color' => 'Cardinal',
|
||||
'Order.Item.0.Art.imprint_locations.2.sizes.M.1.height' => '4',
|
||||
|
|
@ -2280,10 +2748,10 @@ class HashTest extends CakeTestCase {
|
|||
'Order.QualityControl' => '0',
|
||||
'Order.Receiving' => '0',
|
||||
'Order.ScreenPrinting' => '0',
|
||||
'Order.Stage.art_approval' => (int) 0,
|
||||
'Order.Stage.draft' => (int) 1,
|
||||
'Order.Stage.quote' => (int) 1,
|
||||
'Order.Stage.order' => (int) 1,
|
||||
'Order.Stage.art_approval' => 0,
|
||||
'Order.Stage.draft' => 1,
|
||||
'Order.Stage.quote' => 1,
|
||||
'Order.Stage.order' => 1,
|
||||
'Order.StoreLiason' => '0',
|
||||
'Order.Tag_UI_Email' => '',
|
||||
'Order.Tags' => '',
|
||||
|
|
|
|||
|
|
@ -4,24 +4,22 @@
|
|||
*
|
||||
* InflectorTest is used to test cases on the Inflector class
|
||||
*
|
||||
* PHP 5
|
||||
*
|
||||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license Open Group Test Suite License (http://www.opensource.org/licenses/opengroup.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
/**
|
||||
* Included libraries.
|
||||
*
|
||||
*/
|
||||
App::uses('Inflector', 'Utility');
|
||||
|
||||
|
|
@ -32,6 +30,57 @@ App::uses('Inflector', 'Utility');
|
|||
*/
|
||||
class InflectorTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* A list of chars to test transliteration.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $maps = array (
|
||||
'de' => array ( /* German */
|
||||
'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue', 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss',
|
||||
'ẞ' => 'SS'
|
||||
),
|
||||
'latin' => array (
|
||||
'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Å' => 'A', 'Ă' => 'A', 'Æ' => 'AE', 'Ç' =>
|
||||
'C', 'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I',
|
||||
'Ï' => 'I', 'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ő' => 'O', 'Ø' => 'O',
|
||||
'Ș' => 'S', 'Ț' => 'T', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ű' => 'U',
|
||||
'Ý' => 'Y', 'Þ' => 'TH', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a',
|
||||
'å' => 'a', 'ă' => 'a', 'æ' => 'ae', 'ç' => 'c', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e',
|
||||
'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' =>
|
||||
'o', 'ô' => 'o', 'õ' => 'o', 'ő' => 'o', 'ø' => 'o', 'ș' => 's', 'ț' => 't', 'ù' => 'u', 'ú' => 'u',
|
||||
'û' => 'u', 'ű' => 'u', 'ý' => 'y', 'þ' => 'th', 'ÿ' => 'y'
|
||||
),
|
||||
'tr' => array ( /* Turkish */
|
||||
'ş' => 's', 'Ş' => 'S', 'ı' => 'i', 'İ' => 'I', 'ç' => 'c', 'Ç' => 'C', 'ğ' => 'g', 'Ğ' => 'G'
|
||||
),
|
||||
'uk' => array ( /* Ukrainian */
|
||||
'Є' => 'Ye', 'І' => 'I', 'Ї' => 'Yi', 'Ґ' => 'G', 'є' => 'ye', 'і' => 'i', 'ї' => 'yi', 'ґ' => 'g'
|
||||
),
|
||||
'cs' => array ( /* Czech */
|
||||
'č' => 'c', 'ď' => 'd', 'ě' => 'e', 'ň' => 'n', 'ř' => 'r', 'š' => 's', 'ť' => 't', 'ů' => 'u',
|
||||
'ž' => 'z', 'Č' => 'C', 'Ď' => 'D', 'Ě' => 'E', 'Ň' => 'N', 'Ř' => 'R', 'Š' => 'S', 'Ť' => 'T',
|
||||
'Ů' => 'U', 'Ž' => 'Z'
|
||||
),
|
||||
'pl' => array ( /* Polish */
|
||||
'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z',
|
||||
'ż' => 'z', 'Ą' => 'A', 'Ć' => 'C', 'Ł' => 'L', 'Ń' => 'N', 'Ó' => 'O', 'Ś' => 'S',
|
||||
'Ź' => 'Z', 'Ż' => 'Z'
|
||||
),
|
||||
'ro' => array ( /* Romanian */
|
||||
'ă' => 'a', 'â' => 'a', 'î' => 'i', 'ș' => 's', 'ț' => 't', 'Ţ' => 'T', 'ţ' => 't'
|
||||
),
|
||||
'lv' => array ( /* Latvian */
|
||||
'ā' => 'a', 'č' => 'c', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n',
|
||||
'š' => 's', 'ū' => 'u', 'ž' => 'z', 'Ā' => 'A', 'Č' => 'C', 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'I',
|
||||
'Ķ' => 'K', 'Ļ' => 'L', 'Ņ' => 'N', 'Š' => 'S', 'Ū' => 'U', 'Ž' => 'Z'
|
||||
),
|
||||
'lt' => array ( /* Lithuanian */
|
||||
'ą' => 'a', 'č' => 'c', 'ę' => 'e', 'ė' => 'e', 'į' => 'i', 'š' => 's', 'ų' => 'u', 'ū' => 'u', 'ž' => 'z',
|
||||
'Ą' => 'A', 'Č' => 'C', 'Ę' => 'E', 'Ė' => 'E', 'Į' => 'I', 'Š' => 'S', 'Ų' => 'U', 'Ū' => 'U', 'Ž' => 'Z'
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
* tearDown
|
||||
*
|
||||
|
|
@ -74,11 +123,12 @@ class InflectorTest extends CakeTestCase {
|
|||
$this->assertEquals(Inflector::singularize('fungi'), 'fungus');
|
||||
$this->assertEquals(Inflector::singularize('nuclei'), 'nucleus');
|
||||
$this->assertEquals(Inflector::singularize('octopuses'), 'octopus');
|
||||
$this->assertEquals(Inflector::singularize('octopuses'), 'octopus');
|
||||
$this->assertEquals(Inflector::singularize('radii'), 'radius');
|
||||
$this->assertEquals(Inflector::singularize('stimuli'), 'stimulus');
|
||||
$this->assertEquals(Inflector::singularize('syllabi'), 'syllabus');
|
||||
$this->assertEquals(Inflector::singularize('termini'), 'terminus');
|
||||
$this->assertEquals(Inflector::singularize('viri'), 'virus');
|
||||
$this->assertEquals(Inflector::singularize('viruses'), 'virus');
|
||||
$this->assertEquals(Inflector::singularize('people'), 'person');
|
||||
$this->assertEquals(Inflector::singularize('gloves'), 'glove');
|
||||
$this->assertEquals(Inflector::singularize('doves'), 'dove');
|
||||
|
|
@ -94,6 +144,8 @@ class InflectorTest extends CakeTestCase {
|
|||
$this->assertEquals(Inflector::singularize('faxes'), 'fax');
|
||||
$this->assertEquals(Inflector::singularize('waxes'), 'wax');
|
||||
$this->assertEquals(Inflector::singularize('niches'), 'niche');
|
||||
$this->assertEquals(Inflector::singularize('caves'), 'cave');
|
||||
$this->assertEquals(Inflector::singularize('graves'), 'grave');
|
||||
$this->assertEquals(Inflector::singularize('waves'), 'wave');
|
||||
$this->assertEquals(Inflector::singularize('bureaus'), 'bureau');
|
||||
$this->assertEquals(Inflector::singularize('genetic_analyses'), 'genetic_analysis');
|
||||
|
|
@ -110,16 +162,60 @@ class InflectorTest extends CakeTestCase {
|
|||
$this->assertEquals(Inflector::singularize('foes'), 'foe');
|
||||
$this->assertEquals(Inflector::singularize('databases'), 'database');
|
||||
$this->assertEquals(Inflector::singularize('cookies'), 'cookie');
|
||||
|
||||
$this->assertEquals(Inflector::singularize('thieves'), 'thief');
|
||||
$this->assertEquals(Inflector::singularize('potatoes'), 'potato');
|
||||
$this->assertEquals(Inflector::singularize('heroes'), 'hero');
|
||||
$this->assertEquals(Inflector::singularize('buffalos'), 'buffalo');
|
||||
$this->assertEquals(Inflector::singularize('babies'), 'baby');
|
||||
$this->assertEquals(Inflector::singularize('teeth'), 'tooth');
|
||||
$this->assertEquals(Inflector::singularize('geese'), 'goose');
|
||||
$this->assertEquals(Inflector::singularize('feet'), 'foot');
|
||||
$this->assertEquals(Inflector::singularize('objectives'), 'objective');
|
||||
$this->assertEquals(Inflector::singularize('archives'), 'archive');
|
||||
$this->assertEquals(Inflector::singularize('briefs'), 'brief');
|
||||
$this->assertEquals(Inflector::singularize('quotas'), 'quota');
|
||||
$this->assertEquals(Inflector::singularize('curves'), 'curve');
|
||||
$this->assertEquals(Inflector::singularize('body_curves'), 'body_curve');
|
||||
$this->assertEquals(Inflector::singularize('metadata'), 'metadata');
|
||||
$this->assertEquals(Inflector::singularize('files_metadata'), 'files_metadata');
|
||||
$this->assertEquals(Inflector::singularize('sieves'), 'sieve');
|
||||
$this->assertEquals(Inflector::singularize('blue_octopuses'), 'blue_octopus');
|
||||
$this->assertEquals(Inflector::singularize(''), '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that overlapping irregulars don't collide.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSingularizeMultiWordIrregular() {
|
||||
Inflector::rules('singular', array(
|
||||
'irregular' => array(
|
||||
'preguntas_frecuentes' => 'pregunta_frecuente',
|
||||
'categorias_preguntas_frecuentes' => 'categoria_pregunta_frecuente',
|
||||
)
|
||||
));
|
||||
$this->assertEquals('pregunta_frecuente', Inflector::singularize('preguntas_frecuentes'));
|
||||
$this->assertEquals(
|
||||
'categoria_pregunta_frecuente',
|
||||
Inflector::singularize('categorias_preguntas_frecuentes')
|
||||
);
|
||||
$this->assertEquals(
|
||||
'faq_categoria_pregunta_frecuente',
|
||||
Inflector::singularize('faq_categorias_preguntas_frecuentes')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* testInflectingPlurals method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testInflectingPlurals() {
|
||||
$this->assertEquals(Inflector::pluralize('axman'), 'axmen');
|
||||
$this->assertEquals(Inflector::pluralize('man'), 'men');
|
||||
$this->assertEquals(Inflector::pluralize('woman'), 'women');
|
||||
$this->assertEquals(Inflector::pluralize('human'), 'humans');
|
||||
$this->assertEquals(Inflector::pluralize('categoria'), 'categorias');
|
||||
$this->assertEquals(Inflector::pluralize('house'), 'houses');
|
||||
$this->assertEquals(Inflector::pluralize('powerhouse'), 'powerhouses');
|
||||
|
|
@ -150,7 +246,7 @@ class InflectorTest extends CakeTestCase {
|
|||
$this->assertEquals(Inflector::pluralize('stimulus'), 'stimuli');
|
||||
$this->assertEquals(Inflector::pluralize('syllabus'), 'syllabi');
|
||||
$this->assertEquals(Inflector::pluralize('terminus'), 'termini');
|
||||
$this->assertEquals(Inflector::pluralize('virus'), 'viri');
|
||||
$this->assertEquals(Inflector::pluralize('virus'), 'viruses');
|
||||
$this->assertEquals(Inflector::pluralize('person'), 'people');
|
||||
$this->assertEquals(Inflector::pluralize('people'), 'people');
|
||||
$this->assertEquals(Inflector::pluralize('glove'), 'gloves');
|
||||
|
|
@ -162,9 +258,82 @@ class InflectorTest extends CakeTestCase {
|
|||
$this->assertEquals(Inflector::pluralize('roof'), 'roofs');
|
||||
$this->assertEquals(Inflector::pluralize('foe'), 'foes');
|
||||
$this->assertEquals(Inflector::pluralize('cookie'), 'cookies');
|
||||
$this->assertEquals(Inflector::pluralize('wolf'), 'wolves');
|
||||
$this->assertEquals(Inflector::pluralize('thief'), 'thieves');
|
||||
$this->assertEquals(Inflector::pluralize('potato'), 'potatoes');
|
||||
$this->assertEquals(Inflector::pluralize('hero'), 'heroes');
|
||||
$this->assertEquals(Inflector::pluralize('buffalo'), 'buffalo');
|
||||
$this->assertEquals(Inflector::pluralize('tooth'), 'teeth');
|
||||
$this->assertEquals(Inflector::pluralize('goose'), 'geese');
|
||||
$this->assertEquals(Inflector::pluralize('foot'), 'feet');
|
||||
$this->assertEquals(Inflector::pluralize('objective'), 'objectives');
|
||||
$this->assertEquals(Inflector::pluralize('brief'), 'briefs');
|
||||
$this->assertEquals(Inflector::pluralize('quota'), 'quotas');
|
||||
$this->assertEquals(Inflector::pluralize('curve'), 'curves');
|
||||
$this->assertEquals(Inflector::pluralize('body_curve'), 'body_curves');
|
||||
$this->assertEquals(Inflector::pluralize('metadata'), 'metadata');
|
||||
$this->assertEquals(Inflector::pluralize('files_metadata'), 'files_metadata');
|
||||
$this->assertEquals(Inflector::pluralize('stadia'), 'stadia');
|
||||
$this->assertEquals(Inflector::pluralize('sieve'), 'sieves');
|
||||
$this->assertEquals(Inflector::pluralize('blue_octopus'), 'blue_octopuses');
|
||||
$this->assertEquals(Inflector::pluralize(''), '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that overlapping irregulars don't collide.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testPluralizeMultiWordIrregular() {
|
||||
Inflector::rules('plural', array(
|
||||
'irregular' => array(
|
||||
'mytable1' => 'mytables1',
|
||||
'mytable2' => 'mytables2',
|
||||
'mytable1_mytable2' => 'mytables1_mytables2',
|
||||
'pregunta_frecuente' => 'preguntas_frecuentes',
|
||||
'categoria_pregunta_frecuente' => 'categorias_preguntas_frecuentes',
|
||||
)
|
||||
));
|
||||
$this->assertEquals('preguntas_frecuentes', Inflector::pluralize('pregunta_frecuente'));
|
||||
$this->assertEquals(
|
||||
'categorias_preguntas_frecuentes',
|
||||
Inflector::pluralize('categoria_pregunta_frecuente')
|
||||
);
|
||||
$this->assertEquals(
|
||||
'faq_categorias_preguntas_frecuentes',
|
||||
Inflector::pluralize('faq_categoria_pregunta_frecuente')
|
||||
);
|
||||
$this->assertEquals('mytables1', Inflector::pluralize('mytable1'));
|
||||
$this->assertEquals('mytables2', Inflector::pluralize('mytable2'));
|
||||
$this->assertEquals('mytables1_mytables2', Inflector::pluralize('mytable1_mytable2'));
|
||||
$this->assertEquals('mytables1_mytables2', Inflector::tableize('Mytable1Mytable2'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testInflectingMultiWordIrregulars
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testInflectingMultiWordIrregulars() {
|
||||
// unset the default rules in order to avoid them possibly matching
|
||||
// the words in case the irregular regex won't match, the tests
|
||||
// should fail in that case
|
||||
Inflector::rules('plural', array(
|
||||
'rules' => array(),
|
||||
));
|
||||
Inflector::rules('singular', array(
|
||||
'rules' => array(),
|
||||
));
|
||||
|
||||
$this->assertEquals(Inflector::singularize('wisdom teeth'), 'wisdom tooth');
|
||||
$this->assertEquals(Inflector::singularize('wisdom-teeth'), 'wisdom-tooth');
|
||||
$this->assertEquals(Inflector::singularize('wisdom_teeth'), 'wisdom_tooth');
|
||||
|
||||
$this->assertEquals(Inflector::pluralize('sweet potato'), 'sweet potatoes');
|
||||
$this->assertEquals(Inflector::pluralize('sweet-potato'), 'sweet-potatoes');
|
||||
$this->assertEquals(Inflector::pluralize('sweet_potato'), 'sweet_potatoes');
|
||||
}
|
||||
|
||||
/**
|
||||
* testInflectorSlug method
|
||||
*
|
||||
|
|
@ -226,6 +395,23 @@ class InflectorTest extends CakeTestCase {
|
|||
$result = Inflector::slug('posts/view/한국어/page:1/sort:asc');
|
||||
$expected = 'posts_view_한국어_page_1_sort_asc';
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = Inflector::slug("non\xc2\xa0breaking\xc2\xa0space");
|
||||
$this->assertEquals('non_breaking_space', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test slug() with a complete list of special chars.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testInflectorSlugCharList() {
|
||||
foreach (static::$maps as $language => $list) {
|
||||
foreach ($list as $from => $to) {
|
||||
$result = Inflector::slug($from);
|
||||
$this->assertEquals($to, $result, $from . ' (' . $language . ') should be ' . $to . ' - but is ' . $result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -266,12 +452,14 @@ class InflectorTest extends CakeTestCase {
|
|||
$this->assertSame(Inflector::underscore('testThing'), 'test_thing');
|
||||
$this->assertSame(Inflector::underscore('TestThingExtra'), 'test_thing_extra');
|
||||
$this->assertSame(Inflector::underscore('testThingExtra'), 'test_thing_extra');
|
||||
$this->assertSame(Inflector::underscore('testThingExtrå'), 'test_thing_extrå');
|
||||
|
||||
// Identical checks test the cache code path.
|
||||
$this->assertSame(Inflector::underscore('TestThing'), 'test_thing');
|
||||
$this->assertSame(Inflector::underscore('testThing'), 'test_thing');
|
||||
$this->assertSame(Inflector::underscore('TestThingExtra'), 'test_thing_extra');
|
||||
$this->assertSame(Inflector::underscore('testThingExtra'), 'test_thing_extra');
|
||||
$this->assertSame(Inflector::underscore('testThingExtrå'), 'test_thing_extrå');
|
||||
|
||||
// Test stupid values
|
||||
$this->assertSame(Inflector::underscore(''), '');
|
||||
|
|
@ -279,6 +467,19 @@ class InflectorTest extends CakeTestCase {
|
|||
$this->assertSame(Inflector::underscore(false), '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test camelize()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testCamelize() {
|
||||
$this->assertSame('BlogArticles', Inflector::camelize('blog_articles'));
|
||||
$this->assertSame('BlogArticles', Inflector::camelize('blog articles'));
|
||||
$this->assertSame('MyPlugin.MyClass', Inflector::camelize('MyPlugin.MyClass'));
|
||||
$this->assertSame('MyPlugin.MyClass', Inflector::camelize('my_plugin.MyClass'));
|
||||
$this->assertSame('MyPlugin.myClass', Inflector::camelize('MyPlugin.my_class'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testVariableNaming method
|
||||
*
|
||||
|
|
@ -309,10 +510,10 @@ class InflectorTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testTableNaming() {
|
||||
$this->assertEquals(Inflector::tableize('ArtistsGenre'), 'artists_genres');
|
||||
$this->assertEquals(Inflector::tableize('FileSystem'), 'file_systems');
|
||||
$this->assertEquals(Inflector::tableize('News'), 'news');
|
||||
$this->assertEquals(Inflector::tableize('Bureau'), 'bureaus');
|
||||
$this->assertEquals('artists_genres', Inflector::tableize('ArtistsGenre'));
|
||||
$this->assertEquals('file_systems', Inflector::tableize('FileSystem'));
|
||||
$this->assertEquals('news', Inflector::tableize('News'));
|
||||
$this->assertEquals('bureaus', Inflector::tableize('Bureau'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -321,9 +522,12 @@ class InflectorTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testHumanization() {
|
||||
$this->assertEquals(Inflector::humanize('posts'), 'Posts');
|
||||
$this->assertEquals(Inflector::humanize('posts_tags'), 'Posts Tags');
|
||||
$this->assertEquals(Inflector::humanize('file_systems'), 'File Systems');
|
||||
$this->assertEquals('Posts', Inflector::humanize('posts'));
|
||||
$this->assertEquals('Posts Tags', Inflector::humanize('posts_tags'));
|
||||
$this->assertEquals('File Systems', Inflector::humanize('file_systems'));
|
||||
$this->assertEquals('FiLe SysTems', Inflector::humanize('FiLe_SysTems'));
|
||||
$this->assertEquals('Hello Wörld', Inflector::humanize('hello_wörld'));
|
||||
$this->assertEquals('福岡 City', Inflector::humanize('福岡_city'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -2,19 +2,18 @@
|
|||
/**
|
||||
* ObjectCollectionTest file
|
||||
*
|
||||
* PHP 5
|
||||
*
|
||||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @since CakePHP(tm) v 2.0
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('ObjectCollection', 'Utility');
|
||||
|
|
@ -28,8 +27,8 @@ class GenericObject {
|
|||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param GenericObjectCollection $collection
|
||||
* @param array $settings
|
||||
* @param GenericObjectCollection $collection A collection.
|
||||
* @param array $settings Settings.
|
||||
*/
|
||||
public function __construct(GenericObjectCollection $collection, $settings = array()) {
|
||||
$this->_Collection = $collection;
|
||||
|
|
@ -39,12 +38,14 @@ class GenericObject {
|
|||
}
|
||||
|
||||
/**
|
||||
* First Extension of Generic Object
|
||||
* First Extension of Generic CakeObject
|
||||
*/
|
||||
class FirstGenericObject extends GenericObject {
|
||||
|
||||
/**
|
||||
* A generic callback
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function callback() {
|
||||
}
|
||||
|
|
@ -52,20 +53,26 @@ class FirstGenericObject extends GenericObject {
|
|||
}
|
||||
|
||||
/**
|
||||
* Second Extension of Generic Object
|
||||
* Second Extension of Generic CakeObject
|
||||
*/
|
||||
class SecondGenericObject extends GenericObject {
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function callback() {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Third Extension of Generic Object
|
||||
* Third Extension of Generic CakeObject
|
||||
*/
|
||||
class ThirdGenericObject extends GenericObject {
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function callback() {
|
||||
}
|
||||
|
||||
|
|
@ -79,12 +86,12 @@ class GenericObjectCollection extends ObjectCollection {
|
|||
/**
|
||||
* Loads a generic object
|
||||
*
|
||||
* @param string $object Object name
|
||||
* @param string $object CakeObject name
|
||||
* @param array $settings Settings array
|
||||
* @return array List of loaded objects
|
||||
*/
|
||||
public function load($object, $settings = array()) {
|
||||
list($plugin, $name) = pluginSplit($object);
|
||||
list(, $name) = pluginSplit($object);
|
||||
if (isset($this->_loaded[$name])) {
|
||||
return $this->_loaded[$name];
|
||||
}
|
||||
|
|
@ -97,6 +104,27 @@ class GenericObjectCollection extends ObjectCollection {
|
|||
return $this->_loaded[$name];
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for adding/overwriting enabled objects including
|
||||
* settings
|
||||
*
|
||||
* @param string $name Name of the object
|
||||
* @param CakeObject $object The object to use
|
||||
* @param array $settings Settings to apply for the object
|
||||
* @return array Loaded objects
|
||||
*/
|
||||
public function setObject($name, $object, $settings = array()) {
|
||||
$this->_loaded[$name] = $object;
|
||||
if (isset($settings['priority'])) {
|
||||
$this->setPriority($name, $settings['priority']);
|
||||
}
|
||||
$enable = isset($settings['enabled']) ? $settings['enabled'] : true;
|
||||
if ($enable === true) {
|
||||
$this->enable($name);
|
||||
}
|
||||
return $this->_loaded;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ObjectCollectionTest extends CakeTestCase {
|
||||
|
|
@ -131,8 +159,8 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
$this->assertInstanceOf('FirstGenericObject', $result);
|
||||
$this->assertInstanceOf('FirstGenericObject', $this->Objects->First);
|
||||
|
||||
$result = $this->Objects->attached();
|
||||
$this->assertEquals(array('First'), $result, 'attached() results are wrong.');
|
||||
$result = $this->Objects->loaded();
|
||||
$this->assertEquals(array('First'), $result, 'loaded() results are wrong.');
|
||||
|
||||
$this->assertTrue($this->Objects->enabled('First'));
|
||||
|
||||
|
|
@ -149,17 +177,17 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
$this->Objects->load('First');
|
||||
$this->Objects->load('Second');
|
||||
|
||||
$result = $this->Objects->attached();
|
||||
$result = $this->Objects->loaded();
|
||||
$this->assertEquals(array('First', 'Second'), $result, 'loaded objects are wrong');
|
||||
|
||||
$this->Objects->unload('First');
|
||||
$this->assertFalse(isset($this->Objects->First));
|
||||
$this->assertTrue(isset($this->Objects->Second));
|
||||
|
||||
$result = $this->Objects->attached();
|
||||
$result = $this->Objects->loaded();
|
||||
$this->assertEquals(array('Second'), $result, 'loaded objects are wrong');
|
||||
|
||||
$result = $this->Objects->enabled();
|
||||
$result = $this->Objects->loaded();
|
||||
$this->assertEquals(array('Second'), $result, 'enabled objects are wrong');
|
||||
}
|
||||
|
||||
|
|
@ -171,7 +199,7 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
public function testSet() {
|
||||
$this->Objects->load('First');
|
||||
|
||||
$result = $this->Objects->attached();
|
||||
$result = $this->Objects->loaded();
|
||||
$this->assertEquals(array('First'), $result, 'loaded objects are wrong');
|
||||
|
||||
$result = $this->Objects->set('First', new SecondGenericObject($this->Objects));
|
||||
|
|
@ -189,15 +217,9 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
protected function _makeMockClasses() {
|
||||
if (!class_exists('TriggerMockFirstGenericObject')) {
|
||||
$this->getMock('FirstGenericObject', array(), array(), 'TriggerMockFirstGenericObject', false);
|
||||
}
|
||||
if (!class_exists('TriggerMockSecondGenericObject')) {
|
||||
$this->getMock('SecondGenericObject', array(), array(), 'TriggerMockSecondGenericObject', false);
|
||||
}
|
||||
if (!class_exists('TriggerMockThirdGenericObject')) {
|
||||
$this->getMock('ThirdGenericObject', array(), array(), 'TriggerMockThirdGenericObject', false);
|
||||
}
|
||||
$this->FirstGenericObject = $this->getMock('FirstGenericObject', array(), array(), '', false);
|
||||
$this->SecondGenericObject = $this->getMock('SecondGenericObject', array(), array(), '', false);
|
||||
$this->ThirdGenericObject = $this->getMock('ThirdGenericObject', array(), array(), '', false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -207,11 +229,8 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
*/
|
||||
public function testTrigger() {
|
||||
$this->_makeMockClasses();
|
||||
$this->Objects->load('TriggerMockFirst');
|
||||
$this->Objects->load('TriggerMockSecond');
|
||||
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockFirst;
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockSecond;
|
||||
$this->Objects->setObject('TriggerMockFirst', $this->FirstGenericObject);
|
||||
$this->Objects->setObject('TriggerMockSecond', $this->SecondGenericObject);
|
||||
|
||||
$this->Objects->TriggerMockFirst->expects($this->once())
|
||||
->method('callback')
|
||||
|
|
@ -230,11 +249,8 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
*/
|
||||
public function testTriggerWithDisabledObjects() {
|
||||
$this->_makeMockClasses();
|
||||
$this->Objects->load('TriggerMockFirst');
|
||||
$this->Objects->load('TriggerMockSecond');
|
||||
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockFirst;
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockSecond;
|
||||
$this->Objects->setObject('TriggerMockFirst', $this->FirstGenericObject);
|
||||
$this->Objects->setObject('TriggerMockSecond', $this->SecondGenericObject, array('enabled' => false));
|
||||
|
||||
$this->Objects->TriggerMockFirst->expects($this->once())
|
||||
->method('callback')
|
||||
|
|
@ -243,8 +259,6 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
->method('callback')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$this->Objects->disable('TriggerMockSecond');
|
||||
|
||||
$this->assertTrue($this->Objects->trigger('callback', array()));
|
||||
}
|
||||
|
||||
|
|
@ -255,11 +269,8 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
*/
|
||||
public function testTriggerWithCollectReturn() {
|
||||
$this->_makeMockClasses();
|
||||
$this->Objects->load('TriggerMockFirst');
|
||||
$this->Objects->load('TriggerMockSecond');
|
||||
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockFirst;
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockSecond;
|
||||
$this->Objects->setObject('TriggerMockFirst', $this->FirstGenericObject);
|
||||
$this->Objects->setObject('TriggerMockSecond', $this->SecondGenericObject);
|
||||
|
||||
$this->Objects->TriggerMockFirst->expects($this->once())
|
||||
->method('callback')
|
||||
|
|
@ -283,11 +294,8 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
*/
|
||||
public function testTriggerWithBreak() {
|
||||
$this->_makeMockClasses();
|
||||
$this->Objects->load('TriggerMockFirst');
|
||||
$this->Objects->load('TriggerMockSecond');
|
||||
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockFirst;
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockSecond;
|
||||
$this->Objects->setObject('TriggerMockFirst', $this->FirstGenericObject);
|
||||
$this->Objects->setObject('TriggerMockSecond', $this->SecondGenericObject);
|
||||
|
||||
$this->Objects->TriggerMockFirst->expects($this->once())
|
||||
->method('callback')
|
||||
|
|
@ -310,11 +318,8 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
*/
|
||||
public function testTriggerWithModParams() {
|
||||
$this->_makeMockClasses();
|
||||
$this->Objects->load('TriggerMockFirst');
|
||||
$this->Objects->load('TriggerMockSecond');
|
||||
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockFirst;
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockSecond;
|
||||
$this->Objects->setObject('TriggerMockFirst', $this->FirstGenericObject);
|
||||
$this->Objects->setObject('TriggerMockSecond', $this->SecondGenericObject);
|
||||
|
||||
$this->Objects->TriggerMockFirst->expects($this->once())
|
||||
->method('callback')
|
||||
|
|
@ -342,11 +347,8 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
*/
|
||||
public function testTriggerModParamsInvalidIndex() {
|
||||
$this->_makeMockClasses();
|
||||
$this->Objects->load('TriggerMockFirst');
|
||||
$this->Objects->load('TriggerMockSecond');
|
||||
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockFirst;
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockSecond;
|
||||
$this->Objects->setObject('TriggerMockFirst', $this->FirstGenericObject);
|
||||
$this->Objects->setObject('TriggerMockSecond', $this->SecondGenericObject);
|
||||
|
||||
$this->Objects->TriggerMockFirst->expects($this->never())
|
||||
->method('callback');
|
||||
|
|
@ -354,7 +356,7 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
$this->Objects->TriggerMockSecond->expects($this->never())
|
||||
->method('callback');
|
||||
|
||||
$result = $this->Objects->trigger(
|
||||
$this->Objects->trigger(
|
||||
'callback',
|
||||
array(array('value')),
|
||||
array('modParams' => 2)
|
||||
|
|
@ -368,11 +370,8 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
*/
|
||||
public function testTriggerModParamsNullIgnored() {
|
||||
$this->_makeMockClasses();
|
||||
$this->Objects->load('TriggerMockFirst');
|
||||
$this->Objects->load('TriggerMockSecond');
|
||||
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockFirst;
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockSecond;
|
||||
$this->Objects->setObject('TriggerMockFirst', $this->FirstGenericObject);
|
||||
$this->Objects->setObject('TriggerMockSecond', $this->SecondGenericObject);
|
||||
|
||||
$this->Objects->TriggerMockFirst->expects($this->once())
|
||||
->method('callback')
|
||||
|
|
@ -399,11 +398,8 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
*/
|
||||
public function testTriggerPriority() {
|
||||
$this->_makeMockClasses();
|
||||
$this->Objects->load('TriggerMockFirst');
|
||||
$this->Objects->load('TriggerMockSecond', array('priority' => 5));
|
||||
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockFirst;
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockSecond;
|
||||
$this->Objects->setObject('TriggerMockFirst', $this->FirstGenericObject);
|
||||
$this->Objects->setObject('TriggerMockSecond', $this->SecondGenericObject, array('priority' => 5));
|
||||
|
||||
$this->Objects->TriggerMockFirst->expects($this->any())
|
||||
->method('callback')
|
||||
|
|
@ -419,8 +415,7 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$this->Objects->load('TriggerMockThird', array('priority' => 7));
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockThird;
|
||||
$this->Objects->setObject('TriggerMockThird', $this->ThirdGenericObject, array('priority' => 7));
|
||||
$this->Objects->TriggerMockThird->expects($this->any())
|
||||
->method('callback')
|
||||
->will($this->returnValue('3rd'));
|
||||
|
|
@ -540,16 +535,14 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
* tests that passing an instance of CakeEvent to trigger will prepend the subject to the list of arguments
|
||||
*
|
||||
* @return void
|
||||
* @triggers callback $subjectClass, array('first argument')
|
||||
*/
|
||||
public function testDispatchEventWithSubject() {
|
||||
$this->_makeMockClasses();
|
||||
$this->Objects->load('TriggerMockFirst');
|
||||
$this->Objects->load('TriggerMockSecond');
|
||||
$this->Objects->setObject('TriggerMockFirst', $this->FirstGenericObject);
|
||||
$this->Objects->setObject('TriggerMockSecond', $this->SecondGenericObject);
|
||||
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockFirst;
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockSecond;
|
||||
|
||||
$subjectClass = new Object();
|
||||
$subjectClass = new CakeObject();
|
||||
$this->Objects->TriggerMockFirst->expects($this->once())
|
||||
->method('callback')
|
||||
->with($subjectClass, 'first argument')
|
||||
|
|
@ -568,16 +561,14 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
* will NOT prepend the subject to the list of arguments
|
||||
*
|
||||
* @return void
|
||||
* @triggers callback $subjectClass, array('first argument')
|
||||
*/
|
||||
public function testDispatchEventNoSubject() {
|
||||
$this->_makeMockClasses();
|
||||
$this->Objects->load('TriggerMockFirst');
|
||||
$this->Objects->load('TriggerMockSecond');
|
||||
$this->Objects->setObject('TriggerMockFirst', $this->FirstGenericObject);
|
||||
$this->Objects->setObject('TriggerMockSecond', $this->SecondGenericObject);
|
||||
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockFirst;
|
||||
$this->mockObjects[] = $this->Objects->TriggerMockSecond;
|
||||
|
||||
$subjectClass = new Object();
|
||||
$subjectClass = new CakeObject();
|
||||
$this->Objects->TriggerMockFirst->expects($this->once())
|
||||
->method('callback')
|
||||
->with('first argument')
|
||||
|
|
@ -592,4 +583,33 @@ class ObjectCollectionTest extends CakeTestCase {
|
|||
$this->assertTrue($this->Objects->trigger($event));
|
||||
}
|
||||
|
||||
/**
|
||||
* test that the various methods ignore plugin prefixes
|
||||
*
|
||||
* plugin prefixes should be removed consistently as load() will
|
||||
* remove them. Furthermore the __get() method does not support
|
||||
* names with '.' in them.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testPluginPrefixes() {
|
||||
$this->Objects->load('TestPlugin.First');
|
||||
$this->assertTrue($this->Objects->loaded('First'));
|
||||
$this->assertTrue($this->Objects->loaded('TestPlugin.First'));
|
||||
|
||||
$this->assertTrue($this->Objects->enabled('First'));
|
||||
$this->assertTrue($this->Objects->enabled('TestPlugin.First'));
|
||||
|
||||
$this->assertNull($this->Objects->disable('TestPlugin.First'));
|
||||
$this->assertFalse($this->Objects->enabled('First'));
|
||||
$this->assertFalse($this->Objects->enabled('TestPlugin.First'));
|
||||
|
||||
$this->assertNull($this->Objects->enable('TestPlugin.First'));
|
||||
$this->assertTrue($this->Objects->enabled('First'));
|
||||
$this->assertTrue($this->Objects->enabled('TestPlugin.First'));
|
||||
$this->Objects->setPriority('TestPlugin.First', 1000);
|
||||
|
||||
$result = $this->Objects->prioritize();
|
||||
$this->assertEquals(1000, $result['First'][0]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,20 +2,20 @@
|
|||
/**
|
||||
* SanitizeTest file
|
||||
*
|
||||
* PHP 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @since CakePHP(tm) v 1.2.0.5428
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('Sanitize', 'Utility');
|
||||
|
||||
/**
|
||||
|
|
@ -25,17 +25,10 @@ App::uses('Sanitize', 'Utility');
|
|||
*/
|
||||
class SanitizeDataTest extends CakeTestModel {
|
||||
|
||||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'SanitizeDataTest'
|
||||
*/
|
||||
public $name = 'SanitizeDataTest';
|
||||
|
||||
/**
|
||||
* useTable property
|
||||
*
|
||||
* @var string 'data_tests'
|
||||
* @var string
|
||||
*/
|
||||
public $useTable = 'data_tests';
|
||||
}
|
||||
|
|
@ -47,17 +40,10 @@ class SanitizeDataTest extends CakeTestModel {
|
|||
*/
|
||||
class SanitizeArticle extends CakeTestModel {
|
||||
|
||||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'Article'
|
||||
*/
|
||||
public $name = 'SanitizeArticle';
|
||||
|
||||
/**
|
||||
* useTable property
|
||||
*
|
||||
* @var string 'articles'
|
||||
* @var string
|
||||
*/
|
||||
public $useTable = 'articles';
|
||||
}
|
||||
|
|
@ -72,7 +58,7 @@ class SanitizeTest extends CakeTestCase {
|
|||
/**
|
||||
* autoFixtures property
|
||||
*
|
||||
* @var bool false
|
||||
* @var bool
|
||||
*/
|
||||
public $autoFixtures = false;
|
||||
|
||||
|
|
@ -168,7 +154,7 @@ class SanitizeTest extends CakeTestCase {
|
|||
$string = '';
|
||||
$expected = '';
|
||||
$result = Sanitize::clean($string, array('connection' => 'test'));
|
||||
$this->assertEquals($expected, $string);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$data = array(
|
||||
'Grant' => array(
|
||||
|
|
@ -283,12 +269,12 @@ class SanitizeTest extends CakeTestCase {
|
|||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = "x' AND 1=(SELECT COUNT(*) FROM users); --";
|
||||
$expected = "xAND1SELECTCOUNTFROMusers";
|
||||
$expected = 'xAND1SELECTCOUNTFROMusers';
|
||||
$result = Sanitize::paranoid($string);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$string = "x'; DROP TABLE members; --";
|
||||
$expected = "xDROPTABLEmembers";
|
||||
$expected = 'xDROPTABLEmembers';
|
||||
$result = Sanitize::paranoid($string);
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +1,18 @@
|
|||
<?php
|
||||
/**
|
||||
* SecurityTest file
|
||||
*
|
||||
* PHP 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @since CakePHP(tm) v 1.2.0.5432
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('Security', 'Utility');
|
||||
|
||||
/**
|
||||
|
|
@ -28,7 +25,7 @@ class SecurityTest extends CakeTestCase {
|
|||
/**
|
||||
* sut property
|
||||
*
|
||||
* @var mixed null
|
||||
* @var mixed
|
||||
*/
|
||||
public $sut = null;
|
||||
|
||||
|
|
@ -67,6 +64,45 @@ class SecurityTest extends CakeTestCase {
|
|||
$this->assertTrue(Security::validateAuthKey($authKey));
|
||||
}
|
||||
|
||||
/**
|
||||
* testHashInvalidSalt method
|
||||
*
|
||||
* @expectedException PHPUnit_Framework_Error
|
||||
* @return void
|
||||
*/
|
||||
public function testHashInvalidSalt() {
|
||||
Security::hash('someKey', 'blowfish', true);
|
||||
}
|
||||
|
||||
/**
|
||||
* testHashAnotherInvalidSalt
|
||||
*
|
||||
* @expectedException PHPUnit_Framework_Error
|
||||
* @return void
|
||||
*/
|
||||
public function testHashAnotherInvalidSalt() {
|
||||
Security::hash('someKey', 'blowfish', '$1$lksdjoijfaoijs');
|
||||
}
|
||||
|
||||
/**
|
||||
* testHashYetAnotherInvalidSalt
|
||||
*
|
||||
* @expectedException PHPUnit_Framework_Error
|
||||
* @return void
|
||||
*/
|
||||
public function testHashYetAnotherInvalidSalt() {
|
||||
Security::hash('someKey', 'blowfish', '$2a$10$123');
|
||||
}
|
||||
|
||||
/**
|
||||
* testHashInvalidCost method
|
||||
*
|
||||
* @expectedException PHPUnit_Framework_Error
|
||||
* @return void
|
||||
*/
|
||||
public function testHashInvalidCost() {
|
||||
Security::setCost(1000);
|
||||
}
|
||||
/**
|
||||
* testHash method
|
||||
*
|
||||
|
|
@ -78,10 +114,10 @@ class SecurityTest extends CakeTestCase {
|
|||
$key = 'someKey';
|
||||
$hash = 'someHash';
|
||||
|
||||
$this->assertSame(strlen(Security::hash($key, null, false)), 40);
|
||||
$this->assertSame(strlen(Security::hash($key, 'sha1', false)), 40);
|
||||
$this->assertSame(strlen(Security::hash($key, null, true)), 40);
|
||||
$this->assertSame(strlen(Security::hash($key, 'sha1', true)), 40);
|
||||
$this->assertSame(40, strlen(Security::hash($key, null, false)));
|
||||
$this->assertSame(40, strlen(Security::hash($key, 'sha1', false)));
|
||||
$this->assertSame(40, strlen(Security::hash($key, null, true)));
|
||||
$this->assertSame(40, strlen(Security::hash($key, 'sha1', true)));
|
||||
|
||||
$result = Security::hash($key, null, $hash);
|
||||
$this->assertSame($result, 'e38fcb877dccb6a94729a81523851c931a46efb1');
|
||||
|
|
@ -91,30 +127,94 @@ class SecurityTest extends CakeTestCase {
|
|||
|
||||
$hashType = 'sha1';
|
||||
Security::setHash($hashType);
|
||||
$this->assertSame(Security::$hashType, $hashType);
|
||||
$this->assertSame(strlen(Security::hash($key, null, true)), 40);
|
||||
$this->assertSame(strlen(Security::hash($key, null, false)), 40);
|
||||
$this->assertSame($hashType, Security::$hashType);
|
||||
$this->assertSame(40, strlen(Security::hash($key, null, true)));
|
||||
$this->assertSame(40, strlen(Security::hash($key, null, false)));
|
||||
|
||||
$this->assertSame(strlen(Security::hash($key, 'md5', false)), 32);
|
||||
$this->assertSame(strlen(Security::hash($key, 'md5', true)), 32);
|
||||
$this->assertSame(32, strlen(Security::hash($key, 'md5', false)));
|
||||
$this->assertSame(32, strlen(Security::hash($key, 'md5', true)));
|
||||
|
||||
$hashType = 'md5';
|
||||
Security::setHash($hashType);
|
||||
$this->assertSame(Security::$hashType, $hashType);
|
||||
$this->assertSame(strlen(Security::hash($key, null, false)), 32);
|
||||
$this->assertSame(strlen(Security::hash($key, null, true)), 32);
|
||||
$this->assertSame($hashType, Security::$hashType);
|
||||
$this->assertSame(32, strlen(Security::hash($key, null, false)));
|
||||
$this->assertSame(32, strlen(Security::hash($key, null, true)));
|
||||
|
||||
if (!function_exists('hash') && !function_exists('mhash')) {
|
||||
$this->assertSame(strlen(Security::hash($key, 'sha256', false)), 32);
|
||||
$this->assertSame(strlen(Security::hash($key, 'sha256', true)), 32);
|
||||
$this->assertSame(32, strlen(Security::hash($key, 'sha256', false)));
|
||||
$this->assertSame(32, strlen(Security::hash($key, 'sha256', true)));
|
||||
} else {
|
||||
$this->assertSame(strlen(Security::hash($key, 'sha256', false)), 64);
|
||||
$this->assertSame(strlen(Security::hash($key, 'sha256', true)), 64);
|
||||
$this->assertSame(64, strlen(Security::hash($key, 'sha256', false)));
|
||||
$this->assertSame(64, strlen(Security::hash($key, 'sha256', true)));
|
||||
}
|
||||
|
||||
Security::setHash($_hashType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that blowfish doesn't return '' when the salt is ''
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testHashBlowfishEmptySalt() {
|
||||
$test = Security::hash('password', 'blowfish');
|
||||
$this->skipIf(strpos($test, '$2a$') === false, 'Blowfish hashes are incorrect.');
|
||||
|
||||
$stored = '';
|
||||
$hash = Security::hash('anything', 'blowfish', $stored);
|
||||
$this->assertNotEquals($stored, $hash);
|
||||
|
||||
$hash = Security::hash('anything', 'blowfish', false);
|
||||
$this->assertNotEquals($stored, $hash);
|
||||
|
||||
$hash = Security::hash('anything', 'blowfish', null);
|
||||
$this->assertNotEquals($stored, $hash);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that hash() works with blowfish.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testHashBlowfish() {
|
||||
$test = Security::hash('password', 'blowfish');
|
||||
$this->skipIf(strpos($test, '$2a$') === false, 'Blowfish hashes are incorrect.');
|
||||
|
||||
Security::setCost(10);
|
||||
$_hashType = Security::$hashType;
|
||||
|
||||
$key = 'someKey';
|
||||
$hashType = 'blowfish';
|
||||
Security::setHash($hashType);
|
||||
|
||||
$this->assertSame($hashType, Security::$hashType);
|
||||
$this->assertSame(60, strlen(Security::hash($key, null, false)));
|
||||
|
||||
$password = $submittedPassword = $key;
|
||||
$storedPassword = Security::hash($password);
|
||||
|
||||
$hashedPassword = Security::hash($submittedPassword, null, $storedPassword);
|
||||
$this->assertSame($storedPassword, $hashedPassword);
|
||||
|
||||
$submittedPassword = 'someOtherKey';
|
||||
$hashedPassword = Security::hash($submittedPassword, null, $storedPassword);
|
||||
$this->assertNotSame($storedPassword, $hashedPassword);
|
||||
|
||||
$expected = sha1('customsaltsomevalue');
|
||||
$result = Security::hash('somevalue', 'sha1', 'customsalt');
|
||||
$this->assertSame($expected, $result);
|
||||
|
||||
$oldSalt = Configure::read('Security.salt');
|
||||
Configure::write('Security.salt', 'customsalt');
|
||||
|
||||
$expected = sha1('customsaltsomevalue');
|
||||
$result = Security::hash('somevalue', 'sha1', true);
|
||||
$this->assertSame($expected, $result);
|
||||
|
||||
Configure::write('Security.salt', $oldSalt);
|
||||
Security::setHash($_hashType);
|
||||
}
|
||||
|
||||
/**
|
||||
* testCipher method
|
||||
*
|
||||
|
|
@ -155,7 +255,7 @@ class SecurityTest extends CakeTestCase {
|
|||
public function testCipherEmptyKey() {
|
||||
$txt = 'some_text';
|
||||
$key = '';
|
||||
$result = Security::cipher($txt, $key);
|
||||
Security::cipher($txt, $key);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -164,6 +264,7 @@ class SecurityTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testRijndael() {
|
||||
$this->skipIf(!function_exists('mcrypt_encrypt'));
|
||||
$txt = 'The quick brown fox jumped over the lazy dog.';
|
||||
$key = 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi';
|
||||
|
||||
|
|
@ -176,10 +277,27 @@ class SecurityTest extends CakeTestCase {
|
|||
$result = Security::rijndael('', $key, 'encrypt');
|
||||
$this->assertEquals('', Security::rijndael($result, $key, 'decrypt'));
|
||||
|
||||
$result = Security::rijndael($txt, $key = 'this is my key of over 32 chars, yes it is', 'encrypt');
|
||||
$key = 'this is my key of over 32 chars, yes it is';
|
||||
$result = Security::rijndael($txt, $key, 'encrypt');
|
||||
$this->assertEquals($txt, Security::rijndael($result, $key, 'decrypt'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that rijndael() can still decrypt values with a fixed iv.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testRijndaelBackwardCompatibility() {
|
||||
$this->skipIf(!function_exists('mcrypt_encrypt'));
|
||||
|
||||
$txt = 'The quick brown fox jumped over the lazy dog.';
|
||||
$key = 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi';
|
||||
|
||||
// Encrypted before random iv
|
||||
$value = base64_decode('1WPjnq96LMzLGwNgmudHF+cAIqVUN5DaUZEpf5tm1EzSgt5iYY9o3d66iRI/fKJLTlTVGsa8HzW0jDNitmVXoQ==');
|
||||
$this->assertEquals($txt, Security::rijndael($value, $key, 'decrypt'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testRijndaelInvalidOperation method
|
||||
*
|
||||
|
|
@ -189,7 +307,7 @@ class SecurityTest extends CakeTestCase {
|
|||
public function testRijndaelInvalidOperation() {
|
||||
$txt = 'The quick brown fox jumped over the lazy dog.';
|
||||
$key = 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi';
|
||||
$result = Security::rijndael($txt, $key, 'foo');
|
||||
Security::rijndael($txt, $key, 'foo');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -201,7 +319,146 @@ class SecurityTest extends CakeTestCase {
|
|||
public function testRijndaelInvalidKey() {
|
||||
$txt = 'The quick brown fox jumped over the lazy dog.';
|
||||
$key = 'too small';
|
||||
$result = Security::rijndael($txt, $key, 'encrypt');
|
||||
Security::rijndael($txt, $key, 'encrypt');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test encrypt/decrypt.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testEncryptDecrypt() {
|
||||
$this->skipIf(!extension_loaded('mcrypt'), 'This test requires mcrypt to be installed');
|
||||
$txt = 'The quick brown fox';
|
||||
$key = 'This key is longer than 32 bytes long.';
|
||||
$result = Security::encrypt($txt, $key);
|
||||
$this->assertNotEquals($txt, $result, 'Should be encrypted.');
|
||||
$this->assertNotEquals($result, Security::encrypt($txt, $key), 'Each result is unique.');
|
||||
$this->assertEquals($txt, Security::decrypt($result, $key));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that changing the key causes decryption to fail.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDecryptKeyFailure() {
|
||||
$this->skipIf(!extension_loaded('mcrypt'), 'This test requires mcrypt to be installed');
|
||||
$txt = 'The quick brown fox';
|
||||
$key = 'This key is longer than 32 bytes long.';
|
||||
Security::encrypt($txt, $key);
|
||||
|
||||
$key = 'Not the same key. This one will fail';
|
||||
$this->assertFalse(Security::decrypt($txt, $key), 'Modified key will fail.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that decrypt fails when there is an hmac error.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDecryptHmacFailure() {
|
||||
$this->skipIf(!extension_loaded('mcrypt'), 'This test requires mcrypt to be installed');
|
||||
$txt = 'The quick brown fox';
|
||||
$key = 'This key is quite long and works well.';
|
||||
$salt = 'this is a delicious salt!';
|
||||
$result = Security::encrypt($txt, $key, $salt);
|
||||
|
||||
// Change one of the bytes in the hmac.
|
||||
$result[10] = 'x';
|
||||
$this->assertFalse(Security::decrypt($result, $key, $salt), 'Modified hmac causes failure.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that changing the hmac salt will cause failures.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDecryptHmacSaltFailure() {
|
||||
$this->skipIf(!extension_loaded('mcrypt'), 'This test requires mcrypt to be installed');
|
||||
$txt = 'The quick brown fox';
|
||||
$key = 'This key is quite long and works well.';
|
||||
$salt = 'this is a delicious salt!';
|
||||
$result = Security::encrypt($txt, $key, $salt);
|
||||
|
||||
$salt = 'humpty dumpty had a great fall.';
|
||||
$this->assertFalse(Security::decrypt($result, $key, $salt), 'Modified salt causes failure.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that short keys cause errors
|
||||
*
|
||||
* @expectedException CakeException
|
||||
* @expectedExceptionMessage Invalid key for encrypt(), key must be at least 256 bits (32 bytes) long.
|
||||
* @return void
|
||||
*/
|
||||
public function testEncryptInvalidKey() {
|
||||
$txt = 'The quick brown fox jumped over the lazy dog.';
|
||||
$key = 'this is too short';
|
||||
Security::encrypt($txt, $key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test encrypting falsey data
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testEncryptDecryptFalseyData() {
|
||||
$this->skipIf(!extension_loaded('mcrypt'), 'This test requires mcrypt to be installed');
|
||||
$key = 'This is a key that is long enough to be ok.';
|
||||
|
||||
$result = Security::encrypt('', $key);
|
||||
$this->assertSame('', Security::decrypt($result, $key));
|
||||
|
||||
$result = Security::encrypt(false, $key);
|
||||
$this->assertSame('', Security::decrypt($result, $key));
|
||||
|
||||
$result = Security::encrypt(null, $key);
|
||||
$this->assertSame('', Security::decrypt($result, $key));
|
||||
|
||||
$result = Security::encrypt(0, $key);
|
||||
$this->assertSame('0', Security::decrypt($result, $key));
|
||||
|
||||
$result = Security::encrypt('0', $key);
|
||||
$this->assertSame('0', Security::decrypt($result, $key));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that short keys cause errors
|
||||
*
|
||||
* @expectedException CakeException
|
||||
* @expectedExceptionMessage Invalid key for decrypt(), key must be at least 256 bits (32 bytes) long.
|
||||
* @return void
|
||||
*/
|
||||
public function testDecryptInvalidKey() {
|
||||
$txt = 'The quick brown fox jumped over the lazy dog.';
|
||||
$key = 'this is too short';
|
||||
Security::decrypt($txt, $key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that empty data cause errors
|
||||
*
|
||||
* @expectedException CakeException
|
||||
* @expectedExceptionMessage The data to decrypt cannot be empty.
|
||||
* @return void
|
||||
*/
|
||||
public function testDecryptInvalidData() {
|
||||
$txt = '';
|
||||
$key = 'This is a key that is long enough to be ok.';
|
||||
Security::decrypt($txt, $key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the random method.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testRandomBytes() {
|
||||
$value = Security::randomBytes(16);
|
||||
$this->assertSame(16, strlen($value));
|
||||
|
||||
$value = Security::randomBytes(64);
|
||||
$this->assertSame(64, strlen($value));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,20 +2,20 @@
|
|||
/**
|
||||
* SetTest file
|
||||
*
|
||||
* PHP 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('Set', 'Utility');
|
||||
App::uses('Model', 'Model');
|
||||
|
||||
|
|
@ -182,7 +182,7 @@ class SetTest extends CakeTestCase {
|
|||
$expected = array('users' => array('lisa' => array('id' => 5, 'pw' => 'you-will-never-guess', 'age' => 25, 'pet' => 'dog')), 'cakephp', 'ice-cream', 'chocolate');
|
||||
$this->assertEquals($expected, Set::merge($a, $b, $c));
|
||||
|
||||
$this->assertEquals(Set::merge($a, $b, array(), $c), $expected);
|
||||
$this->assertEquals($expected, Set::merge($a, $b, array(), $c));
|
||||
|
||||
$r = Set::merge($a, $b, $c);
|
||||
$this->assertEquals($expected, $r);
|
||||
|
|
@ -230,10 +230,10 @@ class SetTest extends CakeTestCase {
|
|||
|
||||
$a = array(
|
||||
0 => array('Person' => array('name' => 'Jeff'), 'Friend' => array(array('name' => 'Nate'))),
|
||||
1 => array('Person' => array('name' => 'Tracy'),'Friend' => array(array('name' => 'Lindsay')))
|
||||
1 => array('Person' => array('name' => 'Tracy'), 'Friend' => array(array('name' => 'Lindsay')))
|
||||
);
|
||||
$b = array(
|
||||
0 => array('Person' => array('name' => 'Tracy'),'Friend' => array(array('name' => 'Lindsay'))),
|
||||
0 => array('Person' => array('name' => 'Tracy'), 'Friend' => array(array('name' => 'Lindsay'))),
|
||||
1 => array('Person' => array('name' => 'Jeff'), 'Friend' => array(array('name' => 'Nate')))
|
||||
|
||||
);
|
||||
|
|
@ -242,10 +242,10 @@ class SetTest extends CakeTestCase {
|
|||
|
||||
$b = array(
|
||||
0 => array('Person' => array('name' => 'Jeff'), 'Friend' => array(array('name' => 'Nate'))),
|
||||
1 => array('Person' => array('name' => 'Tracy'),'Friend' => array(array('name' => 'Lindsay')))
|
||||
1 => array('Person' => array('name' => 'Tracy'), 'Friend' => array(array('name' => 'Lindsay')))
|
||||
);
|
||||
$a = array(
|
||||
0 => array('Person' => array('name' => 'Tracy'),'Friend' => array(array('name' => 'Lindsay'))),
|
||||
0 => array('Person' => array('name' => 'Tracy'), 'Friend' => array(array('name' => 'Lindsay'))),
|
||||
1 => array('Person' => array('name' => 'Jeff'), 'Friend' => array(array('name' => 'Nate')))
|
||||
|
||||
);
|
||||
|
|
@ -254,42 +254,42 @@ class SetTest extends CakeTestCase {
|
|||
|
||||
$a = array(
|
||||
0 => array('Person' => array('name' => 'Jeff'), 'Friend' => array(array('name' => 'Nate'))),
|
||||
1 => array('Person' => array('name' => 'Tracy'),'Friend' => array(array('name' => 'Lindsay'))),
|
||||
2 => array('Person' => array('name' => 'Adam'),'Friend' => array(array('name' => 'Bob')))
|
||||
1 => array('Person' => array('name' => 'Tracy'), 'Friend' => array(array('name' => 'Lindsay'))),
|
||||
2 => array('Person' => array('name' => 'Adam'), 'Friend' => array(array('name' => 'Bob')))
|
||||
);
|
||||
$b = array(
|
||||
0 => array('Person' => array('name' => 'Adam'),'Friend' => array(array('name' => 'Bob'))),
|
||||
0 => array('Person' => array('name' => 'Adam'), 'Friend' => array(array('name' => 'Bob'))),
|
||||
1 => array('Person' => array('name' => 'Jeff'), 'Friend' => array(array('name' => 'Nate'))),
|
||||
2 => array('Person' => array('name' => 'Tracy'),'Friend' => array(array('name' => 'Lindsay')))
|
||||
2 => array('Person' => array('name' => 'Tracy'), 'Friend' => array(array('name' => 'Lindsay')))
|
||||
);
|
||||
$a = Set::sort($a, '{n}.Person.name', 'asc');
|
||||
$this->assertEquals($a, $b);
|
||||
|
||||
$a = array(
|
||||
array(7,6,4),
|
||||
array(3,4,5),
|
||||
array(3,2,1),
|
||||
array(7, 6, 4),
|
||||
array(3, 4, 5),
|
||||
array(3, 2, 1),
|
||||
);
|
||||
|
||||
$b = array(
|
||||
array(3,2,1),
|
||||
array(3,4,5),
|
||||
array(7,6,4),
|
||||
array(3, 2, 1),
|
||||
array(3, 4, 5),
|
||||
array(7, 6, 4),
|
||||
);
|
||||
|
||||
$a = Set::sort($a, '{n}.{n}', 'asc');
|
||||
$this->assertEquals($a, $b);
|
||||
|
||||
$a = array(
|
||||
array(7,6,4),
|
||||
array(3,4,5),
|
||||
array(3,2,array(1,1,1)),
|
||||
array(7, 6, 4),
|
||||
array(3, 4, 5),
|
||||
array(3, 2, array(1, 1, 1)),
|
||||
);
|
||||
|
||||
$b = array(
|
||||
array(3,2,array(1,1,1)),
|
||||
array(3,4,5),
|
||||
array(7,6,4),
|
||||
array(3, 2, array(1, 1, 1)),
|
||||
array(3, 4, 5),
|
||||
array(7, 6, 4),
|
||||
);
|
||||
|
||||
$a = Set::sort($a, '{n}', 'asc');
|
||||
|
|
@ -878,11 +878,11 @@ class SetTest extends CakeTestCase {
|
|||
)
|
||||
)
|
||||
);
|
||||
$expected = array(array('name' => 'zipfile2.zip','type' => 'application/x-zip-compressed','tmp_name' => '/tmp/php179.tmp','error' => 0,'size' => '354784'));
|
||||
$expected = array(array('name' => 'zipfile2.zip', 'type' => 'application/x-zip-compressed', 'tmp_name' => '/tmp/php179.tmp', 'error' => 0, 'size' => '354784'));
|
||||
$r = Set::extract('/file/.[type=application/x-zip-compressed]', $f);
|
||||
$this->assertEquals($expected, $r);
|
||||
|
||||
$expected = array(array('name' => 'zipfile.zip','type' => 'application/zip','tmp_name' => '/tmp/php178.tmp','error' => 0,'size' => '564647'));
|
||||
$expected = array(array('name' => 'zipfile.zip', 'type' => 'application/zip', 'tmp_name' => '/tmp/php178.tmp', 'error' => 0, 'size' => '564647'));
|
||||
$r = Set::extract('/file/.[type=application/zip]', $f);
|
||||
$this->assertEquals($expected, $r);
|
||||
|
||||
|
|
@ -915,13 +915,13 @@ class SetTest extends CakeTestCase {
|
|||
)
|
||||
)
|
||||
);
|
||||
$expected = array(array('name' => 'zipfile2.zip','type' => 'application/x zip compressed','tmp_name' => '/tmp/php179.tmp','error' => 0,'size' => '354784'));
|
||||
$expected = array(array('name' => 'zipfile2.zip', 'type' => 'application/x zip compressed', 'tmp_name' => '/tmp/php179.tmp', 'error' => 0, 'size' => '354784'));
|
||||
$r = Set::extract('/file/.[type=application/x zip compressed]', $f);
|
||||
$this->assertEquals($expected, $r);
|
||||
|
||||
$expected = array(
|
||||
array('name' => 'zipfile.zip','type' => 'application/zip','tmp_name' => '/tmp/php178.tmp','error' => 0,'size' => '564647'),
|
||||
array('name' => 'zipfile2.zip','type' => 'application/x zip compressed','tmp_name' => '/tmp/php179.tmp','error' => 0,'size' => '354784')
|
||||
array('name' => 'zipfile.zip', 'type' => 'application/zip', 'tmp_name' => '/tmp/php178.tmp', 'error' => 0, 'size' => '564647'),
|
||||
array('name' => 'zipfile2.zip', 'type' => 'application/x zip compressed', 'tmp_name' => '/tmp/php179.tmp', 'error' => 0, 'size' => '354784')
|
||||
);
|
||||
$r = Set::extract('/file/.[tmp_name=/tmp\/php17/]', $f);
|
||||
$this->assertEquals($expected, $r);
|
||||
|
|
@ -1108,7 +1108,7 @@ class SetTest extends CakeTestCase {
|
|||
)
|
||||
);
|
||||
|
||||
$expected = array(7,2,1);
|
||||
$expected = array(7, 2, 1);
|
||||
$r = Set::extract('/CallType[name=Internal Voice]/../x/hour', $multiple);
|
||||
$this->assertEquals($expected, $r);
|
||||
|
||||
|
|
@ -1221,21 +1221,21 @@ class SetTest extends CakeTestCase {
|
|||
|
||||
$nonSequential = array(
|
||||
'User' => array(
|
||||
0 => array('id' => 1),
|
||||
2 => array('id' => 2),
|
||||
6 => array('id' => 3),
|
||||
9 => array('id' => 4),
|
||||
3 => array('id' => 5),
|
||||
0 => array('id' => 1),
|
||||
2 => array('id' => 2),
|
||||
6 => array('id' => 3),
|
||||
9 => array('id' => 4),
|
||||
3 => array('id' => 5),
|
||||
),
|
||||
);
|
||||
|
||||
$nonZero = array(
|
||||
'User' => array(
|
||||
2 => array('id' => 1),
|
||||
4 => array('id' => 2),
|
||||
6 => array('id' => 3),
|
||||
9 => array('id' => 4),
|
||||
3 => array('id' => 5),
|
||||
2 => array('id' => 1),
|
||||
4 => array('id' => 2),
|
||||
6 => array('id' => 3),
|
||||
9 => array('id' => 4),
|
||||
3 => array('id' => 5),
|
||||
),
|
||||
);
|
||||
|
||||
|
|
@ -1352,6 +1352,8 @@ class SetTest extends CakeTestCase {
|
|||
|
||||
/**
|
||||
* Test that extract() + matching can hit null things.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testExtractMatchesNull() {
|
||||
$data = array(
|
||||
|
|
@ -1558,7 +1560,7 @@ class SetTest extends CakeTestCase {
|
|||
0 => array('name' => 'zero')
|
||||
);
|
||||
$result = Set::extract($a, '{s}.name');
|
||||
$expected = array('page','fruit');
|
||||
$expected = array('page', 'fruit');
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$a = array(
|
||||
|
|
@ -1693,7 +1695,7 @@ class SetTest extends CakeTestCase {
|
|||
|
||||
$result = Set::remove($a, 'files');
|
||||
$expected = array(
|
||||
'pages' => array('name' => 'page')
|
||||
'pages' => array('name' => 'page')
|
||||
);
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
|
@ -1733,7 +1735,7 @@ class SetTest extends CakeTestCase {
|
|||
$this->assertFalse(Set::check($set, 'Session Test'));
|
||||
|
||||
$expected = array('Session Test' => array('Test Case' => 'test'));
|
||||
$this->assertEquals(Set::insert(array(), 'Session Test.Test Case', "test"), $expected);
|
||||
$this->assertEquals($expected, Set::insert(array(), 'Session Test.Test Case', "test"));
|
||||
$this->assertTrue(Set::check($expected, 'Session Test.Test Case'));
|
||||
}
|
||||
|
||||
|
|
@ -1854,11 +1856,11 @@ class SetTest extends CakeTestCase {
|
|||
|
||||
$a = array(
|
||||
array('User' => array('id' => 2, 'group_id' => 1,
|
||||
'Data' => array('user' => 'mariano.iglesias','name' => 'Mariano Iglesias'))),
|
||||
'Data' => array('user' => 'mariano.iglesias', 'name' => 'Mariano Iglesias'))),
|
||||
array('User' => array('id' => 14, 'group_id' => 2,
|
||||
'Data' => array('user' => 'phpnut', 'name' => 'Larry E. Masters'))),
|
||||
array('User' => array('id' => 25, 'group_id' => 1,
|
||||
'Data' => array('user' => 'gwoo','name' => 'The Gwoo'))));
|
||||
'Data' => array('user' => 'gwoo', 'name' => 'The Gwoo'))));
|
||||
$result = Set::combine($a, '{n}.User.id');
|
||||
$expected = array(2 => null, 14 => null, 25 => null);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
|
@ -1869,9 +1871,9 @@ class SetTest extends CakeTestCase {
|
|||
|
||||
$result = Set::combine($a, '{n}.User.id', '{n}.User.Data');
|
||||
$expected = array(
|
||||
2 => array('user' => 'mariano.iglesias', 'name' => 'Mariano Iglesias'),
|
||||
14 => array('user' => 'phpnut', 'name' => 'Larry E. Masters'),
|
||||
25 => array('user' => 'gwoo', 'name' => 'The Gwoo'));
|
||||
2 => array('user' => 'mariano.iglesias', 'name' => 'Mariano Iglesias'),
|
||||
14 => array('user' => 'phpnut', 'name' => 'Larry E. Masters'),
|
||||
25 => array('user' => 'gwoo', 'name' => 'The Gwoo'));
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$result = Set::combine($a, '{n}.User.id', '{n}.User.Data.name');
|
||||
|
|
@ -1959,11 +1961,11 @@ class SetTest extends CakeTestCase {
|
|||
$b = new stdClass();
|
||||
$b->users = array(
|
||||
array('User' => array('id' => 2, 'group_id' => 1,
|
||||
'Data' => array('user' => 'mariano.iglesias','name' => 'Mariano Iglesias'))),
|
||||
'Data' => array('user' => 'mariano.iglesias', 'name' => 'Mariano Iglesias'))),
|
||||
array('User' => array('id' => 14, 'group_id' => 2,
|
||||
'Data' => array('user' => 'phpnut', 'name' => 'Larry E. Masters'))),
|
||||
array('User' => array('id' => 25, 'group_id' => 1,
|
||||
'Data' => array('user' => 'gwoo','name' => 'The Gwoo'))));
|
||||
'Data' => array('user' => 'gwoo', 'name' => 'The Gwoo'))));
|
||||
$result = Set::combine($b, 'users.{n}.User.id');
|
||||
$expected = array(2 => null, 14 => null, 25 => null);
|
||||
$this->assertEquals($expected, $result);
|
||||
|
|
@ -2030,7 +2032,7 @@ class SetTest extends CakeTestCase {
|
|||
|
||||
$expected = array(
|
||||
'Array1' => array(
|
||||
'Array1Data1' => 'Array1Data1 value 1', 'Array1Data2' => 'Array1Data2 value 2', 'Array1Data3' => 'Array1Data3 value 3','Array1Data4' => 'Array1Data4 value 4',
|
||||
'Array1Data1' => 'Array1Data1 value 1', 'Array1Data2' => 'Array1Data2 value 2', 'Array1Data3' => 'Array1Data3 value 3', 'Array1Data4' => 'Array1Data4 value 4',
|
||||
'Array1Data5' => 'Array1Data5 value 5', 'Array1Data6' => 'Array1Data6 value 6', 'Array1Data7' => 'Array1Data7 value 7', 'Array1Data8' => 'Array1Data8 value 8'),
|
||||
'string' => 1,
|
||||
'another' => 'string',
|
||||
|
|
@ -2053,7 +2055,7 @@ class SetTest extends CakeTestCase {
|
|||
|
||||
$expected = array(
|
||||
'Array1' => array(
|
||||
'Array1Data1' => 'Array1Data1 value 1', 'Array1Data2' => 'Array1Data2 value 2', 'Array1Data3' => 'Array1Data3 value 3','Array1Data4' => 'Array1Data4 value 4',
|
||||
'Array1Data1' => 'Array1Data1 value 1', 'Array1Data2' => 'Array1Data2 value 2', 'Array1Data3' => 'Array1Data3 value 3', 'Array1Data4' => 'Array1Data4 value 4',
|
||||
'Array1Data5' => 'Array1Data5 value 5', 'Array1Data6' => 'Array1Data6 value 6', 'Array1Data7' => 'Array1Data7 value 7', 'Array1Data8' => 'Array1Data8 value 8'),
|
||||
'string' => 1,
|
||||
'another' => 'string',
|
||||
|
|
@ -2355,7 +2357,7 @@ class SetTest extends CakeTestCase {
|
|||
'Content-Length' => "50210",
|
||||
),
|
||||
'meta' => array(
|
||||
'keywords' => array('testing','tests'),
|
||||
'keywords' => array('testing', 'tests'),
|
||||
'description' => 'describe me',
|
||||
),
|
||||
'get_vars' => '',
|
||||
|
|
@ -2382,7 +2384,7 @@ class SetTest extends CakeTestCase {
|
|||
'Content-Length' => "50210",
|
||||
),
|
||||
'meta' => array(
|
||||
'keywords' => array('testing','tests'),
|
||||
'keywords' => array('testing', 'tests'),
|
||||
'description' => 'describe me',
|
||||
),
|
||||
'get_vars' => '',
|
||||
|
|
@ -2441,8 +2443,8 @@ class SetTest extends CakeTestCase {
|
|||
$expected->hash = '68a9f053b19526d08e36c6a9ad150737933816a5';
|
||||
$expected->get_vars = '';
|
||||
$expected->redirect = '';
|
||||
$expected->created = "1195055503";
|
||||
$expected->updated = "1195055503";
|
||||
$expected->created = '1195055503';
|
||||
$expected->updated = '1195055503';
|
||||
// @codingStandardsIgnoreEnd
|
||||
$this->assertEquals($expected, $mapped[1]);
|
||||
|
||||
|
|
@ -2468,8 +2470,8 @@ class SetTest extends CakeTestCase {
|
|||
array(
|
||||
'Post' => array('id' => '1', 'author_id' => '1', 'title' => 'First Post', 'body' => 'First Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:39:23', 'updated' => '2007-03-18 10:41:31'),
|
||||
'Author' => array('id' => '1', 'user' => 'mariano', 'password' => '5f4dcc3b5aa765d61d8327deb882cf99', 'created' => '2007-03-17 01:16:23', 'updated' => '2007-03-17 01:18:31', 'test' => 'working'),
|
||||
)
|
||||
, array(
|
||||
),
|
||||
array(
|
||||
'Post' => array('id' => '2', 'author_id' => '3', 'title' => 'Second Post', 'body' => 'Second Post Body', 'published' => 'Y', 'created' => '2007-03-18 10:41:23', 'updated' => '2007-03-18 10:43:31'),
|
||||
'Author' => array('id' => '3', 'user' => 'larry', 'password' => '5f4dcc3b5aa765d61d8327deb882cf99', 'created' => '2007-03-17 01:20:23', 'updated' => '2007-03-17 01:22:31', 'test' => 'working'),
|
||||
)
|
||||
|
|
@ -2490,9 +2492,9 @@ class SetTest extends CakeTestCase {
|
|||
$expected->Author->id = '1';
|
||||
$expected->Author->user = 'mariano';
|
||||
$expected->Author->password = '5f4dcc3b5aa765d61d8327deb882cf99';
|
||||
$expected->Author->created = "2007-03-17 01:16:23";
|
||||
$expected->Author->updated = "2007-03-17 01:18:31";
|
||||
$expected->Author->test = "working";
|
||||
$expected->Author->created = '2007-03-17 01:16:23';
|
||||
$expected->Author->updated = '2007-03-17 01:18:31';
|
||||
$expected->Author->test = 'working';
|
||||
$expected->Author->_name_ = 'Author';
|
||||
|
||||
$expected2 = new stdClass;
|
||||
|
|
@ -2509,9 +2511,9 @@ class SetTest extends CakeTestCase {
|
|||
$expected2->Author->id = '3';
|
||||
$expected2->Author->user = 'larry';
|
||||
$expected2->Author->password = '5f4dcc3b5aa765d61d8327deb882cf99';
|
||||
$expected2->Author->created = "2007-03-17 01:20:23";
|
||||
$expected2->Author->updated = "2007-03-17 01:22:31";
|
||||
$expected2->Author->test = "working";
|
||||
$expected2->Author->created = '2007-03-17 01:20:23';
|
||||
$expected2->Author->updated = '2007-03-17 01:22:31';
|
||||
$expected2->Author->test = 'working';
|
||||
$expected2->Author->_name_ = 'Author';
|
||||
// @codingStandardsIgnoreEnd
|
||||
|
||||
|
|
@ -2544,7 +2546,7 @@ class SetTest extends CakeTestCase {
|
|||
$expected->Author->password = '5f4dcc3b5aa765d61d8327deb882cf99';
|
||||
$expected->Author->created = "2007-03-17 01:16:23";
|
||||
$expected->Author->updated = "2007-03-17 01:18:31";
|
||||
$expected->Author->test = "working";
|
||||
$expected->Author->test = 'working';
|
||||
$expected->Author->_name_ = 'Author';
|
||||
// @codingStandardsIgnoreEnd
|
||||
$this->assertEquals($expected, $result);
|
||||
|
|
@ -2761,7 +2763,6 @@ class SetTest extends CakeTestCase {
|
|||
/**
|
||||
* testSetApply method
|
||||
* @return void
|
||||
*
|
||||
*/
|
||||
public function testApply() {
|
||||
$data = array(
|
||||
|
|
|
|||
|
|
@ -2,20 +2,20 @@
|
|||
/**
|
||||
* ValidationTest file
|
||||
*
|
||||
* PHP Version 5.x
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The Open Group Test Suite License
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @since CakePHP(tm) v 1.2.0.4206
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('Validation', 'Utility');
|
||||
|
||||
/**
|
||||
|
|
@ -28,8 +28,8 @@ class CustomValidator {
|
|||
/**
|
||||
* Makes sure that a given $email address is valid and unique
|
||||
*
|
||||
* @param string $email
|
||||
* @return boolean
|
||||
* @param string $check Email to check.
|
||||
* @return bool
|
||||
*/
|
||||
public static function customValidate($check) {
|
||||
return (bool)preg_match('/^[0-9]{3}$/', $check);
|
||||
|
|
@ -88,6 +88,25 @@ class TestDeValidation {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* ValidationStub
|
||||
*
|
||||
* @package Cake.Test.Case.Utility
|
||||
*/
|
||||
class ValidationStub extends Validation {
|
||||
|
||||
/**
|
||||
* Stub out is_uploaded_file check
|
||||
*
|
||||
* @param string $path
|
||||
* @return void
|
||||
*/
|
||||
protected static function _isUploadedFile($path) {
|
||||
return file_exists($path);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Case for Validation Class
|
||||
*
|
||||
|
|
@ -124,37 +143,37 @@ class ValidationTest extends CakeTestCase {
|
|||
}
|
||||
|
||||
/**
|
||||
* testNotEmpty method
|
||||
* Test notBlank method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testNotEmpty() {
|
||||
$this->assertTrue(Validation::notEmpty('abcdefg'));
|
||||
$this->assertTrue(Validation::notEmpty('fasdf '));
|
||||
$this->assertTrue(Validation::notEmpty('fooo' . chr(243) . 'blabla'));
|
||||
$this->assertTrue(Validation::notEmpty('abçďĕʑʘπй'));
|
||||
$this->assertTrue(Validation::notEmpty('José'));
|
||||
$this->assertTrue(Validation::notEmpty('é'));
|
||||
$this->assertTrue(Validation::notEmpty('π'));
|
||||
$this->assertFalse(Validation::notEmpty("\t "));
|
||||
$this->assertFalse(Validation::notEmpty(""));
|
||||
public function testNotBlank() {
|
||||
$this->assertTrue(Validation::notBlank('abcdefg'));
|
||||
$this->assertTrue(Validation::notBlank('fasdf '));
|
||||
$this->assertTrue(Validation::notBlank('fooo' . chr(243) . 'blabla'));
|
||||
$this->assertTrue(Validation::notBlank('abçďĕʑʘπй'));
|
||||
$this->assertTrue(Validation::notBlank('José'));
|
||||
$this->assertTrue(Validation::notBlank('é'));
|
||||
$this->assertTrue(Validation::notBlank('π'));
|
||||
$this->assertFalse(Validation::notBlank("\t "));
|
||||
$this->assertFalse(Validation::notBlank(""));
|
||||
}
|
||||
|
||||
/**
|
||||
* testNotEmptyISO88591Encoding method
|
||||
* Test notBlank method with ISO88591 encoding
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testNotEmptyISO88591AppEncoding() {
|
||||
public function testNotBlankISO88591AppEncoding() {
|
||||
Configure::write('App.encoding', 'ISO-8859-1');
|
||||
$this->assertTrue(Validation::notEmpty('abcdefg'));
|
||||
$this->assertTrue(Validation::notEmpty('fasdf '));
|
||||
$this->assertTrue(Validation::notEmpty('fooo' . chr(243) . 'blabla'));
|
||||
$this->assertTrue(Validation::notEmpty('abçďĕʑʘπй'));
|
||||
$this->assertTrue(Validation::notEmpty('José'));
|
||||
$this->assertTrue(Validation::notEmpty(utf8_decode('José')));
|
||||
$this->assertFalse(Validation::notEmpty("\t "));
|
||||
$this->assertFalse(Validation::notEmpty(""));
|
||||
$this->assertTrue(Validation::notBlank('abcdefg'));
|
||||
$this->assertTrue(Validation::notBlank('fasdf '));
|
||||
$this->assertTrue(Validation::notBlank('fooo' . chr(243) . 'blabla'));
|
||||
$this->assertTrue(Validation::notBlank('abçďĕʑʘπй'));
|
||||
$this->assertTrue(Validation::notBlank('José'));
|
||||
$this->assertTrue(Validation::notBlank(utf8_decode('José')));
|
||||
$this->assertFalse(Validation::notBlank("\t "));
|
||||
$this->assertFalse(Validation::notBlank(""));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -175,6 +194,7 @@ class ValidationTest extends CakeTestCase {
|
|||
|
||||
$this->assertFalse(Validation::alphaNumeric('12 234'));
|
||||
$this->assertFalse(Validation::alphaNumeric('dfd 234'));
|
||||
$this->assertFalse(Validation::alphaNumeric("0\n"));
|
||||
$this->assertFalse(Validation::alphaNumeric("\n"));
|
||||
$this->assertFalse(Validation::alphaNumeric("\t"));
|
||||
$this->assertFalse(Validation::alphaNumeric("\r"));
|
||||
|
|
@ -183,36 +203,17 @@ class ValidationTest extends CakeTestCase {
|
|||
}
|
||||
|
||||
/**
|
||||
* testAlphaNumericPassedAsArray method
|
||||
* testLengthBetween method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testAlphaNumericPassedAsArray() {
|
||||
$this->assertTrue(Validation::alphaNumeric(array('check' => 'frferrf')));
|
||||
$this->assertTrue(Validation::alphaNumeric(array('check' => '12234')));
|
||||
$this->assertTrue(Validation::alphaNumeric(array('check' => '1w2e2r3t4y')));
|
||||
$this->assertTrue(Validation::alphaNumeric(array('check' => '0')));
|
||||
$this->assertFalse(Validation::alphaNumeric(array('check' => '12 234')));
|
||||
$this->assertFalse(Validation::alphaNumeric(array('check' => 'dfd 234')));
|
||||
$this->assertFalse(Validation::alphaNumeric(array('check' => "\n")));
|
||||
$this->assertFalse(Validation::alphaNumeric(array('check' => "\t")));
|
||||
$this->assertFalse(Validation::alphaNumeric(array('check' => "\r")));
|
||||
$this->assertFalse(Validation::alphaNumeric(array('check' => ' ')));
|
||||
$this->assertFalse(Validation::alphaNumeric(array('check' => '')));
|
||||
}
|
||||
public function testLengthBetween() {
|
||||
$this->assertTrue(Validation::lengthBetween('abcdefg', 1, 7));
|
||||
$this->assertTrue(Validation::lengthBetween('', 0, 7));
|
||||
$this->assertTrue(Validation::lengthBetween('אกあアꀀ豈', 1, 7));
|
||||
|
||||
/**
|
||||
* testBetween method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testBetween() {
|
||||
$this->assertTrue(Validation::between('abcdefg', 1, 7));
|
||||
$this->assertTrue(Validation::between('', 0, 7));
|
||||
$this->assertTrue(Validation::between('אกあアꀀ豈', 1, 7));
|
||||
|
||||
$this->assertFalse(Validation::between('abcdefg', 1, 6));
|
||||
$this->assertFalse(Validation::between('ÆΔΩЖÇ', 1, 3));
|
||||
$this->assertFalse(Validation::lengthBetween('abcdefg', 1, 6));
|
||||
$this->assertFalse(Validation::lengthBetween('ÆΔΩЖÇ', 1, 3));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -230,21 +231,6 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::blank('Blank'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testBlankAsArray method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testBlankAsArray() {
|
||||
$this->assertTrue(Validation::blank(array('check' => '')));
|
||||
$this->assertTrue(Validation::blank(array('check' => ' ')));
|
||||
$this->assertTrue(Validation::blank(array('check' => "\n")));
|
||||
$this->assertTrue(Validation::blank(array('check' => "\t")));
|
||||
$this->assertTrue(Validation::blank(array('check' => "\r")));
|
||||
$this->assertFalse(Validation::blank(array('check' => ' Blank')));
|
||||
$this->assertFalse(Validation::blank(array('check' => 'Blank')));
|
||||
}
|
||||
|
||||
/**
|
||||
* testcc method
|
||||
*
|
||||
|
|
@ -417,6 +403,12 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertTrue(Validation::cc('5467639122779531', array('mc')));
|
||||
$this->assertTrue(Validation::cc('5297350261550024', array('mc')));
|
||||
$this->assertTrue(Validation::cc('5162739131368058', array('mc')));
|
||||
//Mastercard (additional 2016 BIN)
|
||||
$this->assertTrue(Validation::cc('2221000000000009', array('mc')));
|
||||
$this->assertTrue(Validation::cc('2720999999999996', array('mc')));
|
||||
$this->assertTrue(Validation::cc('2223000010005798', array('mc')));
|
||||
$this->assertTrue(Validation::cc('2623430710235708', array('mc')));
|
||||
$this->assertTrue(Validation::cc('2420452519835723', array('mc')));
|
||||
//Solo 16
|
||||
$this->assertTrue(Validation::cc('6767432107064987', array('solo')));
|
||||
$this->assertTrue(Validation::cc('6334667758225411', array('solo')));
|
||||
|
|
@ -929,42 +921,25 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::comparison(7, '==', 6));
|
||||
$this->assertFalse(Validation::comparison(7, 'not equal', 7));
|
||||
$this->assertFalse(Validation::comparison(7, '!=', 7));
|
||||
|
||||
$this->assertTrue(Validation::comparison('6.5', '!=', 6));
|
||||
$this->assertTrue(Validation::comparison('6.5', '<', 7));
|
||||
}
|
||||
|
||||
/**
|
||||
* testComparisonAsArray method
|
||||
* Test comparison casting values before comparisons.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testComparisonAsArray() {
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'is greater', 'check2' => 6)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '>', 'check2' => 6)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 6, 'operator' => 'is less', 'check2' => 7)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 6, 'operator' => '<', 'check2' => 7)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'greater or equal', 'check2' => 7)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '>=', 'check2' => 7)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'greater or equal','check2' => 6)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '>=', 'check2' => 6)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 6, 'operator' => 'less or equal', 'check2' => 7)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 6, 'operator' => '<=', 'check2' => 7)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'equal to', 'check2' => 7)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '==', 'check2' => 7)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => 'not equal', 'check2' => 6)));
|
||||
$this->assertTrue(Validation::comparison(array('check1' => 7, 'operator' => '!=', 'check2' => 6)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => 'is greater', 'check2' => 7)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => '>', 'check2' => 7)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => 'is less', 'check2' => 6)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => '<', 'check2' => 6)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => 'greater or equal', 'check2' => 7)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => '>=', 'check2' => 7)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => 'greater or equal', 'check2' => 7)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 6, 'operator' => '>=', 'check2' => 7)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => 'less or equal', 'check2' => 6)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => '<=', 'check2' => 6)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => 'equal to', 'check2' => 6)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => '==','check2' => 6)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => 'not equal', 'check2' => 7)));
|
||||
$this->assertFalse(Validation::comparison(array('check1' => 7, 'operator' => '!=', 'check2' => 7)));
|
||||
public function testComparisonTypeChecks() {
|
||||
$this->assertFalse(Validation::comparison('\x028', '>=', 1), 'hexish encoding fails');
|
||||
$this->assertFalse(Validation::comparison('0b010', '>=', 1), 'binary string data fails');
|
||||
$this->assertFalse(Validation::comparison('0x01', '>=', 1), 'hex string data fails');
|
||||
$this->assertFalse(Validation::comparison('0x1', '>=', 1), 'hex string data fails');
|
||||
|
||||
$this->assertFalse(Validation::comparison('\x028', '>=', 1.5), 'hexish encoding fails');
|
||||
$this->assertFalse(Validation::comparison('0b010', '>=', 1.5), 'binary string data fails');
|
||||
$this->assertFalse(Validation::comparison('0x02', '>=', 1.5), 'hex string data fails');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -979,17 +954,6 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::custom('missing regex'));
|
||||
}
|
||||
|
||||
/**
|
||||
* testCustomAsArray method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testCustomAsArray() {
|
||||
$this->assertTrue(Validation::custom(array('check' => '12345', 'regex' => '/(?<!\\S)\\d++(?!\\S)/')));
|
||||
$this->assertFalse(Validation::custom(array('check' => 'Text', 'regex' => '/(?<!\\S)\\d++(?!\\S)/')));
|
||||
$this->assertFalse(Validation::custom(array('check' => '123.45', 'regex' => '/(?<!\\S)\\d++(?!\\S)/')));
|
||||
}
|
||||
|
||||
/**
|
||||
* testDateDdmmyyyy method
|
||||
*
|
||||
|
|
@ -1414,14 +1378,58 @@ class ValidationTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testDateMyNumeric() {
|
||||
$this->assertTrue(Validation::date('12/2006', array('my')));
|
||||
$this->assertTrue(Validation::date('01/2006', array('my')));
|
||||
$this->assertTrue(Validation::date('12-2006', array('my')));
|
||||
$this->assertTrue(Validation::date('12.2006', array('my')));
|
||||
$this->assertTrue(Validation::date('12 2006', array('my')));
|
||||
$this->assertFalse(Validation::date('12/06', array('my')));
|
||||
$this->assertFalse(Validation::date('12-06', array('my')));
|
||||
$this->assertFalse(Validation::date('12.06', array('my')));
|
||||
$this->assertFalse(Validation::date('12 06', array('my')));
|
||||
$this->assertTrue(Validation::date('01/06', array('my')));
|
||||
$this->assertTrue(Validation::date('12-06', array('my')));
|
||||
$this->assertTrue(Validation::date('12.06', array('my')));
|
||||
$this->assertTrue(Validation::date('12 06', array('my')));
|
||||
$this->assertFalse(Validation::date('13 06', array('my')));
|
||||
$this->assertFalse(Validation::date('13 2006', array('my')));
|
||||
}
|
||||
|
||||
/**
|
||||
* testDateYmNumeric method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDateYmNumeric() {
|
||||
$this->assertTrue(Validation::date('2006/12', array('ym')));
|
||||
$this->assertTrue(Validation::date('2006-12', array('ym')));
|
||||
$this->assertTrue(Validation::date('2006-12', array('ym')));
|
||||
$this->assertTrue(Validation::date('2006 12', array('ym')));
|
||||
$this->assertTrue(Validation::date('2006 12', array('ym')));
|
||||
$this->assertTrue(Validation::date('1900-01', array('ym')));
|
||||
$this->assertTrue(Validation::date('2153-01', array('ym')));
|
||||
$this->assertTrue(Validation::date('06/12', array('ym')));
|
||||
$this->assertTrue(Validation::date('06-12', array('ym')));
|
||||
$this->assertTrue(Validation::date('06-12', array('ym')));
|
||||
$this->assertTrue(Validation::date('06 12', array('ym')));
|
||||
$this->assertFalse(Validation::date('2006/12 ', array('ym')));
|
||||
$this->assertFalse(Validation::date('2006/12/', array('ym')));
|
||||
$this->assertFalse(Validation::date('06/12 ', array('ym')));
|
||||
$this->assertFalse(Validation::date('06/13 ', array('ym')));
|
||||
}
|
||||
|
||||
/**
|
||||
* testDateY method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDateY() {
|
||||
$this->assertTrue(Validation::date('1900', array('y')));
|
||||
$this->assertTrue(Validation::date('1984', array('y')));
|
||||
$this->assertTrue(Validation::date('2006', array('y')));
|
||||
$this->assertTrue(Validation::date('2008', array('y')));
|
||||
$this->assertTrue(Validation::date('2013', array('y')));
|
||||
$this->assertTrue(Validation::date('2104', array('y')));
|
||||
$this->assertTrue(Validation::date('1899', array('y')));
|
||||
$this->assertFalse(Validation::date('20009', array('y')));
|
||||
$this->assertFalse(Validation::date(' 2012', array('y')));
|
||||
$this->assertFalse(Validation::date('3000', array('y')));
|
||||
$this->assertFalse(Validation::date('1799', array('y')));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1610,6 +1618,25 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::decimal('.54321', null, '/^[-+]?[0-9]+(\\.[0-9]+)?$/s'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test localized floats with decimal.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDecimalLocaleSet() {
|
||||
$this->skipIf(DS === '\\', 'The locale is not supported in Windows and affects other tests.');
|
||||
$restore = setlocale(LC_NUMERIC, 0);
|
||||
$this->skipIf(setlocale(LC_NUMERIC, 'da_DK') === false, "The Danish locale isn't available.");
|
||||
|
||||
$this->assertTrue(Validation::decimal(1.54), '1.54 should be considered a valid float');
|
||||
$this->assertTrue(Validation::decimal('1.54'), '"1.54" should be considered a valid float');
|
||||
|
||||
$this->assertTrue(Validation::decimal(12345.67), '12345.67 should be considered a valid float');
|
||||
$this->assertTrue(Validation::decimal('12,345.67'), '"12,345.67" should be considered a valid float');
|
||||
|
||||
setlocale(LC_NUMERIC, $restore);
|
||||
}
|
||||
|
||||
/**
|
||||
* testEmail method
|
||||
*
|
||||
|
|
@ -1667,6 +1694,11 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertTrue(Validation::email('!def!xyz%abc@example.com'));
|
||||
$this->assertTrue(Validation::email('_somename@example.com'));
|
||||
|
||||
/// Unicode
|
||||
$this->assertTrue(Validation::email('some@eräume.foo'));
|
||||
$this->assertTrue(Validation::email('äu@öe.eräume.foo'));
|
||||
$this->assertTrue(Validation::email('Nyrée.surname@example.com'));
|
||||
|
||||
// invalid addresses
|
||||
$this->assertFalse(Validation::email('abc@example'));
|
||||
$this->assertFalse(Validation::email('abc@example.c'));
|
||||
|
|
@ -1684,7 +1716,6 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::email("abc@sub'example.com"));
|
||||
$this->assertFalse(Validation::email('abc@sub/example.com'));
|
||||
$this->assertFalse(Validation::email('abc@yahoo!.com'));
|
||||
$this->assertFalse(Validation::email("Nyrée.surname@example.com"));
|
||||
$this->assertFalse(Validation::email('abc@example_underscored.com'));
|
||||
$this->assertFalse(Validation::email('raw@test.ra.ru....com'));
|
||||
}
|
||||
|
|
@ -1699,7 +1730,6 @@ class ValidationTest extends CakeTestCase {
|
|||
|
||||
$this->assertTrue(Validation::email('abc.efg@cakephp.org', true));
|
||||
$this->assertFalse(Validation::email('abc.efg@caphpkeinvalid.com', true));
|
||||
$this->assertFalse(Validation::email('abc@example.abcd', true));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1855,6 +1885,7 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::url('http://_jabber._tcp.g_mail.com'));
|
||||
$this->assertFalse(Validation::url('http://en.(wikipedia).org/'));
|
||||
$this->assertFalse(Validation::url('http://www.domain.com/fakeenco%ode'));
|
||||
$this->assertFalse(Validation::url('--.example.com'));
|
||||
$this->assertFalse(Validation::url('www.cakephp.org', true));
|
||||
|
||||
$this->assertTrue(Validation::url('http://example.com/~userdir/subdir/index.html'));
|
||||
|
|
@ -1862,6 +1893,8 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertTrue(Validation::url('http://www.zwischenraume.cz'));
|
||||
$this->assertTrue(Validation::url('http://www.last.fm/music/浜崎あゆみ'), 'utf8 path failed');
|
||||
$this->assertTrue(Validation::url('http://www.electrohome.ro/images/239537750-284232-215_300[1].jpg'));
|
||||
$this->assertTrue(Validation::url('http://www.eräume.foo'));
|
||||
$this->assertTrue(Validation::url('http://äüö.eräume.foo'));
|
||||
|
||||
$this->assertTrue(Validation::url('http://cakephp.org:80'));
|
||||
$this->assertTrue(Validation::url('http://cakephp.org:443'));
|
||||
|
|
@ -1882,6 +1915,7 @@ class ValidationTest extends CakeTestCase {
|
|||
}
|
||||
|
||||
public function testUuid() {
|
||||
$this->assertTrue(Validation::uuid('00000000-0000-0000-0000-000000000000'));
|
||||
$this->assertTrue(Validation::uuid('550e8400-e29b-11d4-a716-446655440000'));
|
||||
$this->assertFalse(Validation::uuid('BRAP-e29b-11d4-a716-446655440000'));
|
||||
$this->assertTrue(Validation::uuid('550E8400-e29b-11D4-A716-446655440000'));
|
||||
|
|
@ -1903,8 +1937,19 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::inList('three', array('one', 'two')));
|
||||
$this->assertFalse(Validation::inList('1one', array(0, 1, 2, 3)));
|
||||
$this->assertFalse(Validation::inList('one', array(0, 1, 2, 3)));
|
||||
$this->assertFalse(Validation::inList('2', array(1, 2, 3)));
|
||||
$this->assertTrue(Validation::inList('2', array(1, 2, 3), false));
|
||||
$this->assertTrue(Validation::inList('2', array(1, 2, 3)));
|
||||
$this->assertFalse(Validation::inList('2x', array(1, 2, 3)));
|
||||
$this->assertFalse(Validation::inList(2, array('1', '2x', '3')));
|
||||
$this->assertFalse(Validation::inList('One', array('one', 'two')));
|
||||
|
||||
// No hexadecimal for numbers.
|
||||
$this->assertFalse(Validation::inList('0x7B', array('ABC', '123')));
|
||||
$this->assertFalse(Validation::inList('0x7B', array('ABC', 123)));
|
||||
|
||||
// case insensitive
|
||||
$this->assertTrue(Validation::inList('one', array('One', 'Two'), true));
|
||||
$this->assertTrue(Validation::inList('Two', array('one', 'two'), true));
|
||||
$this->assertFalse(Validation::inList('three', array('one', 'two'), true));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1922,6 +1967,22 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::range('word'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test range type checks
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testRangeTypeChecks() {
|
||||
$this->assertFalse(Validation::range('\x028', 1, 5), 'hexish encoding fails');
|
||||
$this->assertFalse(Validation::range('0b010', 1, 5), 'binary string data fails');
|
||||
$this->assertFalse(Validation::range('0x01', 1, 5), 'hex string data fails');
|
||||
$this->assertFalse(Validation::range('0x1', 1, 5), 'hex string data fails');
|
||||
|
||||
$this->assertFalse(Validation::range('\x028', 1, 5), 'hexish encoding fails');
|
||||
$this->assertFalse(Validation::range('0b010', 1, 5), 'binary string data fails');
|
||||
$this->assertFalse(Validation::range('0x02', 1, 5), 'hex string data fails');
|
||||
}
|
||||
|
||||
/**
|
||||
* testExtension method
|
||||
*
|
||||
|
|
@ -1957,29 +2018,37 @@ class ValidationTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
public function testMoney() {
|
||||
$this->assertTrue(Validation::money('100'));
|
||||
$this->assertTrue(Validation::money('100.11'));
|
||||
$this->assertTrue(Validation::money('100.112'));
|
||||
$this->assertTrue(Validation::money('100.1'));
|
||||
$this->assertTrue(Validation::money('100.111,1'));
|
||||
$this->assertTrue(Validation::money('100.111,11'));
|
||||
$this->assertFalse(Validation::money('100.111,111'));
|
||||
|
||||
$this->assertTrue(Validation::money('$100'));
|
||||
$this->assertTrue(Validation::money('$100.11'));
|
||||
$this->assertTrue(Validation::money('$100.112'));
|
||||
$this->assertFalse(Validation::money('$100.1'));
|
||||
$this->assertTrue(Validation::money('$100.1'));
|
||||
$this->assertFalse(Validation::money('$100.1111'));
|
||||
$this->assertFalse(Validation::money('text'));
|
||||
|
||||
$this->assertTrue(Validation::money('100', 'right'));
|
||||
$this->assertTrue(Validation::money('100.11$', 'right'));
|
||||
$this->assertTrue(Validation::money('100.112$', 'right'));
|
||||
$this->assertFalse(Validation::money('100.1$', 'right'));
|
||||
$this->assertTrue(Validation::money('100.1$', 'right'));
|
||||
$this->assertFalse(Validation::money('100.1111$', 'right'));
|
||||
|
||||
$this->assertTrue(Validation::money('€100'));
|
||||
$this->assertTrue(Validation::money('€100.11'));
|
||||
$this->assertTrue(Validation::money('€100.112'));
|
||||
$this->assertFalse(Validation::money('€100.1'));
|
||||
$this->assertTrue(Validation::money('€100.1'));
|
||||
$this->assertFalse(Validation::money('€100.1111'));
|
||||
|
||||
$this->assertTrue(Validation::money('100', 'right'));
|
||||
$this->assertTrue(Validation::money('100.11€', 'right'));
|
||||
$this->assertTrue(Validation::money('100.112€', 'right'));
|
||||
$this->assertFalse(Validation::money('100.1€', 'right'));
|
||||
$this->assertTrue(Validation::money('100.1€', 'right'));
|
||||
$this->assertFalse(Validation::money('100.1111€', 'right'));
|
||||
}
|
||||
|
||||
|
|
@ -1995,8 +2064,9 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::multiple(''));
|
||||
$this->assertFalse(Validation::multiple(null));
|
||||
$this->assertFalse(Validation::multiple(array()));
|
||||
$this->assertFalse(Validation::multiple(array(0)));
|
||||
$this->assertFalse(Validation::multiple(array('0')));
|
||||
$this->assertTrue(Validation::multiple(array(0)));
|
||||
$this->assertTrue(Validation::multiple(array('0')));
|
||||
$this->assertFalse(Validation::multiple(array('')));
|
||||
|
||||
$this->assertTrue(Validation::multiple(array(0, 3, 4, 5), array('in' => range(0, 10))));
|
||||
$this->assertFalse(Validation::multiple(array(0, 15, 20, 5), array('in' => range(0, 10))));
|
||||
|
|
@ -2004,8 +2074,9 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::multiple(array('boo', 'foo', 'bar'), array('in' => array('foo', 'bar', 'baz'))));
|
||||
$this->assertFalse(Validation::multiple(array('foo', '1bar'), array('in' => range(0, 10))));
|
||||
|
||||
$this->assertTrue(Validation::multiple(array(0, 5, 10, 11), array('max' => 3)));
|
||||
$this->assertFalse(Validation::multiple(array(0, 5, 10, 11, 55), array('max' => 3)));
|
||||
$this->assertFalse(Validation::multiple(array(1, 5, 10, 11), array('max' => 3)));
|
||||
$this->assertTrue(Validation::multiple(array(0, 5, 10, 11), array('max' => 4)));
|
||||
$this->assertFalse(Validation::multiple(array(0, 5, 10, 11, 55), array('max' => 4)));
|
||||
$this->assertTrue(Validation::multiple(array('foo', 'bar', 'baz'), array('max' => 3)));
|
||||
$this->assertFalse(Validation::multiple(array('foo', 'bar', 'baz', 'squirrel'), array('max' => 3)));
|
||||
|
||||
|
|
@ -2015,14 +2086,24 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::multiple(array('foo', 'bar', 'baz', 'squirrel'), array('min' => 10)));
|
||||
|
||||
$this->assertTrue(Validation::multiple(array(0, 5, 9), array('in' => range(0, 10), 'max' => 5)));
|
||||
$this->assertFalse(Validation::multiple(array('0', '5', '9'), array('in' => range(0, 10), 'max' => 5)));
|
||||
$this->assertTrue(Validation::multiple(array('0', '5', '9'), array('in' => range(0, 10), 'max' => 5), false));
|
||||
$this->assertTrue(Validation::multiple(array('0', '5', '9'), array('in' => range(0, 10), 'max' => 5)));
|
||||
|
||||
$this->assertFalse(Validation::multiple(array(0, 5, 9, 8, 6, 2, 1), array('in' => range(0, 10), 'max' => 5)));
|
||||
$this->assertFalse(Validation::multiple(array(0, 5, 9, 8, 11), array('in' => range(0, 10), 'max' => 5)));
|
||||
|
||||
$this->assertFalse(Validation::multiple(array(0, 5, 9), array('in' => range(0, 10), 'max' => 5, 'min' => 3)));
|
||||
$this->assertFalse(Validation::multiple(array(0, 5, 9, 8, 6, 2, 1), array('in' => range(0, 10), 'max' => 5, 'min' => 2)));
|
||||
$this->assertFalse(Validation::multiple(array(-1, 5, 9), array('in' => range(0, 10), 'max' => 5, 'min' => 3)));
|
||||
$this->assertFalse(Validation::multiple(array(-1, 5, 9, 8, 6, 2, 1), array('in' => range(0, 10), 'max' => 5, 'min' => 2)));
|
||||
$this->assertFalse(Validation::multiple(array(0, 5, 9, 8, 11), array('in' => range(0, 10), 'max' => 5, 'min' => 2)));
|
||||
|
||||
$this->assertFalse(Validation::multiple(array('2x', '3x'), array('in' => array(1, 2, 3, 4, 5))));
|
||||
$this->assertFalse(Validation::multiple(array(2, 3), array('in' => array('1x', '2x', '3x', '4x'))));
|
||||
$this->assertFalse(Validation::multiple(array('one'), array('in' => array('One', 'Two'))));
|
||||
$this->assertFalse(Validation::multiple(array('Two'), array('in' => array('one', 'two'))));
|
||||
|
||||
// case insensitive
|
||||
$this->assertTrue(Validation::multiple(array('one'), array('in' => array('One', 'Two')), true));
|
||||
$this->assertTrue(Validation::multiple(array('Two'), array('in' => array('one', 'two')), true));
|
||||
$this->assertFalse(Validation::multiple(array('three'), array('in' => array('one', 'two')), true));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -2079,8 +2160,25 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::phone('(055) 999-9999'));
|
||||
$this->assertFalse(Validation::phone('(155) 999-9999'));
|
||||
$this->assertFalse(Validation::phone('(595) 999-9999'));
|
||||
$this->assertFalse(Validation::phone('(555) 099-9999'));
|
||||
$this->assertFalse(Validation::phone('(555) 199-9999'));
|
||||
$this->assertFalse(Validation::phone('(213) 099-9999'));
|
||||
$this->assertFalse(Validation::phone('(213) 199-9999'));
|
||||
|
||||
// invalid area-codes
|
||||
$this->assertFalse(Validation::phone('1-(511)-999-9999'));
|
||||
$this->assertFalse(Validation::phone('1-(555)-999-9999'));
|
||||
|
||||
// invalid phone number
|
||||
$this->assertFalse(Validation::phone('1-(222)-555-0199'));
|
||||
$this->assertFalse(Validation::phone('1-(222)-555-0122'));
|
||||
|
||||
// valid phone numbers
|
||||
$this->assertTrue(Validation::phone('416-428-1234'));
|
||||
$this->assertTrue(Validation::phone('1-(369)-333-4444'));
|
||||
$this->assertTrue(Validation::phone('1-(973)-333-4444'));
|
||||
$this->assertTrue(Validation::phone('1-(313)-555-9999'));
|
||||
$this->assertTrue(Validation::phone('1-(222)-555-0299'));
|
||||
$this->assertTrue(Validation::phone('508-428-1234'));
|
||||
$this->assertTrue(Validation::phone('1-(508)-232-9651'));
|
||||
|
||||
$this->assertTrue(Validation::phone('1 (222) 333 4444'));
|
||||
$this->assertTrue(Validation::phone('+1 (222) 333 4444'));
|
||||
|
|
@ -2091,6 +2189,7 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertTrue(Validation::phone('1.(333).333-4444'));
|
||||
$this->assertTrue(Validation::phone('1.(333).333.4444'));
|
||||
$this->assertTrue(Validation::phone('1-333-333-4444'));
|
||||
$this->assertTrue(Validation::phone('1-800-211-4511'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -2125,6 +2224,10 @@ class ValidationTest extends CakeTestCase {
|
|||
$this->assertFalse(Validation::postal('BAA 0ABC', null, 'ca'));
|
||||
$this->assertFalse(Validation::postal('B2A AABC', null, 'ca'));
|
||||
$this->assertFalse(Validation::postal('B2A 2AB', null, 'ca'));
|
||||
$this->assertFalse(Validation::postal('K1A 1D1', null, 'ca'));
|
||||
$this->assertFalse(Validation::postal('K1O 1Q1', null, 'ca'));
|
||||
$this->assertFalse(Validation::postal('A1A 1U1', null, 'ca'));
|
||||
$this->assertFalse(Validation::postal('A1F 1B1', null, 'ca'));
|
||||
$this->assertTrue(Validation::postal('X0A 0A2', null, 'ca'));
|
||||
$this->assertTrue(Validation::postal('G4V 4C3', null, 'ca'));
|
||||
|
||||
|
|
@ -2171,7 +2274,7 @@ class ValidationTest extends CakeTestCase {
|
|||
*
|
||||
* @expectedException PHPUnit_Framework_Error
|
||||
* @return void
|
||||
**/
|
||||
*/
|
||||
public function testPassThroughClassFailure() {
|
||||
Validation::postal('text', null, 'AUTOFAIL');
|
||||
}
|
||||
|
|
@ -2255,9 +2358,13 @@ class ValidationTest extends CakeTestCase {
|
|||
public function testMimeType() {
|
||||
$image = CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot' . DS . 'img' . DS . 'cake.power.gif';
|
||||
$File = new File($image, false);
|
||||
|
||||
$this->skipIf(!$File->mime(), 'Cannot determine mimeType');
|
||||
|
||||
$this->assertTrue(Validation::mimeType($image, array('image/gif')));
|
||||
$this->assertTrue(Validation::mimeType(array('tmp_name' => $image), array('image/gif')));
|
||||
$this->assertTrue(Validation::mimeType(array('tmp_name' => $image), '#image/.+#'));
|
||||
$this->assertTrue(Validation::mimeType($image, array('image/GIF')));
|
||||
|
||||
$this->assertFalse(Validation::mimeType($image, array('image/png')));
|
||||
$this->assertFalse(Validation::mimeType(array('tmp_name' => $image), array('image/png')));
|
||||
|
|
@ -2277,15 +2384,164 @@ class ValidationTest extends CakeTestCase {
|
|||
}
|
||||
|
||||
/**
|
||||
* testMimeType method
|
||||
* testUploadError method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUploadError() {
|
||||
$this->assertTrue(Validation::uploadError(0));
|
||||
$this->assertTrue(Validation::uploadError(array('error' => 0)));
|
||||
$this->assertTrue(Validation::uploadError(array('error' => '0')));
|
||||
|
||||
$this->assertFalse(Validation::uploadError(2));
|
||||
$this->assertFalse(Validation::uploadError(array('error' => 2)));
|
||||
$this->assertFalse(Validation::uploadError(array('error' => '2')));
|
||||
|
||||
$this->assertFalse(Validation::uploadError(UPLOAD_ERR_NO_FILE));
|
||||
$this->assertFalse(Validation::uploadError(UPLOAD_ERR_FORM_SIZE, true));
|
||||
$this->assertFalse(Validation::uploadError(UPLOAD_ERR_INI_SIZE, true));
|
||||
$this->assertFalse(Validation::uploadError(UPLOAD_ERR_NO_TMP_DIR, true));
|
||||
$this->assertTrue(Validation::uploadError(UPLOAD_ERR_NO_FILE, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* testFileSize method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testFileSize() {
|
||||
$image = CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot' . DS . 'img' . DS . 'cake.power.gif';
|
||||
$this->assertTrue(Validation::fileSize($image, '<', 1024));
|
||||
$this->assertTrue(Validation::fileSize(array('tmp_name' => $image), 'isless', 1024));
|
||||
$this->assertTrue(Validation::fileSize($image, '<', '1KB'));
|
||||
$this->assertTrue(Validation::fileSize($image, '>=', 200));
|
||||
$this->assertTrue(Validation::fileSize($image, '==', 201));
|
||||
$this->assertTrue(Validation::fileSize($image, '==', '201B'));
|
||||
|
||||
$this->assertFalse(Validation::fileSize($image, 'isgreater', 1024));
|
||||
$this->assertFalse(Validation::fileSize(array('tmp_name' => $image), '>', '1KB'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test uploaded file validation.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUploadedFileErrorCode() {
|
||||
$this->assertFalse(ValidationStub::uploadedFile('derp'));
|
||||
$invalid = array(
|
||||
'name' => 'testing'
|
||||
);
|
||||
$this->assertFalse(ValidationStub::uploadedFile($invalid));
|
||||
$file = array(
|
||||
'name' => 'cake.power.gif',
|
||||
'tmp_name' => CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot/img/cake.power.gif',
|
||||
'error' => UPLOAD_ERR_OK,
|
||||
'type' => 'image/gif',
|
||||
'size' => 201
|
||||
);
|
||||
$this->assertTrue(ValidationStub::uploadedFile($file));
|
||||
$file['error'] = UPLOAD_ERR_NO_FILE;
|
||||
$this->assertFalse(ValidationStub::uploadedFile($file), 'Error upload should fail.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test uploaded file validation.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUploadedFileMimeType() {
|
||||
$file = array(
|
||||
'name' => 'cake.power.gif',
|
||||
'tmp_name' => CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot/img/cake.power.gif',
|
||||
'error' => UPLOAD_ERR_OK,
|
||||
'type' => 'text/plain',
|
||||
'size' => 201
|
||||
);
|
||||
$options = array(
|
||||
'types' => array('text/plain')
|
||||
);
|
||||
$this->assertFalse(ValidationStub::uploadedFile($file, $options), 'Incorrect mimetype.');
|
||||
$options = array(
|
||||
'types' => array('image/gif', 'image/png')
|
||||
);
|
||||
$this->assertTrue(ValidationStub::uploadedFile($file, $options));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test uploaded file validation.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUploadedFileSize() {
|
||||
$file = array(
|
||||
'name' => 'cake.power.gif',
|
||||
'tmp_name' => CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot/img/cake.power.gif',
|
||||
'error' => UPLOAD_ERR_OK,
|
||||
'type' => 'text/plain',
|
||||
'size' => 201
|
||||
);
|
||||
$options = array(
|
||||
'minSize' => 500
|
||||
);
|
||||
$this->assertFalse(ValidationStub::uploadedFile($file, $options), 'Too small');
|
||||
$options = array(
|
||||
'maxSize' => 100
|
||||
);
|
||||
$this->assertFalse(ValidationStub::uploadedFile($file, $options), 'Too big');
|
||||
$options = array(
|
||||
'minSize' => 100,
|
||||
);
|
||||
$this->assertTrue(ValidationStub::uploadedFile($file, $options));
|
||||
$options = array(
|
||||
'maxSize' => 500,
|
||||
);
|
||||
$this->assertTrue(ValidationStub::uploadedFile($file, $options));
|
||||
$options = array(
|
||||
'minSize' => 100,
|
||||
'maxSize' => 500
|
||||
);
|
||||
$this->assertTrue(ValidationStub::uploadedFile($file, $options));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test uploaded file validation.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUploadedFileNoFile() {
|
||||
$file = array(
|
||||
'name' => '',
|
||||
'tmp_name' => CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot/img/cake.power.gif',
|
||||
'error' => UPLOAD_ERR_NO_FILE,
|
||||
'type' => '',
|
||||
'size' => 0
|
||||
);
|
||||
$options = array(
|
||||
'optional' => true,
|
||||
'minSize' => 500,
|
||||
'types' => array('image/gif', 'image/png')
|
||||
);
|
||||
$this->assertTrue(Validation::uploadedFile($file, $options), 'No file should be ok.');
|
||||
$options = array(
|
||||
'optional' => false
|
||||
);
|
||||
$this->assertFalse(Validation::uploadedFile($file, $options), 'File is required.');
|
||||
}
|
||||
/**
|
||||
* Test uploaded file validation.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUploadedFileWithDifferentFileParametersOrder() {
|
||||
$file = array(
|
||||
'name' => 'cake.power.gif',
|
||||
'error' => UPLOAD_ERR_OK,
|
||||
'tmp_name' => CORE_PATH . 'Cake' . DS . 'Test' . DS . 'test_app' . DS . 'webroot/img/cake.power.gif',
|
||||
'type' => 'text/plain',
|
||||
'size' => 201
|
||||
);
|
||||
$options = array();
|
||||
$this->assertTrue(ValidationStub::uploadedFile($file, $options), 'Wrong order');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,20 +2,20 @@
|
|||
/**
|
||||
* XmlTest file
|
||||
*
|
||||
* PHP 5
|
||||
*
|
||||
* CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||||
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice
|
||||
*
|
||||
* @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||
* @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||||
* @package Cake.Test.Case.Utility
|
||||
* @since CakePHP(tm) v 1.2.0.5432
|
||||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
App::uses('Xml', 'Utility');
|
||||
App::uses('CakeTestModel', 'TestSuite/Fixture');
|
||||
|
||||
|
|
@ -29,7 +29,7 @@ class XmlArticle extends CakeTestModel {
|
|||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'Article'
|
||||
* @var string
|
||||
*/
|
||||
public $name = 'Article';
|
||||
|
||||
|
|
@ -56,7 +56,7 @@ class XmlUser extends CakeTestModel {
|
|||
/**
|
||||
* name property
|
||||
*
|
||||
* @var string 'User'
|
||||
* @var string
|
||||
*/
|
||||
public $name = 'User';
|
||||
|
||||
|
|
@ -82,7 +82,7 @@ class XmlTest extends CakeTestCase {
|
|||
/**
|
||||
* autoFixtures property
|
||||
*
|
||||
* @var bool false
|
||||
* @var bool
|
||||
*/
|
||||
public $autoFixtures = false;
|
||||
|
||||
|
|
@ -167,6 +167,40 @@ class XmlTest extends CakeTestCase {
|
|||
$this->assertNotRegExp('/encoding/', $obj->saveXML());
|
||||
}
|
||||
|
||||
/**
|
||||
* test build() method with huge option
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testBuildHuge() {
|
||||
$xml = '<tag>value</tag>';
|
||||
$obj = Xml::build($xml, array('parseHuge' => true));
|
||||
$this->assertEquals('tag', $obj->getName());
|
||||
$this->assertEquals('value', (string)$obj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that the readFile option disables local file parsing.
|
||||
*
|
||||
* @expectedException XmlException
|
||||
* @return void
|
||||
*/
|
||||
public function testBuildFromFileWhenDisabled() {
|
||||
$xml = CAKE . 'Test' . DS . 'Fixture' . DS . 'sample.xml';
|
||||
Xml::build($xml, array('readFile' => false));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that the readFile option disables local file parsing.
|
||||
*
|
||||
* @expectedException XmlException
|
||||
* @return void
|
||||
*/
|
||||
public function testBuildFromUrlWhenDisabled() {
|
||||
$xml = 'http://www.google.com';
|
||||
Xml::build($xml, array('readFile' => false));
|
||||
}
|
||||
|
||||
/**
|
||||
* data provider function for testBuildInvalidData
|
||||
*
|
||||
|
|
@ -186,16 +220,27 @@ class XmlTest extends CakeTestCase {
|
|||
*
|
||||
* @dataProvider invalidDataProvider
|
||||
* @expectedException XmlException
|
||||
* return void
|
||||
* @return void
|
||||
*/
|
||||
public function testBuildInvalidData($value) {
|
||||
Xml::build($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that building SimpleXmlElement with invalid XML causes the right exception.
|
||||
*
|
||||
* @expectedException XmlException
|
||||
* @return void
|
||||
*/
|
||||
public function testBuildInvalidDataSimpleXml() {
|
||||
$input = '<derp';
|
||||
Xml::build($input, array('return' => 'simplexml'));
|
||||
}
|
||||
|
||||
/**
|
||||
* test build with a single empty tag
|
||||
*
|
||||
* return void
|
||||
* @return void
|
||||
*/
|
||||
public function testBuildEmptyTag() {
|
||||
try {
|
||||
|
|
@ -364,6 +409,36 @@ XML;
|
|||
$this->assertXmlStringEqualsXmlString($xmlText, $obj->asXML());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test fromArray() with zero values.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testFromArrayZeroValue() {
|
||||
$xml = array(
|
||||
'tag' => array(
|
||||
'@' => 0,
|
||||
'@test' => 'A test'
|
||||
)
|
||||
);
|
||||
$obj = Xml::fromArray($xml);
|
||||
$xmlText = <<<XML
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<tag test="A test">0</tag>
|
||||
XML;
|
||||
$this->assertXmlStringEqualsXmlString($xmlText, $obj->asXML());
|
||||
|
||||
$xml = array(
|
||||
'tag' => array('0')
|
||||
);
|
||||
$obj = Xml::fromArray($xml);
|
||||
$xmlText = <<<XML
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<tag>0</tag>
|
||||
XML;
|
||||
$this->assertXmlStringEqualsXmlString($xmlText, $obj->asXML());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test non-sequential keys in list types.
|
||||
*
|
||||
|
|
@ -401,6 +476,87 @@ XML;
|
|||
$this->assertXmlStringEqualsXmlString($expected, $obj->asXML());
|
||||
}
|
||||
|
||||
/**
|
||||
* testFromArrayPretty method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testFromArrayPretty() {
|
||||
$xml = array(
|
||||
'tags' => array(
|
||||
'tag' => array(
|
||||
array(
|
||||
'id' => '1',
|
||||
'name' => 'defect'
|
||||
),
|
||||
array(
|
||||
'id' => '2',
|
||||
'name' => 'enhancement'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
$expected = <<<XML
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<tags><tag><id>1</id><name>defect</name></tag><tag><id>2</id><name>enhancement</name></tag></tags>
|
||||
|
||||
XML;
|
||||
$xmlResponse = Xml::fromArray($xml, array('pretty' => false));
|
||||
$this->assertTextEquals($expected, $xmlResponse->asXML());
|
||||
|
||||
$expected = <<<XML
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<tags>
|
||||
<tag>
|
||||
<id>1</id>
|
||||
<name>defect</name>
|
||||
</tag>
|
||||
<tag>
|
||||
<id>2</id>
|
||||
<name>enhancement</name>
|
||||
</tag>
|
||||
</tags>
|
||||
|
||||
XML;
|
||||
$xmlResponse = Xml::fromArray($xml, array('pretty' => true));
|
||||
$this->assertTextEquals($expected, $xmlResponse->asXML());
|
||||
|
||||
$xml = array(
|
||||
'tags' => array(
|
||||
'tag' => array(
|
||||
array(
|
||||
'id' => '1',
|
||||
'name' => 'defect'
|
||||
),
|
||||
array(
|
||||
'id' => '2',
|
||||
'name' => 'enhancement'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
$expected = <<<XML
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<tags><tag id="1" name="defect"/><tag id="2" name="enhancement"/></tags>
|
||||
|
||||
XML;
|
||||
$xmlResponse = Xml::fromArray($xml, array('pretty' => false, 'format' => 'attributes'));
|
||||
$this->assertTextEquals($expected, $xmlResponse->asXML());
|
||||
|
||||
$expected = <<<XML
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<tags>
|
||||
<tag id="1" name="defect"/>
|
||||
<tag id="2" name="enhancement"/>
|
||||
</tags>
|
||||
|
||||
XML;
|
||||
$xmlResponse = Xml::fromArray($xml, array('pretty' => true, 'format' => 'attributes'));
|
||||
$this->assertTextEquals($expected, $xmlResponse->asXML());
|
||||
}
|
||||
|
||||
/**
|
||||
* data provider for fromArray() failures
|
||||
*
|
||||
|
|
@ -448,6 +604,7 @@ XML;
|
|||
* testFromArrayFail method
|
||||
*
|
||||
* @dataProvider invalidArrayDataProvider
|
||||
* @return void
|
||||
*/
|
||||
public function testFromArrayFail($value) {
|
||||
try {
|
||||
|
|
@ -458,6 +615,41 @@ XML;
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that there are not unterminated errors when building xml
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testFromArrayUnterminatedError() {
|
||||
$data = array(
|
||||
'product_ID' => 'GENERT-DL',
|
||||
'deeplink' => 'http://example.com/deep',
|
||||
'image_URL' => 'http://example.com/image',
|
||||
'thumbnail_image_URL' => 'http://example.com/thumb',
|
||||
'brand' => 'Malte Lange & Co',
|
||||
'availability' => 'in stock',
|
||||
'authors' => array(
|
||||
'author' => array('Malte Lange & Co')
|
||||
)
|
||||
);
|
||||
$xml = Xml::fromArray(array('products' => $data), 'tags');
|
||||
$expected = <<<XML
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<products>
|
||||
<product_ID>GENERT-DL</product_ID>
|
||||
<deeplink>http://example.com/deep</deeplink>
|
||||
<image_URL>http://example.com/image</image_URL>
|
||||
<thumbnail_image_URL>http://example.com/thumb</thumbnail_image_URL>
|
||||
<brand>Malte Lange & Co</brand>
|
||||
<availability>in stock</availability>
|
||||
<authors>
|
||||
<author>Malte Lange & Co</author>
|
||||
</authors>
|
||||
</products>
|
||||
XML;
|
||||
$this->assertXmlStringEqualsXmlString($expected, $xml->asXML());
|
||||
}
|
||||
|
||||
/**
|
||||
* testToArray method
|
||||
*
|
||||
|
|
@ -608,6 +800,16 @@ XML;
|
|||
)
|
||||
);
|
||||
$this->assertEquals($expected, Xml::toArray($obj));
|
||||
|
||||
$xml = '<tag type="myType">0</tag>';
|
||||
$obj = Xml::build($xml);
|
||||
$expected = array(
|
||||
'tag' => array(
|
||||
'@type' => 'myType',
|
||||
'@' => 0
|
||||
)
|
||||
);
|
||||
$this->assertEquals($expected, Xml::toArray($obj));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -632,7 +834,7 @@ XML;
|
|||
'pubDate' => 'Tue, 31 Aug 2010 01:42:00 -0500',
|
||||
'guid' => 'http://bakery.cakephp.org/articles/view/alertpay-automated-sales-via-ipn'
|
||||
);
|
||||
$this->assertSame($rssAsArray['rss']['channel']['item'][1], $expected);
|
||||
$this->assertSame($expected, $rssAsArray['rss']['channel']['item'][1]);
|
||||
|
||||
$rss = array(
|
||||
'rss' => array(
|
||||
|
|
@ -698,7 +900,7 @@ XML;
|
|||
'params' => ''
|
||||
)
|
||||
);
|
||||
$this->assertSame(Xml::toArray($xml), $expected);
|
||||
$this->assertSame($expected, Xml::toArray($xml));
|
||||
|
||||
$xml = Xml::build('<methodCall><methodName>test</methodName><params><param><value><array><data><value><int>12</int></value><value><string>Egypt</string></value><value><boolean>0</boolean></value><value><int>-31</int></value></data></array></value></param></params></methodCall>');
|
||||
$expected = array(
|
||||
|
|
@ -722,7 +924,7 @@ XML;
|
|||
)
|
||||
)
|
||||
);
|
||||
$this->assertSame(Xml::toArray($xml), $expected);
|
||||
$this->assertSame($expected, Xml::toArray($xml));
|
||||
|
||||
$xmlText = <<<XML
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
|
@ -764,7 +966,7 @@ XML;
|
|||
)
|
||||
)
|
||||
);
|
||||
$this->assertSame(Xml::toArray($xml), $expected);
|
||||
$this->assertSame($expected, Xml::toArray($xml));
|
||||
|
||||
$xml = Xml::fromArray($expected, 'tags');
|
||||
$this->assertXmlStringEqualsXmlString($xmlText, $xml->asXML());
|
||||
|
|
@ -888,7 +1090,7 @@ XML;
|
|||
);
|
||||
$expected = '<' . '?xml version="1.0" encoding="UTF-8"?><root><ns:attr xmlns:ns="http://cakephp.org">1</ns:attr></root>';
|
||||
$xmlResponse = Xml::fromArray($xml);
|
||||
$this->assertEquals(str_replace(array("\r", "\n"), '', $xmlResponse->asXML()), $expected);
|
||||
$this->assertEquals($expected, str_replace(array("\r", "\n"), '', $xmlResponse->asXML()));
|
||||
|
||||
$xml = array(
|
||||
'root' => array(
|
||||
|
|
@ -973,6 +1175,7 @@ XML;
|
|||
*
|
||||
* @dataProvider invalidToArrayDataProvider
|
||||
* @expectedException XmlException
|
||||
* @return void
|
||||
*/
|
||||
public function testToArrayFail($value) {
|
||||
Xml::toArray($value);
|
||||
|
|
@ -1020,7 +1223,7 @@ XML;
|
|||
</records>
|
||||
</data>
|
||||
XML;
|
||||
$result = $obj->asXML();
|
||||
$obj->asXML();
|
||||
$this->assertXmlStringEqualsXmlString($expected, $obj->asXML());
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue