OSDN Git Service

Test for array_count_leaves(), array_merge_leaves()
authorhenoheno <henoheno>
Fri, 4 May 2007 14:44:06 +0000 (23:44 +0900)
committerhenoheno <henoheno>
Fri, 4 May 2007 14:44:06 +0000 (23:44 +0900)
spam/SpamTest.php
spam/spam.php

index 7f7050a..60c213b 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-// $Id: SpamTest.php,v 1.6 2007/05/01 05:04:39 henoheno Exp $
+// $Id: SpamTest.php,v 1.7 2007/05/04 14:42:28 henoheno Exp $
 // Copyright (C) 2007 heno
 //
 // Design test case for spam.php (called from runner.php)
@@ -24,6 +24,121 @@ class SpamTest extends PHPUnit_TestCase
                );
        }
 
+       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 testFunc_array_merge_leaves()
+       {
+               $array1 = array(2);
+               $array2 = array(1);
+               $result = array(2, 1);
+               $this->assertEquals($result, array_merge_leaves($array1, $array2));
+
+               // All NUMERIC keys are always renumbered from 0
+               $array1 = array('10' => 'f3');
+               $array2 = array('10' => 'f4');
+               $result = array('f3', 'f4');
+               $this->assertEquals($result, array_merge_leaves($array1, $array2));
+
+               // One more thing ...
+               $array1 = array('20' => 'f5');
+               $array2 = array();
+               $result = array('f5');
+               $this->assertEquals($result, array_merge_leaves($array1, $array2));
+
+               // Non-numeric keys and values will be marged as you think
+               $array1 = array('a' => 'f1');
+               $array2 = array('a' => 'f2');
+               $result = array('a' => array('f1', 'f2'));
+               $this->assertEquals($result, array_merge_leaves($array1, $array2));
+
+               // Non-numeric keys: An array and a value will be marged
+               $array1 = array('b' => array('k1'));
+               $array2 = array('b' => 'k2');
+               $result = array('b' => array('k1', 'k2'));
+               $this->assertEquals($result, array_merge_leaves($array1, $array2));
+
+               // 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',
+               );
+               $this->assertEquals($result, array_merge_leaves($array1, $array2));
+       }
+
        function testFunc_uri_pickup()
        {
                // 1st argument: Null
index 955a438..c31ea62 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-// $Id: spam.php,v 1.145 2007/05/04 13:43:59 henoheno Exp $
+// $Id: spam.php,v 1.146 2007/05/04 14:44:06 henoheno Exp $
 // Copyright (C) 2006-2007 PukiWiki Developers Team
 // License: GPL v2 or (at your option) any later version
 //
@@ -1143,12 +1143,10 @@ function check_uri_spam($target = '', $method = array())
                        if ($asap && $is_spam) break;
 
                        // Merge $blocked
-                       // TODO: about numeric keys, unique the hosts
-                       $blocked = array_merge_recursive($blocked, $_progress['blocked']);
+                       $blocked = array_merge_leaves($blocked, $_progress['blocked']);
 
                        // Merge $hosts
-                       // TODO: about numeric keys, unique the hosts
-                       $hosts = array_merge_recursive($hosts, $_progress['hosts']);
+                       $hosts   = array_merge_leaves($hosts,   $_progress['hosts']);
                }
 
                // Recount $sum['badhost']
@@ -1301,9 +1299,10 @@ function array_count_leaves($array = array(), $count_empty = FALSE)
        return $count;
 }
 
-// Merge two leaves
-function array_merge_leaves($array1 = array(), $array2 = array())
+// Merge two leaves' value
+function array_merge_leaves(& $array1, & $array2)
 {
+       // All NUMERIC keys are always renumbered from 0
        return array_merge_recursive($array1, $array2);
 }