OSDN Git Service

- fixed bug smarty_modifier_unique did not follow specification.
authormumumu-org <mumumu-org@2ef88817-412d-0410-a32c-8029a115e976>
Wed, 31 Dec 2008 17:21:03 +0000 (17:21 +0000)
committermumumu-org <mumumu-org@2ef88817-412d-0410-a32c-8029a115e976>
Wed, 31 Dec 2008 17:21:03 +0000 (17:21 +0000)
CHANGES
class/Ethna_SmartyPlugin.php
test/Ethna_SmartyPlugin_Test.php

diff --git a/CHANGES b/CHANGES
index b21ecd9..df99e05 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -15,6 +15,7 @@
 - Ethna_Renderer_Rhaco.php を 1.x 系の最新バージョン 1.6.1 に追随 (thanks: id:akiraneko [ethna-users:1081])
 - 複数ファイルをアップロード(つまり配列を使用)する際、必須チェックが機能しなかったバグを修正(thanks: id:syachi5150)
 - ethna add-app-manager コマンドで生成されるアプリケーションマネージャのクラス名が、[Appid]_Controller#getManagerClassName の設定を反映するように修正。
+- smarty_modifier_unique プラグインが、仕様通り動作していなかったバグを修正
 
 ** 2.5.0-preview2
 
index 4429795..eab05a3 100644 (file)
@@ -196,9 +196,9 @@ function smarty_modifier_unique($array, $key = null)
             if (isset($v[$key]) == false) {
                 continue;
             }
-            $tmp[$v[$key]] = $v;
+            $tmp[] = $v[$key];
         }
-        return $tmp;
+        return array_unique($tmp);
     } else {
         return array_unique($array);
     }
index e1529ee..f4c1e0a 100644 (file)
@@ -224,14 +224,48 @@ class Ethna_SmartyPlugin_Test extends Ethna_UnitTestBase
 
         $actual = smarty_modifier_checkbox(new stdClass());
         $this->assertNULL($actual);
+    }
+    // }}}
 
-        $fp = fopen('ethna_run_test.sh', 'r', true);
-        if (!$fp) $this->fail('could not open file');
-        $actual = smarty_modifier_checkbox($fp);
-        $this->assertNULL($actual);
-        fclose($fp);
+    // {{{  test_smarty_modifier_unique
+    function test_smarty_modifier_unique()
+    {
+        //  配列でない場合
+        $result = smarty_modifier_unique('a');
+        $this->assertTrue('a', $result);
+
+        $result = smarty_modifier_unique(NULL);
+        $this->assertNULL($result);
+
+        //  第2引数なしの場合
+        $input = array(1, 2, 1, 1, 3, 2, 4);
+        $result = smarty_modifier_unique($input);
+        $this->assertTrue(is_numeric(array_search(1, $result)));
+        $this->assertTrue(is_numeric(array_search(2, $result)));
+        $this->assertTrue(is_numeric(array_search(3, $result)));
+        $this->assertTrue(is_numeric(array_search(4, $result)));
+        $this->assertFalse(is_numeric(array_search(5, $result)));
+
+        //  第2引数ありの場合
+        $input = array(
+                     array("foo" => 1, "bar" => 4),
+                     array("foo" => 1, "bar" => 4),
+                     array("foo" => 1, "bar" => 4),
+                     array("foo" => 2, "bar" => 5),
+                     array("foo" => 3, "bar" => 6),
+                     array("foo" => 2, "bar" => 5),
+                 );
+        $result = smarty_modifier_unique($input, 'bar');
+        $this->assertTrue(is_numeric(array_search(4, $result)));
+        $this->assertTrue(is_numeric(array_search(5, $result)));
+        $this->assertTrue(is_numeric(array_search(6, $result)));
+        $this->assertFalse(is_numeric(array_search(1, $result)));
+        $this->assertFalse(is_numeric(array_search(2, $result)));
+        $this->assertFalse(is_numeric(array_search(3, $result)));
     }
     // }}}
+
+
 }
 // }}}