--- /dev/null
+<?php
+/**
+ * Horde_Util test suite
+ *
+ * @author Jan Schneider <jan@horde.org>
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @category Horde
+ * @package Util
+ * @subpackage UnitTests
+ */
+
+/**
+ * Define the main method
+ */
+if (!defined('PHPUnit_MAIN_METHOD')) {
+ define('PHPUnit_MAIN_METHOD', 'Horde_Util_AllTests::main');
+}
+
+/**
+ * Prepare the test setup.
+ */
+require_once 'Horde/Test/AllTests.php';
+
+/**
+ * @package Util
+ * @subpackage UnitTests
+ */
+class Horde_Util_AllTests extends Horde_Test_AllTests
+{
+}
+
+Horde_Util_AllTests::init('Horde_Util', __FILE__);
+
+if (PHPUnit_MAIN_METHOD == 'Horde_Util_AllTests::main') {
+ Horde_Util_AllTests::main();
+}
--- /dev/null
+<?php
+/**
+ * @author Jan Schneider <jan@horde.org>
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @category Horde
+ * @package Util
+ * @subpackage UnitTests
+ */
+
+class Horde_Util_ArrayTest extends PHPUnit_Framework_TestCase
+{
+ public function setUp()
+ {
+ $this->array = array(
+ array('name' => 'foo', 'desc' => 'foo long desc'),
+ array('name' => 'aaaa', 'desc' => 'aaa foo long desc'),
+ array('name' => 'baby', 'desc' => 'The test data was boring'),
+ array('name' => 'zebra', 'desc' => 'Striped armadillos'),
+ array('name' => 'umbrage', 'desc' => 'resentment'),
+ );
+ }
+
+ public function testArraySort()
+ {
+ Horde_Array::arraySort($this->array);
+ $this->assertEquals(
+ array(
+ 1 => array('name' => 'aaaa', 'desc' => 'aaa foo long desc'),
+ 2 => array('name' => 'baby', 'desc' => 'The test data was boring'),
+ 0 => array('name' => 'foo', 'desc' => 'foo long desc'),
+ 4 => array('name' => 'umbrage', 'desc' => 'resentment'),
+ 3 => array('name' => 'zebra', 'desc' => 'Striped armadillos'),
+ ),
+ $this->array
+ );
+ }
+
+ public function testArraySortKey()
+ {
+ Horde_Array::arraySort($this->array, 'desc');
+ $this->assertEquals(
+ array(
+ 1 => array('name' => 'aaaa', 'desc' => 'aaa foo long desc'),
+ 0 => array('name' => 'foo', 'desc' => 'foo long desc'),
+ 4 => array('name' => 'umbrage', 'desc' => 'resentment'),
+ 3 => array('name' => 'zebra', 'desc' => 'Striped armadillos'),
+ 2 => array('name' => 'baby', 'desc' => 'The test data was boring'),
+ ),
+ $this->array
+ );
+ }
+}
+++ /dev/null
---TEST--
-Horde_Array::arraySort() tests
---FILE--
-<?php
-
-require dirname(__FILE__) . '/../../../lib/Horde/Array.php';
-require dirname(__FILE__) . '/../../../lib/Horde/Array/Sort/Helper.php';
-require dirname(__FILE__) . '/../../../lib/Horde/String.php';
-require dirname(__FILE__) . '/../../../lib/Horde/Util.php';
-
-$array = array(
- array('name' => 'foo', 'desc' => 'foo long desc'),
- array('name' => 'aaaa', 'desc' => 'aaa foo long desc'),
- array('name' => 'baby', 'desc' => 'The test data was boring'),
- array('name' => 'zebra', 'desc' => 'Striped armadillos'),
- array('name' => 'umbrage', 'desc' => 'resentment'),
-);
-
-Horde_Array::arraySort($array);
-print_r($array);
-
-Horde_Array::arraySort($array, 'desc');
-print_r($array);
-
-?>
---EXPECT--
-Array
-(
- [1] => Array
- (
- [name] => aaaa
- [desc] => aaa foo long desc
- )
-
- [2] => Array
- (
- [name] => baby
- [desc] => The test data was boring
- )
-
- [0] => Array
- (
- [name] => foo
- [desc] => foo long desc
- )
-
- [4] => Array
- (
- [name] => umbrage
- [desc] => resentment
- )
-
- [3] => Array
- (
- [name] => zebra
- [desc] => Striped armadillos
- )
-
-)
-Array
-(
- [1] => Array
- (
- [name] => aaaa
- [desc] => aaa foo long desc
- )
-
- [0] => Array
- (
- [name] => foo
- [desc] => foo long desc
- )
-
- [4] => Array
- (
- [name] => umbrage
- [desc] => resentment
- )
-
- [3] => Array
- (
- [name] => zebra
- [desc] => Striped armadillos
- )
-
- [2] => Array
- (
- [name] => baby
- [desc] => The test data was boring
- )
-
-)
--- /dev/null
+<?php
+/**
+ * @author Jan Schneider <jan@horde.org>
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @category Horde
+ * @package Util
+ * @subpackage UnitTests
+ */
+
+class Horde_Util_StringTest extends PHPUnit_Framework_TestCase
+{
+ public function testUpper()
+ {
+ $this->assertEquals(
+ 'ABCDEFGHII',
+ Horde_String::upper('abCDefGHiI', true, 'us-ascii')
+ );
+ $this->assertEquals(
+ 'ABCDEFGHII',
+ Horde_String::upper('abCDefGHiI', true, 'Big5')
+ );
+ $this->assertEquals(
+ 'ABCDEFGHİI',
+ Horde_String::convertCharset(
+ Horde_String::upper('abCDefGHiI', true, 'iso-8859-9'),
+ 'iso-8859-9', 'utf-8')
+ );
+ }
+
+ public function testUpperTurkish()
+ {
+ if (!setlocale(LC_ALL, 'tr_TR')) {
+ $this->markTestSkipped('No Turkish locale installed.');
+ }
+ $one = Horde_String::convertCharset(strtoupper('abCDefGHiI'),
+ 'iso-8859-9', 'utf-8');
+ $two = Horde_String::upper('abCDefGHiI');
+ setlocale(LC_ALL, 'C');
+ $this->assertEquals('ABCDEFGHİI', $one);
+ $this->assertEquals('ABCDEFGHII', $two);
+ }
+
+ public function testLower()
+ {
+ $this->assertEquals(
+ 'abcdefghii',
+ Horde_String::lower('abCDefGHiI', true, 'us-ascii')
+ );
+ $this->assertEquals(
+ 'abcdefghii',
+ Horde_String::lower('abCDefGHiI', true, 'Big5')
+ );
+ $this->assertEquals(
+ 'abcdefghiı',
+ Horde_String::convertCharset(
+ Horde_String::lower('abCDefGHiI', true, 'iso-8859-9'),
+ 'iso-8859-9', 'utf-8')
+ );
+ }
+
+ public function testLowerTurkish()
+ {
+ if (!setlocale(LC_ALL, 'tr_TR')) {
+ $this->markTestSkipped('No Turkish locale installed.');
+ }
+ $one = Horde_String::convertCharset(strtolower('abCDefGHiI'),
+ 'iso-8859-9', 'utf-8');
+ $two = Horde_String::lower('abCDefGHiI');
+ setlocale(LC_ALL, 'C');
+ $this->assertEquals('abcdefghiı', $one);
+ $this->assertEquals('abcdefghii', $two);
+ }
+
+ public function testUcfirst()
+ {
+ $this->assertEquals(
+ 'Integer',
+ Horde_String::ucfirst('integer', true, 'us-ascii')
+ );
+ $this->assertEquals(
+ 'Integer',
+ Horde_String::ucfirst('integer', true, 'Big5')
+ );
+ $this->assertEquals(
+ 'İnteger',
+ Horde_String::convertCharset(
+ Horde_String::ucfirst('integer', true, 'iso-8859-9'),
+ 'iso-8859-9', 'utf-8')
+ );
+ }
+
+ public function testUcfirstTurkish()
+ {
+ if (!setlocale(LC_ALL, 'tr_TR')) {
+ $this->markTestSkipped('No Turkish locale installed.');
+ }
+ $one = Horde_String::convertCharset(ucfirst('integer'),
+ 'iso-8859-9', 'utf-8');
+ $two = Horde_String::ucfirst('integer');
+ setlocale(LC_ALL, 'C');
+ $this->assertEquals('İnteger', $one);
+ $this->assertEquals('Integer', $two);
+ }
+
+ public function testLength()
+ {
+ $this->assertEquals(7, Horde_String::length('Welcome', 'Big5'));
+ $this->assertEquals(7, Horde_String::length('Welcome', 'Big5'));
+ $this->assertEquals(
+ 2,
+ Horde_String::length(
+ Horde_String::convertCharset('歡迎', 'utf-8', 'Big5'),
+ 'Big5'));
+ $this->assertEquals(2, Horde_String::length('歡迎', 'utf-8'));
+
+ /* The following strings were taken with permission from the UTF-8
+ * sampler by Frank da Cruz <fdc@columbia.edu> and the Kermit Project
+ * (http://www.columbia.edu/kermit/). The original page is located at
+ * http://www.columbia.edu/kermit/utf8.html */
+
+ // French 50
+ $this->assertEquals(
+ 50,
+ Horde_String::length('Je peux manger du verre, ça ne me fait pas de mal.', 'utf-8'));
+
+ // Spanish 36
+ $this->assertEquals(
+ 36,
+ Horde_String::length('Puedo comer vidrio, no me hace daño.', 'utf-8'));
+
+ // Portuguese 34
+ $this->assertEquals(
+ 34,
+ Horde_String::length('Posso comer vidro, não me faz mal.', 'utf-8'));
+
+ // Brazilian Portuguese 34
+ $this->assertEquals(
+ 34,
+ Horde_String::length('Posso comer vidro, não me machuca.', 'utf-8'));
+
+ // Italian 41
+ $this->assertEquals(
+ 41,
+ Horde_String::length('Posso mangiare il vetro e non mi fa male.', 'utf-8'));
+
+ // English 39
+ $this->assertEquals(
+ 39,
+ Horde_String::length('I can eat glass and it doesn\'t hurt me.', 'utf-8'));
+
+ // Norsk/Norwegian/Nynorsk 33
+ $this->assertEquals(
+ 33,
+ Horde_String::length('Eg kan eta glas utan å skada meg.', 'utf-8'));
+
+ // Svensk/Swedish 36
+ $this->assertEquals(
+ 36,
+ Horde_String::length('Jag kan äta glas utan att skada mig.', 'utf-8'));
+
+ // Dansk/Danish 45
+ $this->assertEquals(
+ 45,
+ Horde_String::length('Jeg kan spise glas, det gør ikke ondt på mig.', 'utf-8'));
+
+ // Deutsch/German 41
+ $this->assertEquals(
+ 41,
+ Horde_String::length('Ich kann Glas essen, ohne mir weh zu tun.', 'utf-8'));
+
+ // Russian 38
+ $this->assertEquals(
+ 38,
+ Horde_String::length('Я могу есть стекло, оно мне не вредит.', 'utf-8'));
+ }
+
+ public function testPad()
+ {
+ /* Simple single byte tests. */
+ $this->assertEquals(
+ 'abc',
+ Horde_String::pad('abc', 2));
+ $this->assertEquals(
+ 'abc',
+ Horde_String::pad('abc', 3));
+ $this->assertEquals(
+ 'abc ',
+ Horde_String::pad('abc', 4));
+ $this->assertEquals(
+ ' abc',
+ Horde_String::pad('abc', 4, ' ', STR_PAD_LEFT));
+ $this->assertEquals(
+ 'abc ',
+ Horde_String::pad('abc', 4, ' ', STR_PAD_RIGHT));
+ $this->assertEquals(
+ 'abc ',
+ Horde_String::pad('abc', 4, ' ', STR_PAD_BOTH));
+ $this->assertEquals(
+ ' abc',
+ Horde_String::pad('abc', 5, ' ', STR_PAD_LEFT));
+ $this->assertEquals(
+ 'abc ',
+ Horde_String::pad('abc', 5, ' ', STR_PAD_RIGHT));
+ $this->assertEquals(
+ ' abc ',
+ Horde_String::pad('abc', 5, ' ', STR_PAD_BOTH));
+
+ /* Long padding tests. */
+ $this->assertEquals(
+ '=-+=-+=abc',
+ Horde_String::pad('abc', 10, '=-+', STR_PAD_LEFT));
+ $this->assertEquals(
+ 'abc=-+=-+=',
+ Horde_String::pad('abc', 10, '=-+', STR_PAD_RIGHT));
+ $this->assertEquals(
+ '=-+abc=-+=',
+ Horde_String::pad('abc', 10, '=-+', STR_PAD_BOTH));
+
+ /* Multibyte tests. */
+ $this->assertEquals(
+ ' äöü',
+ Horde_String::pad('äöü', 4, ' ', STR_PAD_LEFT, 'utf-8'));
+ $this->assertEquals(
+ 'äöü ',
+ Horde_String::pad('äöü', 4, ' ', STR_PAD_RIGHT, 'utf-8'));
+ $this->assertEquals(
+ 'äöü ',
+ Horde_String::pad('äöü', 4, ' ', STR_PAD_BOTH, 'utf-8'));
+ $this->assertEquals(
+ 'äöüäöüäabc',
+ Horde_String::pad('abc', 10, 'äöü', STR_PAD_LEFT, 'utf-8'));
+ $this->assertEquals(
+ 'abcäöüäöüä',
+ Horde_String::pad('abc', 10, 'äöü', STR_PAD_RIGHT, 'utf-8'));
+ $this->assertEquals(
+ 'äöüabcäöüä',
+ Horde_String::pad('abc', 10, 'äöü', STR_PAD_BOTH, 'utf-8'));
+
+ /* Special cases. */
+ $this->assertEquals(
+ 'abc ',
+ Horde_String::pad('abc', 4, ' ', STR_PAD_RIGHT, 'utf-8'));
+ }
+
+ public function testSubstr()
+ {
+ $string = "Lörem ipsüm dölör sit ämet";
+ $this->assertEquals(
+ 't ämet',
+ Horde_String::substr($string, 20, null, 'utf-8'));
+ $this->assertEquals(
+ 't ämet',
+ Horde_String::substr($string, -6, null, 'utf-8'));
+ $this->assertEquals(
+ 'Lörem',
+ Horde_String::substr($string, 0, 5, 'utf-8'));
+ $this->assertEquals(
+ 'Lörem',
+ Horde_String::substr($string, 0, -21, 'utf-8'));
+ $this->assertEquals(
+ 'ipsüm',
+ Horde_String::substr($string, 6, 5, 'utf-8'));
+ }
+
+ public function testWordwrap()
+ {
+ // Test default parameters and break character.
+ $string = "Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.";
+ $this->assertEquals(
+<<<EOT
+Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm
+söllicitüdin fäücibüs mäüris ämet.
+EOT
+,
+ Horde_String::wordwrap($string, 75, "\n", false, 'utf-8'));
+ $this->assertEquals(
+<<<EOT
+Lörem ipsüm dölör sit ämet,
+ cönsectetüer ädipiscing elit.
+ Aliqüäm söllicitüdin fäücibüs
+ mäüris ämet.
+EOT
+,
+ Horde_String::wordwrap($string, 30, "\n ", false, 'utf-8'));
+
+ // Test existing line breaks.
+ $string = "Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit.\nAliqüäm söllicitüdin fäücibüs mäüris ämet.";
+ $this->assertEquals(
+<<<EOT
+Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit.
+Aliqüäm söllicitüdin fäücibüs mäüris ämet.
+EOT
+,
+ Horde_String::wordwrap($string, 75, "\n", false, 'utf-8'));
+ $string = "Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm\nsöllicitüdin fäücibüs mäüris ämet.";
+ $this->assertEquals(
+<<<EOT
+Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm
+söllicitüdin fäücibüs mäüris ämet.
+EOT
+,
+ Horde_String::wordwrap($string, 75, "\n", false, 'utf-8'));
+ $string = "Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin\nfäücibüs mäüris ämet.";
+ $this->assertEquals(
+<<<EOT
+Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm
+söllicitüdin
+fäücibüs mäüris ämet.
+EOT
+,
+ Horde_String::wordwrap($string, 75, "\n", false, 'utf-8'));
+
+ // Test overlong words and word cut.
+ $string = "Löremipsümdölörsitämet, cönsectetüerädipiscingelit.";
+ $this->assertEquals(
+<<<EOT
+Löremipsümdölörsitämet,
+cönsectetüerädipiscingelit.
+EOT
+,
+ Horde_String::wordwrap($string, 15, "\n", false, 'utf-8'));
+ $string = "Löremipsümdölörsitämet, cönsectetüerädipiscingelit.";
+ $this->assertEquals(
+<<<EOT
+Löremipsümdölör
+sitämet,
+cönsectetüerädi
+piscingelit.
+EOT
+,
+ Horde_String::wordwrap($string, 15, "\n", true, 'utf-8'));
+
+ // Test whitespace at wrap width.
+ $string = "Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing";
+ $this->assertEquals(
+<<<EOT
+Lörem ipsüm dölör sit ämet,
+cönsectetüer ädipiscing
+EOT
+,
+ Horde_String::wordwrap($string, 27, "\n", false, 'utf-8'));
+ $this->assertEquals(
+<<<EOT
+Lörem ipsüm dölör sit ämet,
+cönsectetüer ädipiscing
+EOT
+,
+ Horde_String::wordwrap($string, 28, "\n", false, 'utf-8'));
+
+ // Test line folding.
+ $string = "Löremipsümdölörsitämet, cönsectetüerädipiscingelit.";
+ $this->assertEquals(
+<<<EOT
+Löremipsümdölör
+sitämet,
+ cönsectetüeräd
+ipiscingelit.
+EOT
+,
+ Horde_String::wordwrap($string, 15, "\n", true, 'utf-8', true));
+ $string = "Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.";
+ $this->assertEquals(
+<<<EOT
+Lörem ipsüm dölör sit ämet,
+ cönsectetüer ädipiscing elit.
+ Aliqüäm söllicitüdin fäücibüs
+ mäüris ämet.
+EOT
+,
+ Horde_String::wordwrap($string, 31, "\n", false, 'utf-8', true));
+ $string = "Lörem ipsüm dölör sit; ämet: cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.";
+ $this->assertEquals(
+<<<EOT
+Lörem ipsüm dölör sit;
+ ämet:
+ cönsectetüer ädipiscing elit.
+ Aliqüäm söllicitüdin fäücibüs
+ mäüris ämet.
+EOT
+,
+ Horde_String::wordwrap($string, 31, "\n", false, 'utf-8', true));
+ $string = "Lörem ipsüm dölör sit; ämet:cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.";
+ $this->assertEquals(
+<<<EOT
+Lörem ipsüm dölör sit;
+ ämet:cönsectetüer ädipiscing
+ elit. Aliqüäm söllicitüdin
+ fäücibüs mäüris ämet.
+EOT
+,
+ Horde_String::wordwrap($string, 31, "\n", false, 'utf-8', true));
+ $string = "Lörem ipsüm dölör sit; ämet; cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.";
+ $this->assertEquals(
+<<<EOT
+Lörem ipsüm dölör sit;
+ ämet;
+ cönsectetüer ädipiscing elit.
+ Aliqüäm söllicitüdin fäücibüs
+ mäüris ämet.
+EOT
+,
+ Horde_String::wordwrap($string, 31, "\n", false, 'utf-8', true));
+ $string = "Lörem ipsüm dölör sit; ämet;cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.";
+ $this->assertEquals(
+<<<EOT
+Lörem ipsüm dölör sit;
+ ämet;cönsectetüer ädipiscing
+ elit. Aliqüäm söllicitüdin
+ fäücibüs mäüris ämet.
+EOT
+,
+ Horde_String::wordwrap($string, 31, "\n", false, 'utf-8', true));
+ }
+}
--- /dev/null
+<?php
+/**
+ * @author Jan Schneider <jan@horde.org>
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @category Horde
+ * @package Util
+ * @subpackage UnitTests
+ */
+
+class Horde_Util_UtilTest extends PHPUnit_Framework_TestCase
+{
+ public function testAddParameter()
+ {
+ $url = 'test';
+ $this->assertEquals(
+ 'test?foo=1',
+ (string)($url = Horde_Util::addParameter($url, 'foo', 1)));
+ $this->assertEquals(
+ 'test?foo=1&bar=2',
+ (string)($url = Horde_Util::addParameter($url, 'bar', 2)));
+ $this->assertEquals(
+ 'test?foo=1&bar=2&baz=3',
+ (string)Horde_Util::addParameter($url, 'baz', 3));
+ $this->assertEquals(
+ 'test?foo=1&bar=2',
+ (string)Horde_Util::addParameter('test', array('foo' => 1, 'bar' => 2)));
+ $this->assertEquals(
+ 'test?foo=1&bar=2&baz=3',
+ (string)Horde_Util::addParameter('test?foo=1', array('bar' => 2, 'baz' => 3)));
+ $this->assertEquals(
+ 'test?foo=1&bar=2&baz=3',
+ (string)Horde_Util::addParameter('test?foo=1&bar=2', array('baz' => 3)));
+ $this->assertEquals(
+ 'test?foo=1&bar=3',
+ (string)Horde_Util::addParameter('test?foo=1&bar=2', array('foo' => 1, 'bar' => 3)));
+ $this->assertEquals(
+ 'test?foo=1&bar=2&baz=3',
+ (string)Horde_Util::addParameter('test?foo=1&bar=2', 'baz', 3));
+ $this->assertEquals(
+ 'test?foo=bar%26baz',
+ (string)($url = Horde_Util::addParameter('test', 'foo', 'bar&baz')));
+ $this->assertEquals(
+ 'test?foo=bar%26baz&x=y',
+ (string)Horde_Util::addParameter($url, 'x', 'y'));
+ $this->assertEquals(
+ 'test?foo=bar%26baz&x=y',
+ (string)Horde_Util::addParameter($url, 'x', 'y', false));
+ $this->assertEquals(
+ 'test?x=y&foo=bar%26baz',
+ (string)Horde_Util::addParameter(Horde_Util::addParameter('test', 'x', 'y'), 'foo', 'bar&baz'));
+ }
+
+ public function testRemoveParameter()
+ {
+ $url = 'test?foo=1&bar=2';
+ $this->assertEquals(
+ 'test?bar=2',
+ (string)Horde_Util::removeParameter($url, 'foo'));
+ $this->assertEquals(
+ 'test?foo=1',
+ (string)Horde_Util::removeParameter($url, 'bar'));
+ $this->assertEquals(
+ 'test',
+ (string)Horde_Util::removeParameter($url, array('foo', 'bar')));
+
+ $url = 'test?foo=1&bar=2';
+ $this->assertEquals(
+ 'test?bar=2',
+ (string)Horde_Util::removeParameter($url, 'foo'));
+ $this->assertEquals(
+ 'test?foo=1',
+ (string)Horde_Util::removeParameter($url, 'bar'));
+ $this->assertEquals(
+ 'test',
+ (string)Horde_Util::removeParameter($url, array('foo', 'bar')));
+
+ $url = 'test?foo=1&bar=2&baz=3';
+ $this->assertEquals(
+ 'test?bar=2&baz=3',
+ (string)Horde_Util::removeParameter($url, 'foo'));
+
+ $url = 'test?foo=1&bar=2&baz=3';
+ $this->assertEquals(
+ 'test?bar=2&baz=3',
+ (string)Horde_Util::removeParameter($url, 'foo'));
+ }
+}
--- /dev/null
+<?php
+/**
+ * @author Jan Schneider <jan@horde.org>
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @category Horde
+ * @package Util
+ * @subpackage UnitTests
+ */
+
+class Horde_Util_VariablesTest extends PHPUnit_Framework_TestCase
+{
+ public function testRemove()
+ {
+ $vars = new Horde_Variables(array(
+ 'a' => 'a',
+ 'b' => 'b',
+ 'c' => array(1, 2, 3),
+ 'd' => array(
+ 'z' => 'z',
+ 'y' => array(
+ 'f' => 'f',
+ 'g' => 'g'
+ )
+ )
+ ));
+
+ $vars->remove('a');
+ $vars->remove('d[y][g]');
+
+ $this->assertNull($vars->a);
+ $this->assertEquals('b', $vars->b);
+ $this->assertEquals(array(1, 2, 3), $vars->c);
+ $this->assertEquals(
+ array('z' => 'z',
+ 'y' => array('f' => 'f')),
+ $vars->d
+ );
+ }
+}
+++ /dev/null
---TEST--
-Horde_Variables::remove() tests
---FILE--
-<?php
-
-require dirname(__FILE__) . '/../../../lib/Horde/Array.php';
-require dirname(__FILE__) . '/../../../lib/Horde/Variables.php';
-
-$vars = new Horde_Variables(array(
- 'a' => 'a',
- 'b' => 'b',
- 'c' => array(1, 2, 3),
- 'd' => array(
- 'z' => 'z',
- 'y' => array(
- 'f' => 'f',
- 'g' => 'g'
- )
- )
-));
-
-$vars->remove('a');
-$vars->remove('d[y][g]');
-
-print_r($vars->a);
-print "\n";
-print_r($vars->b);
-print "\n";
-print_r($vars->c);
-print "\n";
-print_r($vars->d);
-
-?>
---EXPECT--
-b
-Array
-(
- [0] => 1
- [1] => 2
- [2] => 3
-)
-
-Array
-(
- [z] => z
- [y] => Array
- (
- [f] => f
- )
-
-)
+++ /dev/null
---TEST--
-Horde_Util::addParameter() tests
---FILE--
-<?php
-
-require_once 'Horde/Url.php';
-require_once dirname(__FILE__) . '/../../../lib/Horde/Util.php';
-
-$url = 'test';
-echo ($url = Horde_Util::addParameter($url, 'foo', 1)) . "\n";
-echo ($url = Horde_Util::addParameter($url, 'bar', 2)) . "\n";
-echo Horde_Util::addParameter($url, 'baz', 3) . "\n";
-echo Horde_Util::addParameter('test', array('foo' => 1, 'bar' => 2)) . "\n";
-echo Horde_Util::addParameter('test?foo=1', array('bar' => 2, 'baz' => 3)) . "\n";
-echo Horde_Util::addParameter('test?foo=1&bar=2', array('baz' => 3)) . "\n";
-echo Horde_Util::addParameter('test?foo=1&bar=2', array('foo' => 1, 'bar' => 3)) . "\n";
-echo Horde_Util::addParameter('test?foo=1&bar=2', 'baz', 3) . "\n";
-echo ($url = Horde_Util::addParameter('test', 'foo', 'bar&baz')) . "\n";
-echo Horde_Util::addParameter($url, 'x', 'y') . "\n";
-echo Horde_Util::addParameter($url, 'x', 'y', false) . "\n";
-echo Horde_Util::addParameter(Horde_Util::addParameter('test', 'x', 'y'), 'foo', 'bar&baz') . "\n";
-
-?>
---EXPECT--
-test?foo=1
-test?foo=1&bar=2
-test?foo=1&bar=2&baz=3
-test?foo=1&bar=2
-test?foo=1&bar=2&baz=3
-test?foo=1&bar=2&baz=3
-test?foo=1&bar=3
-test?foo=1&bar=2&baz=3
-test?foo=bar%26baz
-test?foo=bar%26baz&x=y
-test?foo=bar%26baz&x=y
-test?x=y&foo=bar%26baz
+++ /dev/null
---TEST--
-Horde_String:: case tests
---SKIPIF--
-<?php
-if (!setlocale(LC_ALL, 'tr_TR')) echo 'skip No Turkish locale installed.';
-?>
---FILE--
-<?php
-
-require_once dirname(__FILE__) . '/../../../lib/Horde/Util.php';
-require_once dirname(__FILE__) . '/../../../lib/Horde/String.php';
-
-echo Horde_String::upper('abCDefGHiI', true, 'us-ascii') . "\n";
-echo Horde_String::lower('abCDefGHiI', true, 'us-ascii') . "\n";
-echo "\n";
-echo Horde_String::upper('abCDefGHiI', true, 'Big5') . "\n";
-echo Horde_String::lower('abCDefGHiI', true, 'Big5') . "\n";
-echo "\n";
-setlocale(LC_ALL, 'tr_TR');
-echo strtoupper('abCDefGHiI') . "\n";
-echo strtolower('abCDefGHiI') . "\n";
-echo ucfirst('integer') . "\n";
-echo "\n";
-echo Horde_String::upper('abCDefGHiI') . "\n";
-echo Horde_String::lower('abCDefGHiI') . "\n";
-echo Horde_String::ucfirst('integer') . "\n";
-
-?>
---EXPECT--
-ABCDEFGHII
-abcdefghii
-
-ABCDEFGHII
-abcdefghii
-
-ABCDEFGHÝI
-abcdefghiý
-Ýnteger
-
-ABCDEFGHII
-abcdefghii
-Integer
+++ /dev/null
---TEST--
-Horde_String:: case PHP 6 tests
---SKIPIF--
-<?php
-if (version_compare(PHP_VERSION, '6.0', '<')) {
- echo 'skip mbstring is broken in PHP < 6.0';
-}
-?>
---FILE--
-<?php
-
-require_once dirname(__FILE__) . '/../../../lib/Horde/Util.php';
-require_once dirname(__FILE__) . '/../../../lib/Horde/String.php';
-
-echo Horde_String::upper('abCDefGHiI', true, 'iso-8859-9') . "\n";
-echo Horde_String::lower('abCDefGHiI', true, 'iso-8859-9') . "\n";
-echo "\n";
-echo Horde_String::ucfirst('integer', true, 'us-ascii') . "\n";
-echo Horde_String::ucfirst('integer', true, 'iso-8859-9') . "\n";
-
-?>
---EXPECT--
-ABCDEFGHÝI
-abcdefghiý
-
-Integer
-Ýnteger
+++ /dev/null
---TEST--
-Horde_String::length() tests
---FILE--
-<?php
-
-require_once dirname(__FILE__) . '/../../../lib/Horde/Util.php';
-require_once dirname(__FILE__) . '/../../../lib/Horde/String.php';
-
-echo Horde_String::length('Welcome', 'Big5'). "\n";
-echo Horde_String::length('Welcome', 'Big5'). "\n";
-echo Horde_String::length('Åwªï', 'Big5') . "\n";
-echo Horde_String::length('æ¡è¿å°', 'utf-8') . "\n";
-
-?>
---EXPECT--
-7
-7
-2
-3
+++ /dev/null
---TEST--
-Horde_String::pad() tests
---FILE--
-<?php
-
-require_once dirname(__FILE__) . '/../../../lib/Horde/Util.php';
-require_once dirname(__FILE__) . '/../../../lib/Horde/String.php';
-
-/* Simple single byte tests. */
-echo Horde_String::pad('abc', 2) . "\n";
-echo Horde_String::pad('abc', 3) . "\n";
-echo Horde_String::pad('abc', 4) . "\n";
-echo Horde_String::pad('abc', 4, ' ', STR_PAD_LEFT) . "\n";
-echo Horde_String::pad('abc', 4, ' ', STR_PAD_RIGHT) . "\n";
-echo Horde_String::pad('abc', 4, ' ', STR_PAD_BOTH) . "\n";
-echo Horde_String::pad('abc', 5, ' ', STR_PAD_LEFT) . "\n";
-echo Horde_String::pad('abc', 5, ' ', STR_PAD_RIGHT) . "\n";
-echo Horde_String::pad('abc', 5, ' ', STR_PAD_BOTH) . "\n";
-
-/* Long padding tests. */
-echo "\n";
-echo Horde_String::pad('abc', 10, '=-+', STR_PAD_LEFT) . "\n";
-echo Horde_String::pad('abc', 10, '=-+', STR_PAD_RIGHT) . "\n";
-echo Horde_String::pad('abc', 10, '=-+', STR_PAD_BOTH) . "\n";
-
-/* Multibyte tests. */
-echo "\n";
-echo Horde_String::pad('äöü', 4, ' ', STR_PAD_LEFT, 'UTF-8') . "\n";
-echo Horde_String::pad('äöü', 4, ' ', STR_PAD_RIGHT, 'UTF-8') . "\n";
-echo Horde_String::pad('äöü', 4, ' ', STR_PAD_BOTH, 'UTF-8') . "\n";
-echo "\n";
-echo Horde_String::pad('abc', 10, 'äöü', STR_PAD_LEFT, 'UTF-8') . "\n";
-echo Horde_String::pad('abc', 10, 'äöü', STR_PAD_RIGHT, 'UTF-8') . "\n";
-echo Horde_String::pad('abc', 10, 'äöü', STR_PAD_BOTH, 'UTF-8') . "\n";
-
-/* Special cases. */
-echo "\n";
-echo Horde_String::pad('abc', 4, ' ', STR_PAD_RIGHT, 'UTF-8') . "\n";
-
-
-?>
---EXPECT--
-abc
-abc
-abc
- abc
-abc
-abc
- abc
-abc
- abc
-
-=-+=-+=abc
-abc=-+=-+=
-=-+abc=-+=
-
- äöü
-äöü
-äöü
-
-äöüäöüäabc
-abcäöüäöüä
-äöüabcäöüä
-
-abc
+++ /dev/null
---TEST--
-Horde_Util::removeParameter() tests
---FILE--
-<?php
-
-require_once 'Horde/Url.php';
-require_once dirname(__FILE__) . '/../../../lib/Horde/Util.php';
-
-$url = 'test?foo=1&bar=2';
-echo Horde_Util::removeParameter($url, 'foo') . "\n";
-echo Horde_Util::removeParameter($url, 'bar') . "\n";
-echo Horde_Util::removeParameter($url, array('foo', 'bar')) . "\n";
-$url = 'test?foo=1&bar=2';
-echo Horde_Util::removeParameter($url, 'foo') . "\n";
-echo Horde_Util::removeParameter($url, 'bar') . "\n";
-echo Horde_Util::removeParameter($url, array('foo', 'bar')) . "\n";
-$url = 'test?foo=1&bar=2&baz=3';
-echo Horde_Util::removeParameter($url, 'foo') . "\n";
-$url = 'test?foo=1&bar=2&baz=3';
-echo Horde_Util::removeParameter($url, 'foo') . "\n";
-
-?>
---EXPECT--
-test?bar=2
-test?foo=1
-test
-test?bar=2
-test?foo=1
-test
-test?bar=2&baz=3
-test?bar=2&baz=3
+++ /dev/null
---TEST--
-Horde_String::substr() tests
---FILE--
-<?php
-
-require_once dirname(__FILE__) . '/../../../lib/Horde/Util.php';
-require_once dirname(__FILE__) . '/../../../lib/Horde/String.php';
-
-$string = "Lörem ipsüm dölör sit ämet";
-echo Horde_String::substr($string, 20, null, 'UTF-8') . "\n";
-echo Horde_String::substr($string, -6, null, 'utf-8') . "\n";
-echo Horde_String::substr($string, 0, 5, 'utf-8') . "\n";
-echo Horde_String::substr($string, 0, -21, 'utf-8') . "\n";
-echo Horde_String::substr($string, 6, 5, 'utf-8') . "\n";
-
-?>
---EXPECT--
-t ämet
-t ämet
-Lörem
-Lörem
-ipsüm
+++ /dev/null
---TEST--
-UTF-8 Horde_String:: tests
---FILE--
-<?php
-
-require_once dirname(__FILE__) . '/../../../lib/Horde/Util.php';
-require_once dirname(__FILE__) . '/../../../lib/Horde/String.php';
-
-/* The following strings were taken with permission from the UTF-8
- * sampler by Frank da Cruz <fdc@columbia.edu> and the Kermit Project
- * (http://www.columbia.edu/kermit/). The original page is located at
- * http://www.columbia.edu/kermit/utf8.html */
-
-// French 50
-echo Horde_String::length('Je peux manger du verre, ça ne me fait pas de mal.', 'UTF-8') . "\n";
-
-// Spanish 36
-echo Horde_String::length('Puedo comer vidrio, no me hace daño.', 'UTF-8') . "\n";
-
-// Portuguese 34
-echo Horde_String::length('Posso comer vidro, não me faz mal.', 'UTF-8') . "\n";
-
-// Brazilian Portuguese 34
-echo Horde_String::length('Posso comer vidro, não me machuca.', 'UTF-8') . "\n";
-
-// Italian 41
-echo Horde_String::length('Posso mangiare il vetro e non mi fa male.', 'UTF-8') . "\n";
-
-// English 39
-echo Horde_String::length('I can eat glass and it doesn\'t hurt me.', 'UTF-8') . "\n";
-
-// Norsk/Norwegian/Nynorsk 33
-echo Horde_String::length('Eg kan eta glas utan å skada meg.', 'UTF-8') . "\n";
-
-// Svensk/Swedish 36
-echo Horde_String::length('Jag kan äta glas utan att skada mig.', 'UTF-8') . "\n";
-
-// Dansk/Danish 45
-echo Horde_String::length('Jeg kan spise glas, det gør ikke ondt på mig.', 'UTF-8') . "\n";
-
-// Deutsch/German 41
-echo Horde_String::length('Ich kann Glas essen, ohne mir weh zu tun.', 'UTF-8') . "\n";
-
-// Russian 38
-echo Horde_String::length('Я могу есть стекло, оно мне не вредит.', 'UTF-8') . "\n";
-
-?>
---EXPECT--
-50
-36
-34
-34
-41
-39
-33
-36
-45
-41
-38
+++ /dev/null
---TEST--
-Horde_String::wordwrap() tests
---FILE--
-<?php
-
-require_once dirname(__FILE__) . '/../../../lib/Horde/Util.php';
-require_once dirname(__FILE__) . '/../../../lib/Horde/String.php';
-
-// Test default parameters and break character.
-$string = "Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.";
-echo Horde_String::wordwrap($string, 75, "\n", false, 'utf-8') . "\n\n";
-echo Horde_String::wordwrap($string, 30, "\n ", false, 'utf-8') . "\n\n";
-
-// Test existing line breaks.
-$string = "Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit.\nAliqüäm söllicitüdin fäücibüs mäüris ämet.";
-echo Horde_String::wordwrap($string, 75, "\n", false, 'utf-8') . "\n\n";
-$string = "Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm\nsöllicitüdin fäücibüs mäüris ämet.";
-echo Horde_String::wordwrap($string, 75, "\n", false, 'utf-8') . "\n\n";
-$string = "Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin\nfäücibüs mäüris ämet.";
-echo Horde_String::wordwrap($string, 75, "\n", false, 'utf-8') . "\n\n";
-
-// Test overlong words and word cut.
-$string = "Löremipsümdölörsitämet, cönsectetüerädipiscingelit.";
-echo Horde_String::wordwrap($string, 15, "\n", false, 'utf-8') . "\n\n";
-$string = "Löremipsümdölörsitämet, cönsectetüerädipiscingelit.";
-echo Horde_String::wordwrap($string, 15, "\n", true, 'utf-8') . "\n\n";
-
-// Test whitespace at wrap width.
-$string = "Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing";
-echo Horde_String::wordwrap($string, 27, "\n", false, 'utf-8') . "\n\n";
-echo Horde_String::wordwrap($string, 28, "\n", false, 'utf-8') . "\n\n";
-
-// Test line folding.
-$string = "Löremipsümdölörsitämet, cönsectetüerädipiscingelit.";
-echo Horde_String::wordwrap($string, 15, "\n", true, 'utf-8', true) . "\n\n";
-$string = "Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.";
-echo Horde_String::wordwrap($string, 31, "\n", false, 'utf-8', true) . "\n\n";
-$string = "Lörem ipsüm dölör sit; ämet: cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.";
-echo Horde_String::wordwrap($string, 31, "\n", false, 'utf-8', true) . "\n\n";
-$string = "Lörem ipsüm dölör sit; ämet:cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.";
-echo Horde_String::wordwrap($string, 31, "\n", false, 'utf-8', true) . "\n\n";
-$string = "Lörem ipsüm dölör sit; ämet; cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.";
-echo Horde_String::wordwrap($string, 31, "\n", false, 'utf-8', true) . "\n\n";
-$string = "Lörem ipsüm dölör sit; ämet;cönsectetüer ädipiscing elit. Aliqüäm söllicitüdin fäücibüs mäüris ämet.";
-echo Horde_String::wordwrap($string, 31, "\n", false, 'utf-8', true) . "\n\n";
-
-?>
---EXPECT--
-Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm
-söllicitüdin fäücibüs mäüris ämet.
-
-Lörem ipsüm dölör sit ämet,
- cönsectetüer ädipiscing elit.
- Aliqüäm söllicitüdin fäücibüs
- mäüris ämet.
-
-Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit.
-Aliqüäm söllicitüdin fäücibüs mäüris ämet.
-
-Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm
-söllicitüdin fäücibüs mäüris ämet.
-
-Lörem ipsüm dölör sit ämet, cönsectetüer ädipiscing elit. Aliqüäm
-söllicitüdin
-fäücibüs mäüris ämet.
-
-Löremipsümdölörsitämet,
-cönsectetüerädipiscingelit.
-
-Löremipsümdölör
-sitämet,
-cönsectetüerädi
-piscingelit.
-
-Lörem ipsüm dölör sit ämet,
-cönsectetüer ädipiscing
-
-Lörem ipsüm dölör sit ämet,
-cönsectetüer ädipiscing
-
-Löremipsümdölör
-sitämet,
- cönsectetüeräd
-ipiscingelit.
-
-Lörem ipsüm dölör sit ämet,
- cönsectetüer ädipiscing elit.
- Aliqüäm söllicitüdin fäücibüs
- mäüris ämet.
-
-Lörem ipsüm dölör sit;
- ämet:
- cönsectetüer ädipiscing elit.
- Aliqüäm söllicitüdin fäücibüs
- mäüris ämet.
-
-Lörem ipsüm dölör sit;
- ämet:cönsectetüer ädipiscing
- elit. Aliqüäm söllicitüdin
- fäücibüs mäüris ämet.
-
-Lörem ipsüm dölör sit;
- ämet;
- cönsectetüer ädipiscing elit.
- Aliqüäm söllicitüdin fäücibüs
- mäüris ämet.
-
-Lörem ipsüm dölör sit;
- ämet;cönsectetüer ädipiscing
- elit. Aliqüäm söllicitüdin
- fäücibüs mäüris ämet.