Add basic Cli interface.
authorGunnar Wrobel <p@rdus.de>
Tue, 14 Dec 2010 04:38:29 +0000 (05:38 +0100)
committerGunnar Wrobel <p@rdus.de>
Tue, 14 Dec 2010 17:26:56 +0000 (18:26 +0100)
framework/Kolab_Storage/bin/kolab-storage [new file with mode: 0755]
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Cli.php [new file with mode: 0644]
framework/Kolab_Storage/package.xml
framework/Kolab_Storage/script/Horde/Kolab/Storage/test_drivers.php [deleted file]
framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/CliTest.php [new file with mode: 0644]

diff --git a/framework/Kolab_Storage/bin/kolab-storage b/framework/Kolab_Storage/bin/kolab-storage
new file mode 100755 (executable)
index 0000000..cce42f9
--- /dev/null
@@ -0,0 +1,8 @@
+#!/usr/bin/env php
+<?php
+if (strpos('@php_dir@', '@php_dir') === 0) {
+    set_include_path(dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'lib' . PATH_SEPARATOR . get_include_path());
+}
+
+require_once 'Horde/Autoloader/Default.php';
+Horde_Kolab_Storage_Cli::main();
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Cli.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Cli.php
new file mode 100644 (file)
index 0000000..e87d640
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Command line tools for Kolab storage.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package  Kolab_Storage
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+
+/**
+ * Command line tools for Kolab storage.
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you did not
+ * receive this file, see
+ * http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+ *
+ * @category Kolab
+ * @package  Kolab_Storage
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+class Horde_Kolab_Storage_Cli
+{
+    /**
+     * The main entry point for the application.
+     *
+     * @param array $parameters A list of named configuration parameters.
+     * <pre>
+     * 'parser'   - (array)     Parser configuration parameters.
+     *   'class'  - (string)    The class name of the parser to use.
+     * 'output'   - (Horde_Cli) The output handler.
+     * </pre>
+     */
+    static public function main(array $parameters = array())
+    {
+        $parser = self::_prepareParser($parameters);
+        if (empty($parameters['output'])) {
+            if (!class_exists('Horde_Cli')) {
+                throw new Horde_Kolab_Storage_Exception('The Horde_Cli package seems to be missing (Class Horde_Cli is missing)!');
+            }
+            $cli = Horde_Cli::init();
+        } else {
+            $cli = $parameters['output'];
+        }
+        list($options, $arguments) = $parser->parseArgs();
+        $cli->message('OK');
+    }
+
+    static private function _prepareParser(array $parameters = array())
+    {
+        if (empty($parameters['parser']['class'])) {
+            $parser_class = 'Horde_Argv_Parser';
+        } else {
+            $parser_class = $parameters['parser']['class'];
+        }
+        return new $parser_class(
+            array(
+                'usage' => '%prog ' . _("[options]")
+            )
+        );
+    }
+}
\ No newline at end of file
index 3ee19ce..6bc8a3d 100644 (file)
@@ -31,8 +31,8 @@
   <email>jan@horde.org</email>
   <active>yes</active>
  </lead>
- <date>2010-10-22</date>
- <time>19:03:03</time>
+ <date>2010-12-14</date>
+ <time>05:23:03</time>
  <version>
   <release>0.4.0</release>
   <api>0.1.0</api>
         <file name="Permission.php" role="php" />
        </dir> <!-- /lib/Horde/Kolab/Storage/Folder -->
        <file name="Cache.php" role="php" />
+       <file name="Cli.php" role="php" />
        <file name="Data.php" role="php" />
        <file name="Driver.php" role="php" />
        <file name="Exception.php" role="php" />
     <dir name="Horde">
      <dir name="Kolab">
       <dir name="Storage">
-       <dir name="Class">
+       <dir name="Server">
+        <file name="DriverTest.php" role="test" />
+       </dir> <!-- /test/Horde/Kolab/Storage/Server -->
+       <dir name="Unit">
         <dir name="Driver">
          <file name="CclientTest.php" role="test" />
          <file name="ImapTest.php" role="test" />
          <file name="MockTest.php" role="test" />
          <file name="PearTest.php" role="test" />
