*** bug fix
+- "ethna pear-local list -a" の実行結果がエラーになってしまうバグを修正
+-- https://sourceforge.jp/ticket/browse.php?group_id=1343&tid=15760
- safe-mode が ON の際に、CacheManager_Localfile がディレクトリを生成できないので、tmp ディレクトリ直下にキャッシュファイルを作成するようにした
-- skel/skel.app_manager.php も修正
- APPID-ini.php が存在しない場合,またはURLが設定にない場合,デフォルトURLが HTTP_HOST で設定されていたが,末尾に / がなかったので修正
}
} else { // オプションとして解釈されない
- $nonparsed_arguments[] = $arg;
+
+ // non-parsed なオプションに辿り着いた
+ // ら、それ以降の解釈を停止する
+ // つまり、それ以降は全て値として解釈する
+ //
+ // これは POSIX_CORRECT な実装であって
+ // GNU Getopt な実装ではないが、実際に
+ // Console_Getopt で行われている以上、
+ // それに従った実装
+ $nonparsed_arguments = array_slice($args, $pos);
+ break;
}
}
$parsed_arg = array_shift($r);
$this->assertEqual('a', $parsed_arg[0][0]);
$this->assertNULL($parsed_arg[0][1]);
- $this->assertEqual('c', $parsed_arg[1][0]);
- $this->assertEqual('d', $parsed_arg[1][1]);
- $this->assertEqual('e', $parsed_arg[2][0]);
- $this->assertNULL($parsed_arg[2][1]);
$nonparsed_arg = array_shift($r);
$this->assertEqual('b', $nonparsed_arg[0]);
- $this->assertEqual('f', $nonparsed_arg[1]);
+ $this->assertEqual('-c', $nonparsed_arg[1]);
+ $this->assertEqual('d', $nonparsed_arg[2]);
+ $this->assertEqual('-e', $nonparsed_arg[3]);
+ $this->assertEqual('f', $nonparsed_arg[4]);
}
function test_shortopt_complex()
// complex option part 1.
$args = array();
$shortopt = 'ab:c::';
- $args = array('-abc', '-cd');
+ $args = array('-abcd', '-cd');
$r = $this->opt->getopt($args, $shortopt);
$this->assertFalse(Ethna::isError($r));
$this->assertNULL($parsed_arg[0][1]);
$this->assertEqual('b', $parsed_arg[1][0]);
- $this->assertEqual('c', $parsed_arg[1][1]);
+ $this->assertEqual('cd', $parsed_arg[1][1]);
$this->assertEqual('c', $parsed_arg[2][0]);
$this->assertEqual('d', $parsed_arg[2][1]);
$nonparsed_arg = array_shift($r);
$this->assertEqual('hoge', $nonparsed_arg[0]);
- // --foo option value is bar. hoge is nonparsed.
- $args = array('--foo', 'bar', 'hoge');
+ // --foo option value is bar. hoge, -fuga is nonparsed.
+ $args = array('--foo', 'bar', 'hoge', '-fuga');
$shortopt = NULL;
$longopt = array("foo=");
$r = $this->opt->getopt($args, $shortopt, $longopt);
$nonparsed_arg = array_shift($r);
$this->assertEqual('hoge', $nonparsed_arg[0]);
+ $this->assertEqual('-fuga', $nonparsed_arg[1]);
}
function test_longopt_optional()
$this->assertEqual('bar', $parsed_arg[1][1]);
$this->assertequal('--bar', $parsed_arg[2][0]);
$this->assertEqual('moge', $parsed_arg[2][1]);
- $this->assertequal('--hoge', $parsed_arg[3][0]);
- $this->assertNULL($parsed_arg[3][1]);
$nonparsed_arg = array_shift($r);
$this->assertEqual('hoge', $nonparsed_arg[0]);
+ $this->assertEqual('--hoge', $nonparsed_arg[1]);
}
// }}}
}
}
}
if (!$in_basedir_opt) {
- $options[] = '-b';
- $options[] = $this->proj_basedir;
+ $base_opt = array('-b', $this->proj_basedir);
+ $options = array_merge($base_opt, $options);
}
$eh =& new Ethna_Handle();
$this->assertTrue(isset($catalog['template i18n multiple modifier']));
}
+ function test_cmd_option()
+ {
+ // unrecognized option
+ $r = $this->proj->runCmd('i18n', array('-k'));
+ $this->assertTrue(Ethna::isError($r));
+ $this->assertEqual('unrecognized option -k', $r->getMessage());
+
+ // --locale(requires an argument)
+ $r = $this->proj->runCmd('i18n', array('-l'));
+ $this->assertTrue(Ethna::isError($r));
+ $this->assertEqual('option -l requires an argument', $r->getMessage());
+
+ $r = $this->proj->runCmd('i18n', array('-l', 'ko_KR'));
+ $this->assertFalse(Ethna::isError($r));
+
+ $r = $this->proj->runCmd('i18n', array('--locale'));
+ $this->assertTrue(Ethna::isError($r));
+ $this->assertEqual('option --locale requires an argument', $r->getMessage());
+
+ // --gettext option only
+ $r = $this->proj->runCmd('i18n', array('-g'));
+ $this->assertFalse(Ethna::isError($r));
+
+ $r = $this->proj->runCmd('i18n', array('--gettext'));
+ $this->assertFalse(Ethna::isError($r));
+
+ // --gettext not allowed an argument
+ $r = $this->proj->runCmd('i18n', array('--gettext=foo'));
+ $this->assertTrue(Ethna::isError($r));
+ $this->assertEqual("option --gettext doesn't allow an argument", $r->getMessage());
+
+ // --locale and --gettext mixin
+ $r = $this->proj->runCmd('i18n', array('-g', '-l', 'ko_KR'));
+ $this->assertFalse(Ethna::isError($r));
+
+ $r = $this->proj->runCmd('i18n', array('--gettext', '--locale=ko_KR'));
+ $this->assertFalse(Ethna::isError($r));
+ }
function run_i18n_cmd()
{
return;
}
}
+
+
}
// }}}
--- /dev/null
+<?php
+// vim: foldmethod=marker
+/**
+ * Ethna_Plugin_Handle_PearLocal_Test.php
+ *
+ * @author Yoshinari Takaoka <takaoka@beatcraft.com>
+ * @version $Id$
+ */
+
+require_once ETHNA_BASE . '/test/Ethna_MockProject.php';
+
+//{{{ Ethna_Plugin_Handle_PearLocal_Test
+/**
+ * Test Case For Ethna_Plugin_Handle_PearLocal_Test
+ *
+ * @access public
+ */
+class Ethna_Plugin_Handle_PearLocal_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_cmd_option()
+ {
+ // unrecognized option
+ $r = $this->proj->runCmd('pear-local', array('-k'));
+ $this->assertTrue(Ethna::isError($r));
+ $this->assertEqual('unrecognized option -k', $r->getMessage());
+
+ // pear list -a(get no error)
+ // @see http://sourceforge.jp/ticket/browse.php?group_id=1343&tid=15760
+ $r = $this->proj->runCmd('pear-local', array('list', '-a'));
+ $this->assertFalse(Ethna::isError($r));
+
+ // channel requires an argument
+ $r = $this->proj->runCmd('pear-local', array('-c'));
+ $this->assertTrue(Ethna::isError($r));
+ $this->assertEqual('option -c requires an argument', $r->getMessage());
+
+ $r = $this->proj->runCmd('pear-local', array('--channel'));
+ $this->assertTrue(Ethna::isError($r));
+ $this->assertEqual('option --channel requires an argument', $r->getMessage());
+
+ // normal command exexute
+ $r = $this->proj->runCmd('pear-local', array('install', 'Date'));
+ $this->assertFalse(Ethna::isError($r));
+ }
+}
+// }}}
+
+?>