<?php
-// $Id: SpamTest.php,v 1.25 2009/01/02 10:37:47 henoheno Exp $
+// $Id: SpamTest.php,v 1.26 2009/01/02 10:44:53 henoheno Exp $
// Copyright (C) 2007 heno
//
// Design test case for spam.php (called from runner.php)
class SpamTest extends PHPUnit_TestCase
{
- function testFunc_delimiter_reverse()
- {
- // Simple
- $this->assertEquals('com.example.bar.foo',
- delimiter_reverse('foo.bar.example.com'));
-
- // A vector (an simple array)
- $array = array('foo.ba2r', 'foo.bar2');
- $this->assertEquals(array('ba2r|foo', 'bar2|foo'),
- delimiter_reverse($array, '.', '|'));
-
- // Note: array_map() vanishes all keys
- $array = array('FB' => 'foo.ba2r', 'FB2' => 'foo.bar2');
- $this->assertEquals(array('ba2r|foo', 'bar2|foo'),
- delimiter_reverse($array, '.', '|'));
-
- // A tree (recurse)
- $array = array('foo.ba2r', 'foo.bar2', array('john.doe', 'bob.dude'));
- $this->assertEquals(array('ba2r|foo', 'bar2|foo', array('doe|john', 'dude|bob')),
- delimiter_reverse($array, '.', '|'));
-
- // Nothing changes
- $this->assertEquals('100', delimiter_reverse('100'));
- $this->assertEquals(array(), delimiter_reverse(array()));
-
- // Invalid cases
- $this->assertEquals(FALSE, delimiter_reverse(TRUE));
- $this->assertEquals(FALSE, delimiter_reverse(FALSE));
- $this->assertEquals(FALSE, delimiter_reverse(NULL));
- $this->assertEquals(FALSE, delimiter_reverse(100));
- $this->assertEquals(FALSE, delimiter_reverse('100', FALSE));
- $this->assertEquals(FALSE, delimiter_reverse('100', 0));
- $this->assertEquals(FALSE, delimiter_reverse('100', '0', 0));
- }
-
+ // Utility
function setup_string_null()
{
return array(
);
}
- function testFunc_strings()
- {
- // 1st argument: Null
- $this->assertEquals('', strings(NULL, 0));
- $this->assertEquals('', strings(TRUE, 0));
- $this->assertEquals('', strings(FALSE, 0));
- $this->assertEquals('', strings('', 0));
- $this->assertEquals('0', strings(0, 0));
- $this->assertEquals('1', strings(1, 0));
-
- // Setup
- $t1 = '1' . "\n";
- $t2 = '12' . "\n";
- $t3 = '123' . "\n";
- $t4 = '1234' . "\n";
- $t5 = '12345';
- $test = $t1 . $t2 . $t3 . $t4 . $t5;
-
- // Minimum length
- $this->assertEquals($t1 . $t2 . $t3 . $t4 . $t5, strings($test, -1));
- $this->assertEquals($t1 . $t2 . $t3 . $t4 . $t5, strings($test, 0));
- $this->assertEquals($t1 . $t2 . $t3 . $t4 . $t5, strings($test, 1));
- $this->assertEquals( $t2 . $t3 . $t4 . $t5, strings($test, 2));
- $this->assertEquals( $t3 . $t4 . $t5, strings($test, 3));
- $this->assertEquals( $t4 . $t5, strings($test, 4));
- $this->assertEquals( $t4 . $t5, strings($test)); // Default
- $this->assertEquals( $t5, strings($test, 5));
-
- // Preserve the last newline
- $this->assertEquals($t4 . $t5, strings($test , 4));
- $this->assertEquals($t4 . $t5 . "\n", strings($test . "\n", 4));
-
- // Ignore sequential spaces, and spaces at the beginning/end of lines
- $test = ' A' . ' ' . ' ' . 'B ';
- $this->assertEquals($test, strings($test, 0, FALSE));
- $this->assertEquals('A B', strings($test, 0, TRUE ));
- }
-
- function testFunc_array_count_leaves()
- {
- // Empty array = 0, if option is not set
- $array = array();
- $this->assertEquals(0, array_count_leaves($array, FALSE));
- $this->assertEquals(1, array_count_leaves($array, TRUE));
- $array = array(
- array(
- array()
- )
- );
- $this->assertEquals(0, array_count_leaves($array, FALSE));
- $this->assertEquals(1, array_count_leaves($array, TRUE));
-
- // One leaf = 1
- foreach(array(NULL, TRUE, FALSE, -1, 0, 1, '', 'foobar') as $value) {
- $this->assertEquals(1, array_count_leaves($value, FALSE));
- $this->assertEquals(1, array_count_leaves($value, TRUE));
- }
-
- // Compisite
- $array = array(
- 1,
- 'v1',
- array(), // Empty array
- array(
- 2,
- 'v2',
- 'k1' => TRUE,
- 'k2' => FALSE,
- 'k3' => array(), // Empty array
- 'k4' => array(
- 3,
- 'v3',
- 'k5' => NULL,
- 'k6' => array(), // Empty array
- ),
- ),
- 'k7' => 4,
- 'k8' => 'v4',
- 'k9' => array(), // Empty array
- 'k10' => array(
- 5,
- 'v5',
- 'k11' => NULL,
- 'k12' => array(), // Empty array
- ),
- );
- $this->assertEquals(14, array_count_leaves($array, FALSE));
- $this->assertEquals(19, array_count_leaves($array, TRUE));
- }
-
- function testPhpFunc_array_unique()
- {
- $this->assertEquals(array(1), array_unique(array(1, 1)));
-
- // Keys are preserved, array()s inside are preserved
- $this->assertEquals(
- array(0, 2 => array(1, 1), 3 => 2),
- array_unique(
- array(0, 0, array(1, 1), 2, 2)
- )
- );
-
- // Keys are preserved
- $this->assertEquals(
- array(0, 2 => array(1, 1), 3 => 2),
- array_unique(array(0, 0, array(1, 1), 2, 2))
- );
-
- // ONLY the first array() is preserved
- $this->assertEquals(
- array(0 => array(1, 1)),
- array_unique(array_unique(array(0 => array(1, 1), 'a' => array(2,2), 'b' => array(3, 3))))
- );
- }
-
- function testFunc_array_merge_leaves()
- {
- // PHP array_unique_recursive(), PHP array_merge_leaves(), and array_merge_leaves()
- $array1 = array(1);
- $array2 = array(1);
- $result = array_merge_recursive($array1, $array2);
- $this->assertEquals(array(1, 1), $result);
- $result = array_unique_recursive($result);
- $this->assertEquals(array(1), $result);
- $result = array_merge_leaves($array1, $array2);
- $this->assertEquals(array(1), $result);
-
- $array1 = array(2);
- $array2 = array(1);
- $result = array_merge_recursive($array1, $array2);
- $this->assertEquals(array(2, 1), $result);
- $result = array_merge_leaves($array1, $array2);
- $this->assertEquals(array(1), $result);
-
- // All NUMERIC keys are always renumbered from 0?
- $array1 = array('10' => 'f3');
- $array2 = array('10' => 'f4');
- $result = array_merge_recursive($array1, $array2);
- $this->assertEquals(array(0 => 'f3', 1 => 'f4'), $result);
- $result = array_merge_leaves($array1, $array2);
- $this->assertEquals(array(10 => 'f4'), $result);
-
- // One more thing ...
- $array1 = array('20' => 'f5');
- $array2 = array();
- $result = array_merge_recursive($array1, $array2);
- $this->assertEquals(array(0 => 'f5'), $result);
- $result = array_merge_leaves($array1, $array2);
- $this->assertEquals(array(20 => 'f5'), $result);
-
- // Non-numeric keys and values will be marged as you think?
- $array1 = array('a' => 'f1');
- $array2 = array('a' => 'f2');
- $result = array_merge_recursive($array1, $array2);
- $this->assertEquals(array('a' => array('f1', 'f2')), $result);
- $result = array_merge_leaves($array1, $array2);
- $this->assertEquals(array('a' => 'f2'), $result);
-
- // Non-numeric keys: An array and a value will be marged?
- $array1 = array('b' => array('k1'));
- $array2 = array('b' => 'k2');
- $result = array_merge_recursive($array1, $array2);
- $this->assertEquals(array('b' => array(0 => 'k1', 1 => 'k2')), $result);
- $result = array_merge_leaves($array1, $array2);
- $this->assertEquals(array('b' => array(0 => 'k1')), $result);
-
- // Combination?
- $array1 = array(
- 2,
- 'a' => 'f1',
- '10' => 'f3',
- '20' => 'f5',
- 'b' => array('k1'),
- );
- $array2 = array(
- 1,
- 'a' => 'f2',
- '10' => 'f4',
- 'b' => 'k2',
- );
- $result = array (
- 2,
- 'a' => array (
- 'f1',
- 'f2',
- ),
- 'f3',
- 'f5',
- 'b' => array (
- 'k1',
- 'k2',
- ),
- 1,
- 'f4',
- );
- $result2 = array (
- 0 => 1,
- 10 => 'f4',
- 20 => 'f5',
- 'a' => 'f2',
- 'b' => array ('k1'),
- );
- $this->assertEquals($result, array_merge_recursive($array1, $array2));
- $this->assertEquals($result2, array_merge_leaves($array1, $array2));
-
- // Values will not be unique?
- $array1 = array(5, 4);
- $array2 = array(4, 5);
- $result = array_merge_recursive($array1, $array2);
- $this->assertEquals(array(5, 4, 4, 5), $result);
- $this->assertEquals(array(5, 4), array_unique_recursive($result));
- $this->assertEquals(array(0=>4, 1=>5), array_merge_leaves($array1, $array2));
-
- // One more thing ...?
- $array1 = array('b' => array('k3'));
- $array2 = array('b' => 'k3');
- $result = array_merge_recursive($array1, $array2);
- $this->assertEquals(array('b' => array('k3', 'k3')), $result);
- $result = array_unique_recursive($result);
- $this->assertEquals(array('b' => array('k3')), $result);
- $result = array_merge_leaves($array1, $array2);
- $this->assertEquals(array('b' => array('k3')), $result);
-
- // Preserve numeric keys?
- $array1 = array('a' => array('' => NULL));
- $array2 = array('a' => array(5 => NULL));
- $array3 = array('a' => array(8 => NULL));
- //
- // BAD: PHP array_merge_recursive() don't preserve numeric keys
- $result = array_merge_recursive($array1, $array2);
- $this->assertEquals(array('a' => array('' => NULL, 0 => NULL)), $result); // 0?
- $result = array_merge_recursive($array2, $array3);
- $this->assertEquals(array('a' => array(5 => NULL, 6 => NULL)), $result); // 6?
- //
- $result = array_merge_leaves($array1, $array2);
- $this->assertEquals(array('a' => array('' => NULL, 5 => NULL)), $result); // 0?
- $result = array_merge_leaves($array2, $array3);
- $this->assertEquals(array('a' => array(5 => NULL, 8 => NULL)), $result); // 6?
-
- // Merging array leaves
- $array1 = array('a' => TRUE);
- $array2 = array('b' => FALSE);
- $result = array_merge_leaves($array1, $array2);
- $this->assertEquals(array('a' => TRUE, 'b' => FALSE), $result);
-
- $array1 = array('a' => TRUE);
- $array2 = array('a' => array('aa' => TRUE));
- $this->assertEquals($array2, array_merge_leaves($array1, $array2));
- $this->assertEquals($array2, array_merge_leaves($array2, $array1));
-
- $array1 = array('a' => array('a1' => TRUE));
- $array2 = array('a' => array('a2' => FALSE));
- $result = array_merge_leaves($array1, $array2);
- $this->assertEquals(array('a' => array('a1' => TRUE, 'a2' => FALSE)), $result);
- }
-
function testFunc_generate_glob_regex()
{
// 1st argument: Null