-        </dir> <!-- /test/Horde/Kolab/Storage/Class/Driver -->
-       </dir> <!-- /test/Horde/Kolab/Storage/Class -->
-       <dir name="Server">
-        <file name="DriverTest.php" role="test" />
-       </dir> <!-- /test/Horde/Kolab/Storage/Server -->
+        </dir> <!-- /test/Horde/Kolab/Storage/Unit/Driver -->
+        <file name="CliTest.php" role="test" />
+       </dir> <!-- /test/Horde/Kolab/Storage/Unit -->
        <file name="AclTest.php" role="test" />
        <file name="AllTests.php" role="test" />
        <file name="AttachmentTest.php" role="test" />
  <phprelease>
   <filelist>
    <install as="Horde/Kolab/Storage/usage.txt" name="doc/Horde/Kolab/Storage/usage.txt" />
+   <install as="Horde/Kolab/Storage/list.php" name="examples/Horde/Kolab/Storage/list.php" />
    <install as="Horde/Kolab/Storage.php" name="lib/Horde/Kolab/Storage.php" />
    <install as="Horde/Kolab/Storage/Cache.php" name="lib/Horde/Kolab/Storage/Cache.php" />
+   <install as="Horde/Kolab/Storage/Cli.php" name="lib/Horde/Kolab/Storage/Cli.php" />
    <install as="Horde/Kolab/Storage/Data.php" name="lib/Horde/Kolab/Storage/Data.php" />
    <install as="Horde/Kolab/Storage/Driver.php" name="lib/Horde/Kolab/Storage/Driver.php" />
    <install as="Horde/Kolab/Storage/Exception.php" name="lib/Horde/Kolab/Storage/Exception.php" />
    <install as="Horde/Kolab/Storage/Scenario.php" name="test/Horde/Kolab/Storage/Scenario.php" />
    <install as="Horde/Kolab/Storage/StorageTest.php" name="test/Horde/Kolab/Storage/StorageTest.php" />
    <install as="Horde/Kolab/Storage/TriggerTest.php" name="test/Horde/Kolab/Storage/TriggerTest.php" />
-   <install as="Horde/Kolab/Storage/Class/Driver/CclientTest.php" name="test/Horde/Kolab/Storage/Class/Driver/CclientTest.php" />
-   <install as="Horde/Kolab/Storage/Class/Driver/ImapTest.php" name="test/Horde/Kolab/Storage/Class/Driver/ImapTest.php" />
-   <install as="Horde/Kolab/Storage/Class/Driver/MockTest.php" name="test/Horde/Kolab/Storage/Class/Driver/MockTest.php" />
-   <install as="Horde/Kolab/Storage/Class/Driver/PearTest.php" name="test/Horde/Kolab/Storage/Class/Driver/PearTest.php" />
    <install as="Horde/Kolab/Storage/Server/DriverTest.php" name="test/Horde/Kolab/Storage/Server/DriverTest.php" />
+   <install as="Horde/Kolab/Storage/Unit/CliTest.php" name="test/Horde/Kolab/Storage/Unit/CliTest.php" />
+   <install as="Horde/Kolab/Storage/Unit/Driver/CclientTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/CclientTest.php" />
+   <install as="Horde/Kolab/Storage/Unit/Driver/ImapTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/ImapTest.php" />
+   <install as="Horde/Kolab/Storage/Unit/Driver/MockTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/MockTest.php" />
+   <install as="Horde/Kolab/Storage/Unit/Driver/PearTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/PearTest.php" />
+   <install as="TODO" name="TODO" />
   </filelist>
  </phprelease>
  <changelog>
     <release>alpha</release>
     <api>alpha</api>
    </stability>
