OSDN Git Service

- fixed bug "ethna add-template" command ignored Ethna_Controller#getTemplatedir...
authormumumu-org <mumumu-org@2ef88817-412d-0410-a32c-8029a115e976>
Thu, 26 Mar 2009 08:26:48 +0000 (08:26 +0000)
committermumumu-org <mumumu-org@2ef88817-412d-0410-a32c-8029a115e976>
Thu, 26 Mar 2009 08:26:48 +0000 (08:26 +0000)
CHANGES
class/Ethna_Controller.php
class/Plugin/Generator/Ethna_Plugin_Generator_Template.php
class/Plugin/Handle/Ethna_Plugin_Handle_AddTemplate.php
test/Plugin/Handle/Ethna_Plugin_Handle_AddTemplate_Test.php [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 0806ff1..59a0257 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,9 @@
 
 *** bug fix
 
+- Ethna_Controller#getTemplatedir を無視してテンプレートディレクトリを決定していたバグを修正(thanks: hiko)
+-- getTemplatedirメソッドをオーバライドしても強制的にロケールが付加されていた
+-- https://sourceforge.jp/ticket/browse.php?group_id=1343&tid=15570
 - "ethna pear-local list -a" の実行結果がエラーになってしまうバグを修正
 -- https://sourceforge.jp/ticket/browse.php?group_id=1343&tid=15760
 - safe-mode が ON の際に、CacheManager_Localfile がディレクトリを生成できないので、tmp ディレクトリ直下にキャッシュファイルを作成するようにした
index a7db244..7f32a64 100644 (file)
@@ -459,9 +459,11 @@ class Ethna_Controller
         $template = $this->getDirectory('template');
 
         // 言語別ディレクトリ
-        if (file_exists($template . '/' . $this->locale)) {
+        // _getDerfaultLanguageメソッドでロケールが指定されていた場合は、
+        // テンプレートディレクトリにも自動的にそれを付加する。
+        if (!empty($this->locale)) {
             $template .= '/' . $this->locale;
-        }
+        } 
 
         return $template;
     }
index 23d0dc2..0e80cf0 100644 (file)
@@ -39,18 +39,10 @@ class Ethna_Plugin_Generator_Template extends Ethna_Plugin_Generator
         //  ロケール名がディレクトリに含まれていない場合は、
         //  ディレクトリがないためなのでそれを補正 
         $tpl_dir = $this->ctl->getTemplatedir();
-        if (!empty($locale) && strpos($tpl_dir, $locale) === false) {
-            $tpl_dir = $this->ctl->getDirectory('template');
-            $tpl_dir .= "/$locale";
-        }
-        if ($tpl_dir{strlen($tpl_dir)-1} != '/') {
-            $tpl_dir .= '/';
-        }
         $tpl_path = $this->ctl->getDefaultForwardPath($forward_name);
 
         // entity
-        $entity = $tpl_dir . $tpl_path;
+        $entity = $tpl_dir . '/' . $tpl_path;
         Ethna_Util::mkdir(dirname($entity), 0755);
 
         // skelton
index 9b3fe4a..b8715f1 100644 (file)
@@ -63,7 +63,7 @@ class Ethna_Plugin_Handle_AddTemplate extends Ethna_Plugin_Handle_AddView
     {
         return <<<EOS
 add new template to project:
-    {$this->id} [-b|--basedir=dir] [-s|--skelfile=file] [-l|--locale] [-e|--encoding] [template]
+    {$this->id} [-b|--basedir=dir] [-s|--skelfile=file] [-l|--locale=locale] [-e|--encoding] [template]
 
 EOS;
     }
@@ -74,7 +74,7 @@ EOS;
     function getUsage()
     {
         return <<<EOS
-ethna {$this->id} [-b|--basedir=dir] [-s|--skelfile=file] [-l|--locale] [-e|--encoding] [template]
+ethna {$this->id} [-b|--basedir=dir] [-s|--skelfile=file] [-l|--locale=locale] [-e|--encoding] [template]
 EOS;
     }
 }
diff --git a/test/Plugin/Handle/Ethna_Plugin_Handle_AddTemplate_Test.php b/test/Plugin/Handle/Ethna_Plugin_Handle_AddTemplate_Test.php
new file mode 100644 (file)
index 0000000..e0eabd7
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+// vim: foldmethod=marker
+/**
+ *  Ethna_Plugin_Handle_AddTemplate_Test.php
+ *
+ *  @author     Yoshinari Takaoka <takaoka@beatcraft.com>
+ *  @version    $Id$
+ */
+
+require_once ETHNA_BASE . '/test/Ethna_MockProject.php';
+
+//{{{  Ethna_Plugin_Handle_AddTemplate_Test
+/**
+ *  Test Case For Ethna_Plugin_Handle_AddTemplate_Test
+ *
+ *  @access public
+ */
+class Ethna_Plugin_Handle_AddTemplate_Test extends Ethna_UnitTestBase 
+{
+    var $proj;
+
+    function setUp()
+    {
+        $this->proj = new Ethna_MockProject();
+        $r = $this->proj->create();
+        if (Ethna::isError($r)) {
+            $this->fail($r->getMessage());    
+        }
+    }
+
+    function tearDown()
+    {
+        $this->proj->delete();
+    }
+
+    function test_template_dir_exists()
+    {
+        $ctl =& $this->proj->getController(); 
+
+        //    default locale 
+        $r = $this->proj->runCmd('add-template', array('test'));
+        $template_dir = $ctl->getTemplatedir();
+        $this->assertTrue(file_exists($template_dir));
+
+        //    new locale 
+        $r = $this->proj->runCmd('add-template', array('-l', 'en_US', 'test'));
+        $template_dir = $ctl->getTemplatedir();
+        $this->assertTrue(file_exists($template_dir));
+    }
+
+    function test_cmd_option()
+    {
+        //    unrecognized option
+        $r = $this->proj->runCmd('add-template', array('-k'));
+        $this->assertTrue(Ethna::isError($r));
+        $this->assertEqual('unrecognized option -k', $r->getMessage());
+
+        //    skel requires an argument
+        $r = $this->proj->runCmd('add-template', array('-s'));
+        $this->assertTrue(Ethna::isError($r));
+        $this->assertEqual('option -s requires an argument', $r->getMessage());
+
+        $r = $this->proj->runCmd('add-template', array('--skelfile'));
+        $this->assertTrue(Ethna::isError($r));
+        $this->assertEqual('option --skelfile requires an argument', $r->getMessage());
+
+        //    locale requires an argument
+        $r = $this->proj->runCmd('add-template', array('-l'));
+        $this->assertTrue(Ethna::isError($r));
+        $this->assertEqual('option -l requires an argument', $r->getMessage());
+
+        $r = $this->proj->runCmd('add-template', array('--locale'));
+        $this->assertTrue(Ethna::isError($r));
+        $this->assertEqual('option --locale requires an argument', $r->getMessage());
+
+        //    template name isn't set
+        $r = $this->proj->runCmd('add-template', array());
+        $this->assertTrue(Ethna::isError($r));
+        $this->assertEqual('template name isn\'t set.', $r->getMessage());
+
+        //    invalid locale
+        $r = $this->proj->runCmd('add-template', array('-l', 'invalid::locale', 'test'));
+        $this->assertTrue(Ethna::isError($r));
+        $this->assertEqual('You specified locale, but invalid : invalid::locale', $r->getMessage());
+
+        //    normal command exexute
+        $r = $this->proj->runCmd('add-template', array('-l', 'ja_JP', 'test'));
+        $this->assertFalse(Ethna::isError($r));
+    }
+}
+// }}}
+
+?>