-   <date>2010-10-22</date>
+   <date>2010-12-14</date>
    <license uri="http://www.gnu.org/copyleft/lesser.html">LGPL</license>
    <notes>
 * Added namespace support (Bug #6691).
diff --git a/framework/Kolab_Storage/script/Horde/Kolab/Storage/test_drivers.php b/framework/Kolab_Storage/script/Horde/Kolab/Storage/test_drivers.php
deleted file mode 100644 (file)
index 9dc70fb..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-/**
- * Test script for the Kolab storage drivers.
- *
- * Usage:
- *   test_drivers.php -u [username]
- *                    -p [password]
- *                   [-H [hostname]]
- *                   [-d [imap_client log file]]
- *
- * Username/password/hostspec on the command line will override the $params
- * values.
- * Driver on the command line will override the $driver value.
- *
- * @category Kolab
- * @package  Kolab_Storage
- * @author   Gunnar Wrobel <wrobel@pardus.de>
- * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
- * @link     http://pear.horde.org/index.php?package=Kolab_Storage
- */
-
-require_once 'Horde/Autoloader.php';
-
-/** Setup command line */
-$p = new Horde_Argv_Parser(
-    array(
-        'optionList' =>
-        array(
-            new Horde_Argv_Option(
-                '-u',
-                '--user',
-                array(
-                    'help' => 'The user name.',
-                    'type' => 'string',
-                    'nargs' => 1
-                )
-            ),
-            new Horde_Argv_Option(
-                '-p',
-                '--pass',
-                array(
-                    'help' => 'The password.',
-                    'type' => 'string',
-                    'nargs' => 1
-                )
-            ),
-            new Horde_Argv_Option(
-                '-H',
-                '--host',
-                array(
-                    'help' => 'The host to connect to.',
-                    'type' => 'string',
-                    'nargs' => 1,
-                    'default' => 'localhost'
-                )
-            ),
-            new Horde_Argv_Option(
-                '-d',
-                '--debug',
-                array(
-                    'help' => 'The path to the IMAP client debug file.',
-                    'type' => 'string',
-                    'nargs' => 1
-                )
-            ),
-        )
-    )
-);
-
-/** Handle arguments */
-try {
-    list($options, $args) = $p->parseArgs();
-} catch (InvalidArgumentException $e) {
-    print $e->getMessage() . "\n\n" . $p->getUsage() . "\n\n";
-}
-
-/** Setup shared test fixture */
-$fixture = new stdClass;
-$fixture->conf = $options;
-$fixture->drivers = array();
-
-$all_tests = '@PHP-TEST-DIR@/Kolab_Storage/Horde/Kolab/Storage/AllTests.php';
-if (strpos($all_tests, '@PHP-TEST-DIR') !== false) {
-    $all_tests = dirname(__FILE__)
-        . '/../../../../test/Horde/Kolab/Storage/AllTests.php';
-}
-
-define('PHPUnit_MAIN_METHOD', 'PHPUnit_TextUI_Command::main');
-
-require_once $all_tests;
-
-$suite = Horde_Kolab_Storage_AllTests::suite();
-$suite->setSharedFixture($fixture);
-
-PHPUnit_TextUI_TestRunner::run($suite);
\ No newline at end of file
diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/CliTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/CliTest.php
new file mode 100644 (file)
index 0000000..eca945d
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Test the CLI interface.
+ *
+ * PHP version 5
+ *
+ * @category   Kolab
+ * @package    Kolab_Storage
+ * @subpackage UnitTests
+ * @author     Gunnar Wrobel <wrobel@pardus.de>
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link       http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../Autoload.php';
+
+/**
+ * Test the CLI interface.
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category   Kolab
+ * @package    Kolab_Storage
+ * @subpackage UnitTests
+ * @author     Gunnar Wrobel <wrobel@pardus.de>
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link       http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+class Horde_Kolab_Storage_Unit_CliTest
+extends PHPUnit_Framework_TestCase
+{
+    public function testCli()
+    {
+        $_SERVER['argv'] = array(
+            'kolab-storage'
+        );
+        ob_start();
+        Horde_Kolab_Storage_Cli::main(
+            array(
+                'output' => new Horde_Test_Stub_Cli(),
+                'parser' => array('class' => 'Horde_Test_Stub_Parser')
+            )
+        );
+        $output = ob_get_contents();
+        ob_end_clean();
+    }
+}