Add test case variations for any Horde_Db driver that we support.
authorJan Schneider <jan@horde.org>
Mon, 3 Jan 2011 21:15:38 +0000 (22:15 +0100)
committerJan Schneider <jan@horde.org>
Mon, 3 Jan 2011 21:16:19 +0000 (22:16 +0100)
19 files changed:
.gitignore
framework/Share/package.xml
framework/Share/test/Horde/Share/Base.php [new file with mode: 0644]
framework/Share/test/Horde/Share/Sql/Base.php [new file with mode: 0644]
framework/Share/test/Horde/Share/Sql/MysqlTest.php [new file with mode: 0644]
framework/Share/test/Horde/Share/Sql/MysqliTest.php [new file with mode: 0644]
framework/Share/test/Horde/Share/Sql/Pdo/MysqlTest.php [new file with mode: 0644]
framework/Share/test/Horde/Share/Sql/Pdo/PgsqlTest.php [new file with mode: 0644]
framework/Share/test/Horde/Share/Sql/Pdo/SqliteTest.php [new file with mode: 0644]
framework/Share/test/Horde/Share/SqlHierarchical/Base.php [new file with mode: 0644]
framework/Share/test/Horde/Share/SqlHierarchical/MysqlTest.php [new file with mode: 0644]
framework/Share/test/Horde/Share/SqlHierarchical/MysqliTest.php [new file with mode: 0644]
framework/Share/test/Horde/Share/SqlHierarchical/Pdo/MysqlTest.php [new file with mode: 0644]
framework/Share/test/Horde/Share/SqlHierarchical/Pdo/PgsqlTest.php [new file with mode: 0644]
framework/Share/test/Horde/Share/SqlHierarchical/Pdo/SqliteTest.php [new file with mode: 0644]
framework/Share/test/Horde/Share/SqlHierarchicalTest.php [deleted file]
framework/Share/test/Horde/Share/SqlTest.php [deleted file]
framework/Share/test/Horde/Share/TestBase.php [deleted file]
framework/Share/test/Horde/Share/conf.php.dist [new file with mode: 0644]

index 36506d7..75d9f9f 100644 (file)
@@ -39,6 +39,11 @@ framework/Db/test/Horde/Db/Adapter/conf.php
 framework/Db/test/Horde/Db/Adapter/Pdo/conf.php
 framework/Kolab_Storage/test/Horde/Kolab/Storage/conf.php
 framework/Ldap/test/Horde/Ldap/conf.php
+framework/Share/test/Horde/Share/conf.php
+framework/Share/test/Horde/Share/Sql/conf.php
+framework/Share/test/Horde/Share/Sql/Pdo/conf.php
+framework/Share/test/Horde/Share/SqlHierarchical/conf.php
+framework/Share/test/Horde/Share/SqlHierarchical/Pdo/conf.php
 
 # Dynamically generated content that may live in the repo directories
 /lib/
index 97f541e..cd18673 100644 (file)
@@ -12,7 +12,7 @@ owns or has access to.</description>
   <active>yes</active>
  </lead>
  <date>2011-01-03</date>
- <time>17:30:14</time>
+ <time>22:15:46</time>
  <version>
   <release>0.0.4</release>
   <api>0.0.4</api>
@@ -320,11 +320,30 @@ owns or has access to.</description>
    <dir name="test">
     <dir name="Horde">
      <dir name="Share">
+      <dir name="Sql">
+       <dir name="Pdo">
+        <file name="MysqlTest.php" role="test" />
+        <file name="PgsqlTest.php" role="test" />
+        <file name="SqliteTest.php" role="test" />
+       </dir> <!-- /test/Horde/Share/Sql/Pdo -->
+       <file name="Base.php" role="test" />
+       <file name="MysqliTest.php" role="test" />
+       <file name="MysqlTest.php" role="test" />
+      </dir> <!-- /test/Horde/Share/Sql -->
+      <dir name="SqlHierarchical">
+       <dir name="Pdo">
+        <file name="MysqlTest.php" role="test" />
+        <file name="PgsqlTest.php" role="test" />
+        <file name="SqliteTest.php" role="test" />
+       </dir> <!-- /test/Horde/Share/SqlHierarchical/Pdo -->
+       <file name="Base.php" role="test" />
+       <file name="MysqliTest.php" role="test" />
+       <file name="MysqlTest.php" role="test" />
+      </dir> <!-- /test/Horde/Share/SqlHierarchical -->
       <file name="AllTests.php" role="test" />
       <file name="Autoload.php" role="test" />
-      <file name="SqlHierarchicalTest.php" role="test" />
-      <file name="SqlTest.php" role="test" />
-      <file name="TestBase.php" role="test" />
+      <file name="Base.php" role="test" />
+      <file name="conf.php.dist" role="test" />
      </dir> <!-- /test/Horde/Share -->
     </dir> <!-- /test/Horde -->
    </dir> <!-- /test -->
@@ -452,9 +471,20 @@ owns or has access to.</description>
    <install as="locale/zh_TW/LC_MESSAGES/Horde_Share.po" name="locale/zh_TW/LC_MESSAGES/Horde_Share.po" />
    <install as="Horde/Share/AllTests.php" name="test/Horde/Share/AllTests.php" />
    <install as="Horde/Share/Autoload.php" name="test/Horde/Share/Autoload.php" />
-   <install as="Horde/Share/SqlHierarchicalTest.php" name="test/Horde/Share/SqlHierarchicalTest.php" />
-   <install as="Horde/Share/SqlTest.php" name="test/Horde/Share/SqlTest.php" />
-   <install as="Horde/Share/TestBase.php" name="test/Horde/Share/TestBase.php" />
+   <install as="Horde/Share/Base.php" name="test/Horde/Share/Base.php" />
+   <install as="Horde/Share/conf.php.dist" name="test/Horde/Share/conf.php.dist" />
+   <install as="Horde/Share/Sql/Base.php" name="test/Horde/Share/Sql/Base.php" />
+   <install as="Horde/Share/Sql/MysqliTest.php" name="test/Horde/Share/Sql/MysqliTest.php" />
+   <install as="Horde/Share/Sql/MysqlTest.php" name="test/Horde/Share/Sql/MysqlTest.php" />
+   <install as="Horde/Share/Sql/Pdo/MysqlTest.php" name="test/Horde/Share/Sql/Pdo/MysqlTest.php" />
+   <install as="Horde/Share/Sql/Pdo/PgsqlTest.php" name="test/Horde/Share/Sql/Pdo/PgsqlTest.php" />
+   <install as="Horde/Share/Sql/Pdo/SqliteTest.php" name="test/Horde/Share/Sql/Pdo/SqliteTest.php" />
+   <install as="Horde/Share/SqlHierarchical/Base.php" name="test/Horde/Share/SqlHierarchical/Base.php" />
+   <install as="Horde/Share/SqlHierarchical/MysqliTest.php" name="test/Horde/Share/SqlHierarchical/MysqliTest.php" />
+   <install as="Horde/Share/SqlHierarchical/MysqlTest.php" name="test/Horde/Share/SqlHierarchical/MysqlTest.php" />
+   <install as="Horde/Share/SqlHierarchical/Pdo/MysqlTest.php" name="test/Horde/Share/SqlHierarchical/Pdo/MysqlTest.php" />
+   <install as="Horde/Share/SqlHierarchical/Pdo/PgsqlTest.php" name="test/Horde/Share/SqlHierarchical/Pdo/PgsqlTest.php" />
+   <install as="Horde/Share/SqlHierarchical/Pdo/SqliteTest.php" name="test/Horde/Share/SqlHierarchical/Pdo/SqliteTest.php" />
   </filelist>
  </phprelease>
  <changelog>
diff --git a/framework/Share/test/Horde/Share/Base.php b/framework/Share/test/Horde/Share/Base.php
new file mode 100644 (file)
index 0000000..a1904d4
--- /dev/null
@@ -0,0 +1,249 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/Autoload.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_Test_Base extends Horde_Test_Case
+{
+    protected static $share;
+
+    public function testGetApp()
+    {
+        $this->assertEquals('test', self::$share->getApp());
+    }
+
+    public function baseAddShare()
+    {
+        $share = self::$share->newShare('john', 'myshare');
+        $this->assertInstanceOf('Horde_Share_Object', $share);
+        self::$share->addShare($share);
+        return $share;
+    }
+
+    public function basePermissions($myshareid)
+    {
+        // System share.
+        $share = self::$share->newShare(null, 'systemshare');
+        $perm = $share->getPermission();
+        $this->assertInstanceOf('Horde_Perms_Permission', $perm);
+        $perm->addDefaultPermission(Horde_Perms::SHOW | Horde_Perms::READ);
+        $share->setPermission($perm);
+        $share->save();
+        $this->assertTrue($share->hasPermission('john', Horde_Perms::SHOW));
+        $this->assertTrue($share->hasPermission('john', Horde_Perms::READ));
+        $this->assertFalse($share->hasPermission('john', Horde_Perms::EDIT));
+        $this->assertFalse($share->hasPermission('john', Horde_Perms::DELETE));
+
+        // Foreign share with user permissions.
+        $janeshare = self::$share->newShare('jane', 'janeshare');
+        $janeshare->addUserPermission('john', Horde_Perms::SHOW | Horde_Perms::READ | Horde_Perms::EDIT);
+        $janeshare->save();
+        $this->assertTrue($janeshare->hasPermission('john', Horde_Perms::SHOW));
+        $this->assertTrue($janeshare->hasPermission('john', Horde_Perms::READ));
+        $this->assertTrue($janeshare->hasPermission('john', Horde_Perms::EDIT));
+        $this->assertFalse($janeshare->hasPermission('john', Horde_Perms::DELETE));
+
+        // Foreign share with group permissions.
+        $groupshare = self::$share->newShare('jane', 'groupshare');
+        $groupshare->addGroupPermission('mygroup', Horde_Perms::SHOW | Horde_Perms::READ | Horde_Perms::DELETE);
+        $groupshare->save();
+        $this->assertTrue($groupshare->hasPermission('john', Horde_Perms::SHOW));
+        $this->assertTrue($groupshare->hasPermission('john', Horde_Perms::READ));
+        $this->assertFalse($groupshare->hasPermission('john', Horde_Perms::EDIT));
+        $this->assertTrue($groupshare->hasPermission('john', Horde_Perms::DELETE));
+
+        // Foreign share without permissions.
+        $share = self::$share->newShare('jane', 'noshare');
+        $share->save();
+
+        return array($myshareid, $janeshare->getId(), $groupshare->getId());
+    }
+
+    public function baseExists()
+    {
+        $this->assertTrue(self::$share->exists('myshare'));
+
+        // Reset cache.
+        self::$share->resetCache();
+
+        $this->assertTrue(self::$share->exists('myshare'));
+    }
+
+    public function baseCountShares()
+    {
+        // Getting shares from cache.
+        $this->assertEquals(4, self::$share->countShares('john'));
+        $this->assertEquals(2, self::$share->countShares('john', Horde_Perms::EDIT));
+
+        // Reset cache.
+        self::$share->resetCache();
+
+        // Getting shares from backend.
+        $this->assertEquals(4, self::$share->countShares('john'));
+        $this->assertEquals(2, self::$share->countShares('john', Horde_Perms::EDIT));
+    }
+
+    public function baseGetShare()
+    {
+        $share = self::$share->getShare('myshare');
+        $this->assertInstanceOf('Horde_Share_Object', $share);
+
+        // Reset cache.
+        self::$share->resetCache();
+
+        $share = self::$share->getShare('myshare');
+        $this->assertInstanceOf('Horde_Share_Object', $share);
+
+        return array($share, self::$share->getShare('janeshare'), self::$share->getShare('groupshare'));
+    }
+
+    public function baseGetShareById(array $shares)
+    {
+        $newshare = self::$share->getShareById($shares[0]->getId());
+        $this->assertInstanceOf('Horde_Share_Object', $newshare);
+        $this->assertEquals($shares[0], $newshare);
+        $newshare = self::$share->getShareById($shares[1]->getId());
+        $this->assertInstanceOf('Horde_Share_Object', $newshare);
+        $this->assertEquals($shares[1], $newshare);
+        $newshare = self::$share->getShareById($shares[2]->getId());
+        $this->assertInstanceOf('Horde_Share_Object', $newshare);
+        $this->assertEquals($shares[2], $newshare);
+
+        // Reset cache.
+        self::$share->resetCache();
+
+        $newshare = self::$share->getShareById($shares[0]->getId());
+        $this->assertInstanceOf('Horde_Share_Object', $newshare);
+        $this->assertEquals($shares[0], $newshare);
+        $newshare = self::$share->getShareById($shares[1]->getId());
+        $this->assertInstanceOf('Horde_Share_Object', $newshare);
+        $this->assertEquals($shares[1], $newshare);
+        $newshare = self::$share->getShareById($shares[2]->getId());
+        $this->assertInstanceOf('Horde_Share_Object', $newshare);
+        $this->assertEquals($shares[2], $newshare);
+    }
+
+    public function baseGetShares(array $shares)
+    {
+        $newshares = self::$share->getShares(array($shares[0]->getId(), $shares[1]->getId(), $shares[2]->getId()));
+        $this->assertType('array', $newshares);
+        $this->assertEquals(3, count($newshares));
+        $this->assertArrayHasKey('myshare', $newshares);
+        $this->assertArrayHasKey('janeshare', $newshares);
+        $this->assertArrayHasKey('groupshare', $newshares);
+        $this->assertInstanceOf('Horde_Share_Object', $newshares['myshare']);
+        $this->assertInstanceOf('Horde_Share_Object', $newshares['janeshare']);
+        $this->assertInstanceOf('Horde_Share_Object', $newshares['groupshare']);
+        $this->assertEquals($newshares['myshare'], $shares[0]);
+        $this->assertEquals($newshares['janeshare'], $shares[1]);
+        $this->assertEquals($newshares['groupshare'], $shares[2]);
+
+        // Reset cache.
+        self::$share->resetCache();
+
+        $newshares = self::$share->getShares(array($shares[0]->getId(), $shares[1]->getId(), $shares[2]->getId()));
+        $this->assertType('array', $newshares);
+        $this->assertEquals(3, count($newshares));
+        $this->assertArrayHasKey('myshare', $newshares);
+        $this->assertArrayHasKey('janeshare', $newshares);
+        $this->assertArrayHasKey('groupshare', $newshares);
+        $this->assertInstanceOf('Horde_Share_Object', $newshares['myshare']);
+        $this->assertInstanceOf('Horde_Share_Object', $newshares['janeshare']);
+        $this->assertInstanceOf('Horde_Share_Object', $newshares['groupshare']);
+        $this->assertEquals($newshares['myshare'], $shares[0]);
+        $this->assertEquals($newshares['janeshare'], $shares[1]);
+        $this->assertEquals($newshares['groupshare'], $shares[2]);
+    }
+
+    public function baseListAllShares()
+    {
+        // Getting shares from cache.
+        $shares = self::$share->listAllShares();
+        $this->assertType('array', $shares);
+        $this->assertEquals(5, count($shares));
+        $this->assertArrayHasKey('myshare', $shares);
+        $this->assertArrayHasKey('systemshare', $shares);
+        $this->assertArrayHasKey('janeshare', $shares);
+        $this->assertArrayHasKey('groupshare', $shares);
+        $this->assertArrayHasKey('noshare', $shares);
+
+        // Reset cache.
+        self::$share->resetCache();
+
+        // Getting shares from backend.
+        $shares = self::$share->listAllShares();
+        $this->assertType('array', $shares);
+        $this->assertEquals(5, count($shares));
+        $this->assertArrayHasKey('myshare', $shares);
+        $this->assertArrayHasKey('systemshare', $shares);
+        $this->assertArrayHasKey('janeshare', $shares);
+        $this->assertArrayHasKey('groupshare', $shares);
+        $this->assertArrayHasKey('noshare', $shares);
+    }
+
+    public function baseListSystemShares()
+    {
+        // Getting shares from cache.
+        $shares = self::$share->listSystemShares();
+        $this->assertType('array', $shares);
+        $this->assertEquals(1, count($shares));
+        $this->assertArrayHasKey('systemshare', $shares);
+
+        // Reset cache.
+        self::$share->resetCache();
+
+        // Getting shares from backend.
+        $shares = self::$share->listSystemShares();
+        $this->assertType('array', $shares);
+        $this->assertEquals(1, count($shares));
+        $this->assertArrayHasKey('systemshare', $shares);
+    }
+
+    public function baseRemoveShare(array $share)
+    {
+        self::$share->removeShare($share[0]);
+        try {
+            self::$share->getShareById($share[0]->getId());
+            $this->fail('Share ' . $share[0]->getId() . ' should be removed by now.');
+        } catch (Horde_Exception_NotFound $e) {
+        }
+
+        // Reset cache.
+        self::$share->resetCache();
+
+        try {
+            self::$share->getShareById($share[0]->getId());
+            $this->fail('Share ' . $share[0]->getId() . ' should be removed by now.');
+        } catch (Horde_Exception_NotFound $e) {
+        }
+    }
+}
+
+class Horde_Group_Test extends Horde_Group {
+    public function __construct()
+    {
+    }
+
+    public function __wakeup()
+    {
+    }
+
+    public function userIsInGroup($user, $gid, $subgroups = true)
+    {
+        return $user == 'john' && $gid == 'mygroup';
+    }
+
+    public function getGroupMemberships($user, $parentGroups = false)
+    {
+        return $user == 'john' ? array('mygroup' => 'mygroup') : array();
+    }
+}
diff --git a/framework/Share/test/Horde/Share/Sql/Base.php b/framework/Share/test/Horde/Share/Sql/Base.php
new file mode 100644 (file)
index 0000000..395e9e4
--- /dev/null
@@ -0,0 +1,186 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../Base.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_Test_Sql_Base extends Horde_Share_Test_Base
+{
+    protected static $db;
+
+    public function testSetTable()
+    {
+        $this->assertEquals('test_shares', self::$share->getTable());
+        self::$share->setTable('foo');
+        $this->assertEquals('foo', self::$share->getTable());
+        self::$share->setTable('test_shares');
+    }
+
+    public function testSetStorage()
+    {
+        self::$share->setStorage(self::$db);
+        $this->assertEquals(self::$db, self::$share->getStorage());
+    }
+
+    public function testAddShare()
+    {
+        $share = parent::baseAddShare();
+        $this->assertInstanceOf('Horde_Share_Object_Sql', $share);
+        return $share->getId();
+    }
+
+    /**
+     * @depends testAddShare
+     */
+    public function testPermissions($myshareid)
+    {
+        return parent::basePermissions($myshareid);
+    }
+
+    /**
+     * @depends testAddShare
+     */
+    public function testExists()
+    {
+        parent::baseExists();
+    }
+
+    /**
+     * @depends testPermissions
+     */
+    public function testCountShares()
+    {
+        parent::baseCountShares();
+    }
+
+    /**
+     * @depends testPermissions
+     */
+    public function testGetShare()
+    {
+        $shares = parent::baseGetShare();
+        $this->assertInstanceOf('Horde_Share_Object_Sql', $shares[0]);
+        $this->assertInstanceOf('Horde_Share_Object_Sql', $shares[1]);
+        $this->assertInstanceOf('Horde_Share_Object_Sql', $shares[2]);
+        return $shares;
+    }
+
+    /**
+     * @depends testGetShare
+     */
+    public function testGetShareById(array $shares)
+    {
+        parent::baseGetShareById($shares);
+    }
+
+    /**
+     * @depends testGetShare
+     */
+    public function testGetShares(array $shares)
+    {
+        parent::baseGetShares($shares);
+    }
+
+    /**
+     * @depends testPermissions
+     */
+    public function testListAllShares()
+    {
+        parent::baseListAllShares();
+    }
+
+    /**
+     * @depends testPermissions
+     */
+    public function testListSystemShares()
+    {
+        parent::baseListSystemShares();
+    }
+
+    /**
+     * @depends testGetShare
+     */
+    public function testRemoveShare(array $share)
+    {
+        parent::baseRemoveShare($share);
+    }
+
+    public static function setUpBeforeClass()
+    {
+        //self::$db->setLogger(new Horde_Log_Logger(new Horde_Log_Handler_Stream(STDOUT)));
+        $migration = new Horde_Db_Migration_Base(self::$db);
+
+        $t = $migration->createTable('test_shares', array('primaryKey' => 'share_id'));
+        //$t->column('share_id', 'integer', array('null' => false, 'autoincrement' => true));
+        $t->column('share_name', 'string', array('limit' => 255, 'null' => false));
+        $t->column('share_owner', 'string', array('limit' => 255));
+        $t->column('share_flags', 'integer', array('default' => 0, 'null' => false));
+        $t->column('perm_creator', 'integer', array('default' => 0, 'null' => false));
+        $t->column('perm_default', 'integer', array('default' => 0, 'null' => false));
+        $t->column('perm_guest', 'integer', array('default' => 0, 'null' => false));
+        $t->column('attribute_name', 'string', array('limit' => 255));
+        $t->column('attribute_desc', 'string', array('limit' => 255));
+        $t->end();
+
+        $migration->addIndex('test_shares', array('share_name'));
+        $migration->addIndex('test_shares', array('share_owner'));
+        $migration->addIndex('test_shares', array('perm_creator'));
+        $migration->addIndex('test_shares', array('perm_default'));
+        $migration->addIndex('test_shares', array('perm_guest'));
+
+        $t = $migration->createTable('test_shares_groups');
+        $t->column('share_id', 'integer', array('null' => false));
+        $t->column('group_uid', 'string', array('limit' => 255, 'null' => false));
+        $t->column('perm', 'integer', array('null' => false));
+        $t->end();
+
+        $migration->addIndex('test_shares_groups', array('share_id'));
+        $migration->addIndex('test_shares_groups', array('group_uid'));
+        $migration->addIndex('test_shares_groups', array('perm'));
+
+        $t = $migration->createTable('test_shares_users');
+        $t->column('share_id', 'integer', array('null' => false));
+        $t->column('user_uid', 'string', array('limit' => 255));
+        $t->column('perm', 'integer', array('null' => false));
+        $t->end();
+
+        $migration->addIndex('test_shares_users', array('share_id'));
+        $migration->addIndex('test_shares_users', array('user_uid'));
+        $migration->addIndex('test_shares_users', array('perm'));
+
+        $migration->migrate('up');
+
+        $group = new Horde_Group_Test();
+        self::$share = new Horde_Share_Sql('test', 'john', new Horde_Perms(), $group);
+        self::$share->setStorage(self::$db);
+
+        // FIXME
+        $GLOBALS['injector'] = new Horde_Injector(new Horde_Injector_TopLevel());
+        $GLOBALS['injector']->setInstance('Horde_Group', $group);
+    }
+
+    public static function tearDownAfterClass()
+    {
+        if (self::$db) {
+            $migration = new Horde_Db_Migration_Base(self::$db);
+            $migration->dropTable('test_shares');
+            $migration->dropTable('test_shares_groups');
+            $migration->dropTable('test_shares_users');
+        }
+    }
+
+    public function setUp()
+    {
+        if (!self::$db) {
+            $this->markTestSkipped('No sqlite extension or no sqlite PDO driver.');
+        }
+    }
+}
diff --git a/framework/Share/test/Horde/Share/Sql/MysqlTest.php b/framework/Share/test/Horde/Share/Sql/MysqlTest.php
new file mode 100644 (file)
index 0000000..b2e69ec
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/Base.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_Sql_MysqlTest extends Horde_Share_Test_Sql_Base
+{
+    public static function setUpBeforeClass()
+    {
+        if (!extension_loaded('mysql')) {
+            return;
+        }
+        $config = self::getConfig('SHARE_SQL_MYSQL_TEST_CONFIG');
+        self::$db = new Horde_Db_Adapter_Mysql($config['share']['sql']['mysql']);
+        parent::setUpBeforeClass();
+    }
+}
diff --git a/framework/Share/test/Horde/Share/Sql/MysqliTest.php b/framework/Share/test/Horde/Share/Sql/MysqliTest.php
new file mode 100644 (file)
index 0000000..bb81f89
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/Base.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_Sql_MysqliTest extends Horde_Share_Test_Sql_Base
+{
+    public static function setUpBeforeClass()
+    {
+        if (!extension_loaded('mysqli')) {
+            return;
+        }
+        $config = self::getConfig('SHARE_SQL_MYSQLI_TEST_CONFIG');
+        self::$db = new Horde_Db_Adapter_Mysqli($config['share']['sql']['mysqli']);
+        parent::setUpBeforeClass();
+    }
+}
diff --git a/framework/Share/test/Horde/Share/Sql/Pdo/MysqlTest.php b/framework/Share/test/Horde/Share/Sql/Pdo/MysqlTest.php
new file mode 100644 (file)
index 0000000..95dee9d
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../Base.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_Sql_Pdo_MysqlTest extends Horde_Share_Test_Sql_Base
+{
+    public static function setUpBeforeClass()
+    {
+        if (!extension_loaded('pdo') ||
+            !in_array('mysql', PDO::getAvailableDrivers())) {
+            return;
+        }
+        $config = self::getConfig('SHARE_SQL_PDO_MYSQL_TEST_CONFIG');
+        self::$db = new Horde_Db_Adapter_Pdo_Mysql($config['share']['sql']['pdo_mysql']);
+        parent::setUpBeforeClass();
+    }
+}
diff --git a/framework/Share/test/Horde/Share/Sql/Pdo/PgsqlTest.php b/framework/Share/test/Horde/Share/Sql/Pdo/PgsqlTest.php
new file mode 100644 (file)
index 0000000..936a2dd
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../Base.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_Sql_Pdo_PgsqlTest extends Horde_Share_Test_Sql_Base
+{
+    public static function setUpBeforeClass()
+    {
+        if (!extension_loaded('pdo') ||
+            !in_array('pgsql', PDO::getAvailableDrivers())) {
+            return;
+        }
+        $config = self::getConfig('SHARE_SQL_PDO_PGSQL_TEST_CONFIG');
+        self::$db = new Horde_Db_Adapter_Pdo_Pgsql($config['share']['sql']['pdo_pgsql']);
+        parent::setUpBeforeClass();
+    }
+}
diff --git a/framework/Share/test/Horde/Share/Sql/Pdo/SqliteTest.php b/framework/Share/test/Horde/Share/Sql/Pdo/SqliteTest.php
new file mode 100644 (file)
index 0000000..aaaa7b1
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../Base.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_Sql_Pdo_SqliteTest extends Horde_Share_Test_Sql_Base
+{
+    public static function setUpBeforeClass()
+    {
+        if (!extension_loaded('pdo') ||
+            !in_array('sqlite', PDO::getAvailableDrivers())) {
+            return;
+        }
+        self::$db = new Horde_Db_Adapter_Pdo_Sqlite(array('dbname' => ':memory:'));
+        parent::setUpBeforeClass();
+    }
+}
diff --git a/framework/Share/test/Horde/Share/SqlHierarchical/Base.php b/framework/Share/test/Horde/Share/SqlHierarchical/Base.php
new file mode 100644 (file)
index 0000000..2343866
--- /dev/null
@@ -0,0 +1,206 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../Base.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_Test_SqlHierarchical_Base extends Horde_Share_Test_Base
+{
+    protected static $db;
+
+    public function testSetTable()
+    {
+        $this->assertEquals('test_shares', self::$share->getTable());
+        self::$share->setTable('foo');
+        $this->assertEquals('foo', self::$share->getTable());
+        self::$share->setTable('test_shares');
+    }
+
+    public function testSetStorage()
+    {
+        self::$share->setStorage(self::$db);
+        $this->assertEquals(self::$db, self::$share->getStorage());
+    }
+
+    public function testAddShare()
+    {
+        $share = parent::baseAddShare();
+        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $share);
+        return $share->getId();
+    }
+
+    /**
+     * @depends testAddShare
+     */
+    public function testPermissions($myshareid)
+    {
+        $shareids = parent::basePermissions($myshareid);
+        return array(self::$share->getShareById($shareids[0]),
+                     self::$share->getShareById($shareids[1]),
+                     self::$share->getShareById($shareids[2]));
+    }
+
+    /**
+     * @depends testAddShare
+     */
+    public function testExists()
+    {
+        $this->markTestSkipped('Not supported by hierarchical driver.');
+    }
+
+    /**
+     * @depends testPermissions
+     */
+    public function testCountShares()
+    {
+        parent::baseCountShares();
+    }
+
+    /**
+     * @depends testPermissions
+     */
+    public function testGetShare()
+    {
+        $this->markTestSkipped('Not supported by hierarchical driver.');
+    }
+
+    /**
+     * @depends testPermissions
+     */
+    public function testGetShareById(array $shares)
+    {
+        parent::baseGetShareById($shares);
+    }
+
+    /**
+     * @depends testPermissions
+     */
+    public function testGetShares(array $shares)
+    {
+        $newshares = self::$share->getShares(array($shares[0]->getId(), $shares[1]->getId(), $shares[2]->getId()));
+        $this->assertType('array', $newshares);
+        $this->assertEquals(3, count($newshares));
+        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $newshares[0]);
+        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $newshares[1]);
+        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $newshares[2]);
+        $this->assertEquals($newshares[0], $shares[0]);
+        $this->assertEquals($newshares[1], $shares[1]);
+        $this->assertEquals($newshares[2], $shares[2]);
+
+        // Reset cache.
+        self::$share->resetCache();
+
+        $newshares = self::$share->getShares(array($shares[0]->getId(), $shares[1]->getId(), $shares[2]->getId()));
+        $this->assertType('array', $newshares);
+        $this->assertEquals(3, count($newshares));
+        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $newshares[$shares[0]->getId()]);
+        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $newshares[$shares[1]->getId()]);
+        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $newshares[$shares[2]->getId()]);
+        $this->assertEquals($newshares[$shares[0]->getId()], $shares[0]);
+        $this->assertEquals($newshares[$shares[1]->getId()], $shares[1]);
+        $this->assertEquals($newshares[$shares[2]->getId()], $shares[2]);
+    }
+
+    /**
+     * @depends testPermissions
+     */
+    public function testListAllShares()
+    {
+        $this->markTestSkipped('Not supported by hierarchical driver.');
+    }
+
+    /**
+     * @depends testPermissions
+     */
+    public function testListSystemShares()
+    {
+        $this->markTestSkipped('Not supported by hierarchical driver.');
+    }
+
+    /**
+     * @depends testPermissions
+     */
+    public function testRemoveShare(array $share)
+    {
+        parent::baseRemoveShare($share);
+    }
+
+    public static function setUpBeforeClass()
+    {
+        //self::$db->setLogger(new Horde_Log_Logger(new Horde_Log_Handler_Stream(STDOUT)));
+        $migration = new Horde_Db_Migration_Base(self::$db);
+
+        $t = $migration->createTable('test_shares', array('primaryKey' => 'share_id'));
+        //$t->column('share_id', 'integer', array('null' => false, 'autoincrement' => true));
+        $t->column('share_owner', 'string', array('limit' => 255));
+        $t->column('share_flags', 'integer', array('default' => 0, 'null' => false));
+        $t->column('share_parents', 'string', array('limit' => 255));
+        $t->column('perm_creator', 'integer', array('default' => 0, 'null' => false));
+        $t->column('perm_default', 'integer', array('default' => 0, 'null' => false));
+        $t->column('perm_guest', 'integer', array('default' => 0, 'null' => false));
+        $t->column('attribute_name', 'string', array('limit' => 255));
+        $t->column('attribute_desc', 'string', array('limit' => 255));
+        $t->end();
+
+        $migration->addIndex('test_shares', array('share_owner'));
+        $migration->addIndex('test_shares', array('perm_creator'));
+        $migration->addIndex('test_shares', array('perm_default'));
+        $migration->addIndex('test_shares', array('perm_guest'));
+        $migration->addIndex('test_shares', array('share_parents'));
+
+        $t = $migration->createTable('test_shares_groups');
+        $t->column('share_id', 'integer', array('null' => false));
+        $t->column('group_uid', 'string', array('limit' => 255, 'null' => false));
+        $t->column('perm', 'integer', array('null' => false));
+        $t->end();
+
+        $migration->addIndex('test_shares_groups', array('share_id'));
+        $migration->addIndex('test_shares_groups', array('group_uid'));
+        $migration->addIndex('test_shares_groups', array('perm'));
+
+        $t = $migration->createTable('test_shares_users');
+        $t->column('share_id', 'integer', array('null' => false));
+        $t->column('user_uid', 'string', array('limit' => 255));
+        $t->column('perm', 'integer', array('null' => false));
+        $t->end();
+
+        $migration->addIndex('test_shares_users', array('share_id'));
+        $migration->addIndex('test_shares_users', array('user_uid'));
+        $migration->addIndex('test_shares_users', array('perm'));
+
+        $migration->migrate('up');
+
+        $group = new Horde_Group_Test();
+        self::$share = new Horde_Share_Sql_Hierarchical('test', 'john', new Horde_Perms(), $group);
+        self::$share->setStorage(self::$db);
+
+        // FIXME
+        $GLOBALS['injector'] = new Horde_Injector(new Horde_Injector_TopLevel());
+        $GLOBALS['injector']->setInstance('Horde_Group', $group);
+    }
+
+    public static function tearDownAfterClass()
+    {
+        if (self::$db) {
+            $migration = new Horde_Db_Migration_Base(self::$db);
+            $migration->dropTable('test_shares');
+            $migration->dropTable('test_shares_groups');
+            $migration->dropTable('test_shares_users');
+        }
+    }
+
+    public function setUp()
+    {
+        if (!self::$db) {
+            $this->markTestSkipped('No sqlite extension or no sqlite PDO driver.');
+        }
+    }
+}
diff --git a/framework/Share/test/Horde/Share/SqlHierarchical/MysqlTest.php b/framework/Share/test/Horde/Share/SqlHierarchical/MysqlTest.php
new file mode 100644 (file)
index 0000000..22a99f0
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/Base.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_SqlHierarchical_MysqlTest extends Horde_Share_Test_SqlHierarchical_Base
+{
+    public static function setUpBeforeClass()
+    {
+        if (!extension_loaded('mysql')) {
+            return;
+        }
+        $config = self::getConfig('SHARE_SQL_MYSQL_TEST_CONFIG');
+        self::$db = new Horde_Db_Adapter_Mysql($config['share']['sql']['mysql']);
+        parent::setUpBeforeClass();
+    }
+}
diff --git a/framework/Share/test/Horde/Share/SqlHierarchical/MysqliTest.php b/framework/Share/test/Horde/Share/SqlHierarchical/MysqliTest.php
new file mode 100644 (file)
index 0000000..3f8b30b
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/Base.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_SqlHierarchical_MysqliTest extends Horde_Share_Test_SqlHierarchical_Base
+{
+    public static function setUpBeforeClass()
+    {
+        if (!extension_loaded('mysqli')) {
+            return;
+        }
+        $config = self::getConfig('SHARE_SQL_MYSQLI_TEST_CONFIG');
+        self::$db = new Horde_Db_Adapter_Mysqli($config['share']['sql']['mysqli']);
+        parent::setUpBeforeClass();
+    }
+}
diff --git a/framework/Share/test/Horde/Share/SqlHierarchical/Pdo/MysqlTest.php b/framework/Share/test/Horde/Share/SqlHierarchical/Pdo/MysqlTest.php
new file mode 100644 (file)
index 0000000..de0b0b3
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../Base.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_SqlHierarchical_Pdo_MysqlTest extends Horde_Share_Test_SqlHierarchical_Base
+{
+    public static function setUpBeforeClass()
+    {
+        if (!extension_loaded('pdo') ||
+            !in_array('mysql', PDO::getAvailableDrivers())) {
+            return;
+        }
+        $config = self::getConfig('SHARE_SQL_PDO_MYSQL_TEST_CONFIG');
+        self::$db = new Horde_Db_Adapter_Pdo_Mysql($config['share']['sql']['pdo_mysql']);
+        parent::setUpBeforeClass();
+    }
+}
diff --git a/framework/Share/test/Horde/Share/SqlHierarchical/Pdo/PgsqlTest.php b/framework/Share/test/Horde/Share/SqlHierarchical/Pdo/PgsqlTest.php
new file mode 100644 (file)
index 0000000..4e331cb
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../Base.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_SqlHierarchical_Pdo_PgsqlTest extends Horde_Share_Test_SqlHierarchical_Base
+{
+    public static function setUpBeforeClass()
+    {
+        if (!extension_loaded('pdo') ||
+            !in_array('pgsql', PDO::getAvailableDrivers())) {
+            return;
+        }
+        $config = self::getConfig('SHARE_SQL_PDO_PGSQL_TEST_CONFIG');
+        self::$db = new Horde_Db_Adapter_Pdo_Pgsql($config['share']['sql']['pdo_pgsql']);
+        parent::setUpBeforeClass();
+    }
+}
diff --git a/framework/Share/test/Horde/Share/SqlHierarchical/Pdo/SqliteTest.php b/framework/Share/test/Horde/Share/SqlHierarchical/Pdo/SqliteTest.php
new file mode 100644 (file)
index 0000000..1a5b222
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../Base.php';
+
+/**
+ * @author     Jan Schneider <jan@horde.org>
+ * @category   Horde
+ * @package    Share
+ * @subpackage UnitTests
+ * @copyright  2010 The Horde Project (http://www.horde.org/)
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ */
+class Horde_Share_SqlHierarchical_Pdo_SqliteTest extends Horde_Share_Test_SqlHierarchical_Base
+{
+    public static function setUpBeforeClass()
+    {
+        if (!extension_loaded('pdo') ||
+            !in_array('sqlite', PDO::getAvailableDrivers())) {
+            return;
+        }
+        self::$db = new Horde_Db_Adapter_Pdo_Sqlite(array('dbname' => ':memory:'));
+        parent::setUpBeforeClass();
+    }
+}
diff --git a/framework/Share/test/Horde/Share/SqlHierarchicalTest.php b/framework/Share/test/Horde/Share/SqlHierarchicalTest.php
deleted file mode 100644 (file)
index 423ddbb..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-<?php
-/**
- * Prepare the test setup.
- */
-require_once dirname(__FILE__) . '/TestBase.php';
-
-/**
- * @author     Jan Schneider <jan@horde.org>
- * @category   Horde
- * @package    Share
- * @subpackage UnitTests
- * @copyright  2010 The Horde Project (http://www.horde.org/)
- * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
- */
-class Horde_Share_SqlHierarchicalTest extends Horde_Share_TestBase
-{
-    protected static $db;
-
-    public function testSetTable()
-    {
-        $this->assertEquals('test_shares', self::$share->getTable());
-        self::$share->setTable('foo');
-        $this->assertEquals('foo', self::$share->getTable());
-        self::$share->setTable('test_shares');
-    }
-
-    public function testSetStorage()
-    {
-        self::$share->setStorage(self::$db);
-        $this->assertEquals(self::$db, self::$share->getStorage());
-    }
-
-    public function testAddShare()
-    {
-        $share = parent::baseAddShare();
-        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $share);
-        return $share->getId();
-    }
-
-    /**
-     * @depends testAddShare
-     */
-    public function testPermissions($myshareid)
-    {
-        $shareids = parent::basePermissions($myshareid);
-        return array(self::$share->getShareById($shareids[0]),
-                     self::$share->getShareById($shareids[1]),
-                     self::$share->getShareById($shareids[2]));
-    }
-
-    /**
-     * @depends testAddShare
-     */
-    public function testExists()
-    {
-        $this->markTestSkipped('Not supported by hierarchical driver.');
-    }
-
-    /**
-     * @depends testPermissions
-     */
-    public function testCountShares()
-    {
-        parent::baseCountShares();
-    }
-
-    /**
-     * @depends testPermissions
-     */
-    public function testGetShare()
-    {
-        $this->markTestSkipped('Not supported by hierarchical driver.');
-    }
-
-    /**
-     * @depends testPermissions
-     */
-    public function testGetShareById(array $shares)
-    {
-        parent::baseGetShareById($shares);
-    }
-
-    /**
-     * @depends testPermissions
-     */
-    public function testGetShares(array $shares)
-    {
-        $newshares = self::$share->getShares(array($shares[0]->getId(), $shares[1]->getId(), $shares[2]->getId()));
-        $this->assertType('array', $newshares);
-        $this->assertEquals(3, count($newshares));
-        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $newshares[0]);
-        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $newshares[1]);
-        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $newshares[2]);
-        $this->assertEquals($newshares[0], $shares[0]);
-        $this->assertEquals($newshares[1], $shares[1]);
-        $this->assertEquals($newshares[2], $shares[2]);
-
-        // Reset cache.
-        self::$share->resetCache();
-
-        $newshares = self::$share->getShares(array($shares[0]->getId(), $shares[1]->getId(), $shares[2]->getId()));
-        $this->assertType('array', $newshares);
-        $this->assertEquals(3, count($newshares));
-        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $newshares[$shares[0]->getId()]);
-        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $newshares[$shares[1]->getId()]);
-        $this->assertInstanceOf('Horde_Share_Object_Sql_Hierarchical', $newshares[$shares[2]->getId()]);
-        $this->assertEquals($newshares[$shares[0]->getId()], $shares[0]);
-        $this->assertEquals($newshares[$shares[1]->getId()], $shares[1]);
-        $this->assertEquals($newshares[$shares[2]->getId()], $shares[2]);
-    }
-
-    /**
-     * @depends testPermissions
-     */
-    public function testListAllShares()
-    {
-        $this->markTestSkipped('Not supported by hierarchical driver.');
-    }
-
-    /**
-     * @depends testPermissions
-     */
-    public function testListSystemShares()
-    {
-        $this->markTestSkipped('Not supported by hierarchical driver.');
-    }
-
-    /**
-     * @depends testPermissions
-     */
-    public function testRemoveShare(array $share)
-    {
-        parent::baseRemoveShare($share);
-    }
-
-    public static function setUpBeforeClass()
-    {
-        if (!extension_loaded('pdo') ||
-            !in_array('sqlite', PDO::getAvailableDrivers())) {
-            return;
-        }
-
-        self::$db = new Horde_Db_Adapter_Pdo_Sqlite(array('dbname' => ':memory:'));
-        //self::$db->setLogger(new Horde_Log_Logger(new Horde_Log_Handler_Stream(STDOUT)));
-        $migration = new Horde_Db_Migration_Base(self::$db);
-
-        $t = $migration->createTable('test_shares', array('primaryKey' => 'share_id'));
-        //$t->column('share_id', 'integer', array('null' => false, 'autoincrement' => true));
-        $t->column('share_owner', 'string', array('limit' => 255));
-        $t->column('share_flags', 'integer', array('default' => 0, 'null' => false));
-        $t->column('share_parents', 'string', array('limit' => 255));
-        $t->column('perm_creator', 'integer', array('default' => 0, 'null' => false));
-        $t->column('perm_default', 'integer', array('default' => 0, 'null' => false));
-        $t->column('perm_guest', 'integer', array('default' => 0, 'null' => false));
-        $t->column('attribute_name', 'string', array('limit' => 255));
-        $t->column('attribute_desc', 'string', array('limit' => 255));
-        $t->end();
-
-        $migration->addIndex('test_shares', array('share_owner'));
-        $migration->addIndex('test_shares', array('perm_creator'));
-        $migration->addIndex('test_shares', array('perm_default'));
-        $migration->addIndex('test_shares', array('perm_guest'));
-        $migration->addIndex('test_shares', array('share_parents'));
-
-        $t = $migration->createTable('test_shares_groups');
-        $t->column('share_id', 'integer', array('null' => false));
-        $t->column('group_uid', 'string', array('limit' => 255, 'null' => false));
-        $t->column('perm', 'integer', array('null' => false));
-        $t->end();
-
-        $migration->addIndex('test_shares_groups', array('share_id'));
-        $migration->addIndex('test_shares_groups', array('group_uid'));
-        $migration->addIndex('test_shares_groups', array('perm'));
-
-        $t = $migration->createTable('test_shares_users');
-        $t->column('share_id', 'integer', array('null' => false));
-        $t->column('user_uid', 'string', array('limit' => 255));
-        $t->column('perm', 'integer', array('null' => false));
-        $t->end();
-
-        $migration->addIndex('test_shares_users', array('share_id'));
-        $migration->addIndex('test_shares_users', array('user_uid'));
-        $migration->addIndex('test_shares_users', array('perm'));
-
-        $migration->migrate('up');
-
-        $group = new Horde_Group_Test();
-        self::$share = new Horde_Share_Sql_Hierarchical('test', 'john', new Horde_Perms(), $group);
-        self::$share->setStorage(self::$db);
-
-        // FIXME
-        $GLOBALS['injector'] = new Horde_Injector(new Horde_Injector_TopLevel());
-        $GLOBALS['injector']->setInstance('Horde_Group', $group);
-    }
-
-    public static function tearDownAfterClass()
-    {
-        if (self::$db) {
-            $migration = new Horde_Db_Migration_Base(self::$db);
-            $migration->dropTable('test_shares');
-            $migration->dropTable('test_shares_groups');
-            $migration->dropTable('test_shares_users');
-        }
-    }
-
-    public function setUp()
-    {
-        if (!self::$db) {
-            $this->markTestSkipped('No sqlite extension or no sqlite PDO driver.');
-        }
-    }
-}
diff --git a/framework/Share/test/Horde/Share/SqlTest.php b/framework/Share/test/Horde/Share/SqlTest.php
deleted file mode 100644 (file)
index 7ddbe4c..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-/**
- * Prepare the test setup.
- */
-require_once dirname(__FILE__) . '/TestBase.php';
-
-/**
- * @author     Jan Schneider <jan@horde.org>
- * @category   Horde
- * @package    Share
- * @subpackage UnitTests
- * @copyright  2010 The Horde Project (http://www.horde.org/)
- * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
- */
-class Horde_Share_SqlTest extends Horde_Share_TestBase
-{
-    protected static $db;
-
-    public function testSetTable()
-    {
-        $this->assertEquals('test_shares', self::$share->getTable());
-        self::$share->setTable('foo');
-        $this->assertEquals('foo', self::$share->getTable());
-        self::$share->setTable('test_shares');
-    }
-
-    public function testSetStorage()
-    {
-        self::$share->setStorage(self::$db);
-        $this->assertEquals(self::$db, self::$share->getStorage());
-    }
-
-    public function testAddShare()
-    {
-        $share = parent::baseAddShare();
-        $this->assertInstanceOf('Horde_Share_Object_Sql', $share);
-        return $share->getId();
-    }
-
-    /**
-     * @depends testAddShare
-     */
-    public function testPermissions($myshareid)
-    {
-        return parent::basePermissions($myshareid);
-    }
-
-    /**
-     * @depends testAddShare
-     */
-    public function testExists()
-    {
-        parent::baseExists();
-    }
-
-    /**
-     * @depends testPermissions
-     */
-    public function testCountShares()
-    {
-        parent::baseCountShares();
-    }
-
-    /**
-     * @depends testPermissions
-     */
-    public function testGetShare()
-    {
-        $shares = parent::baseGetShare();
-        $this->assertInstanceOf('Horde_Share_Object_Sql', $shares[0]);
-        $this->assertInstanceOf('Horde_Share_Object_Sql', $shares[1]);
-        $this->assertInstanceOf('Horde_Share_Object_Sql', $shares[2]);
-        return $shares;
-    }
-
-    /**
-     * @depends testGetShare
-     */
-    public function testGetShareById(array $shares)
-    {
-        parent::baseGetShareById($shares);
-    }
-
-    /**
-     * @depends testGetShare
-     */
-    public function testGetShares(array $shares)
-    {
-        parent::baseGetShares($shares);
-    }
-
-    /**
-     * @depends testPermissions
-     */
-    public function testListAllShares()
-    {
-        parent::baseListAllShares();
-    }
-
-    /**
-     * @depends testPermissions
-     */
-    public function testListSystemShares()
-    {
-        parent::baseListSystemShares();
-    }
-
-    /**
-     * @depends testGetShare
-     */
-    public function testRemoveShare(array $share)
-    {
-        parent::baseRemoveShare($share);
-    }
-
-    public static function setUpBeforeClass()
-    {
-        if (!extension_loaded('pdo') ||
-            !in_array('sqlite', PDO::getAvailableDrivers())) {
-            return;
-        }
-
-        self::$db = new Horde_Db_Adapter_Pdo_Sqlite(array('dbname' => ':memory:'));
-        //self::$db->setLogger(new Horde_Log_Logger(new Horde_Log_Handler_Stream(STDOUT)));
-        $migration = new Horde_Db_Migration_Base(self::$db);
-
-        $t = $migration->createTable('test_shares', array('primaryKey' => 'share_id'));
-        //$t->column('share_id', 'integer', array('null' => false, 'autoincrement' => true));
-        $t->column('share_name', 'string', array('limit' => 255, 'null' => false));
-        $t->column('share_owner', 'string', array('limit' => 255));
-        $t->column('share_flags', 'integer', array('default' => 0, 'null' => false));
-        $t->column('perm_creator', 'integer', array('default' => 0, 'null' => false));
-        $t->column('perm_default', 'integer', array('default' => 0, 'null' => false));
-        $t->column('perm_guest', 'integer', array('default' => 0, 'null' => false));
-        $t->column('attribute_name', 'string', array('limit' => 255));
-        $t->column('attribute_desc', 'string', array('limit' => 255));
-        $t->end();
-
-        $migration->addIndex('test_shares', array('share_name'));
-        $migration->addIndex('test_shares', array('share_owner'));
-        $migration->addIndex('test_shares', array('perm_creator'));
-        $migration->addIndex('test_shares', array('perm_default'));
-        $migration->addIndex('test_shares', array('perm_guest'));
-
-        $t = $migration->createTable('test_shares_groups');
-        $t->column('share_id', 'integer', array('null' => false));
-        $t->column('group_uid', 'string', array('limit' => 255, 'null' => false));
-        $t->column('perm', 'integer', array('null' => false));
-        $t->end();
-
-        $migration->addIndex('test_shares_groups', array('share_id'));
-        $migration->addIndex('test_shares_groups', array('group_uid'));
-        $migration->addIndex('test_shares_groups', array('perm'));
-
-        $t = $migration->createTable('test_shares_users');
-        $t->column('share_id', 'integer', array('null' => false));
-        $t->column('user_uid', 'string', array('limit' => 255));
-        $t->column('perm', 'integer', array('null' => false));
-        $t->end();
-
-        $migration->addIndex('test_shares_users', array('share_id'));
-        $migration->addIndex('test_shares_users', array('user_uid'));
-        $migration->addIndex('test_shares_users', array('perm'));
-
-        $migration->migrate('up');
-
-        $group = new Horde_Group_Test();
-        self::$share = new Horde_Share_Sql('test', 'john', new Horde_Perms(), $group);
-        self::$share->setStorage(self::$db);
-
-        // FIXME
-        $GLOBALS['injector'] = new Horde_Injector(new Horde_Injector_TopLevel());
-        $GLOBALS['injector']->setInstance('Horde_Group', $group);
-    }
-
-    public static function tearDownAfterClass()
-    {
-        if (self::$db) {
-            $migration = new Horde_Db_Migration_Base(self::$db);
-            $migration->dropTable('test_shares');
-            $migration->dropTable('test_shares_groups');
-            $migration->dropTable('test_shares_users');
-        }
-    }
-
-    public function setUp()
-    {
-        if (!self::$db) {
-            $this->markTestSkipped('No sqlite extension or no sqlite PDO driver.');
-        }
-    }
-}
diff --git a/framework/Share/test/Horde/Share/TestBase.php b/framework/Share/test/Horde/Share/TestBase.php
deleted file mode 100644 (file)
index 7a810b6..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-<?php
-/**
- * Prepare the test setup.
- */
-require_once dirname(__FILE__) . '/Autoload.php';
-
-/**
- * @author     Jan Schneider <jan@horde.org>
- * @category   Horde
- * @package    Share
- * @subpackage UnitTests
- * @copyright  2010 The Horde Project (http://www.horde.org/)
- * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
- */
-class Horde_Share_TestBase extends PHPUnit_Framework_TestCase
-{
-    protected static $share;
-
-    public function testGetApp()
-    {
-        $this->assertEquals('test', self::$share->getApp());
-    }
-
-    public function baseAddShare()
-    {
-        $share = self::$share->newShare('john', 'myshare');
-        $this->assertInstanceOf('Horde_Share_Object', $share);
-        self::$share->addShare($share);
-        return $share;
-    }
-
-    public function basePermissions($myshareid)
-    {
-        // System share.
-        $share = self::$share->newShare(null, 'systemshare');
-        $perm = $share->getPermission();
-        $this->assertInstanceOf('Horde_Perms_Permission', $perm);
-        $perm->addDefaultPermission(Horde_Perms::SHOW | Horde_Perms::READ);
-        $share->setPermission($perm);
-        $share->save();
-        $this->assertTrue($share->hasPermission('john', Horde_Perms::SHOW));
-        $this->assertTrue($share->hasPermission('john', Horde_Perms::READ));
-        $this->assertFalse($share->hasPermission('john', Horde_Perms::EDIT));
-        $this->assertFalse($share->hasPermission('john', Horde_Perms::DELETE));
-
-        // Foreign share with user permissions.
-        $janeshare = self::$share->newShare('jane', 'janeshare');
-        $janeshare->addUserPermission('john', Horde_Perms::SHOW | Horde_Perms::READ | Horde_Perms::EDIT);
-        $janeshare->save();
-        $this->assertTrue($janeshare->hasPermission('john', Horde_Perms::SHOW));
-        $this->assertTrue($janeshare->hasPermission('john', Horde_Perms::READ));
-        $this->assertTrue($janeshare->hasPermission('john', Horde_Perms::EDIT));
-        $this->assertFalse($janeshare->hasPermission('john', Horde_Perms::DELETE));
-
-        // Foreign share with group permissions.
-        $groupshare = self::$share->newShare('jane', 'groupshare');
-        $groupshare->addGroupPermission('mygroup', Horde_Perms::SHOW | Horde_Perms::READ | Horde_Perms::DELETE);
-        $groupshare->save();
-        $this->assertTrue($groupshare->hasPermission('john', Horde_Perms::SHOW));
-        $this->assertTrue($groupshare->hasPermission('john', Horde_Perms::READ));
-        $this->assertFalse($groupshare->hasPermission('john', Horde_Perms::EDIT));
-        $this->assertTrue($groupshare->hasPermission('john', Horde_Perms::DELETE));
-
-        // Foreign share without permissions.
-        $share = self::$share->newShare('jane', 'noshare');
-        $share->save();
-
-        return array($myshareid, $janeshare->getId(), $groupshare->getId());
-    }
-
-    public function baseExists()
-    {
-        $this->assertTrue(self::$share->exists('myshare'));
-
-        // Reset cache.
-        self::$share->resetCache();
-
-        $this->assertTrue(self::$share->exists('myshare'));
-    }
-
-    public function baseCountShares()
-    {
-        // Getting shares from cache.
-        $this->assertEquals(4, self::$share->countShares('john'));
-        $this->assertEquals(2, self::$share->countShares('john', Horde_Perms::EDIT));
-
-        // Reset cache.
-        self::$share->resetCache();
-
-        // Getting shares from backend.
-        $this->assertEquals(4, self::$share->countShares('john'));
-        $this->assertEquals(2, self::$share->countShares('john', Horde_Perms::EDIT));
-    }
-
-    public function baseGetShare()
-    {
-        $share = self::$share->getShare('myshare');
-        $this->assertInstanceOf('Horde_Share_Object', $share);
-
-        // Reset cache.
-        self::$share->resetCache();
-
-        $share = self::$share->getShare('myshare');
-        $this->assertInstanceOf('Horde_Share_Object', $share);
-
-        return array($share, self::$share->getShare('janeshare'), self::$share->getShare('groupshare'));
-    }
-
-    public function baseGetShareById(array $shares)
-    {
-        $newshare = self::$share->getShareById($shares[0]->getId());
-        $this->assertInstanceOf('Horde_Share_Object', $newshare);
-        $this->assertEquals($shares[0], $newshare);
-        $newshare = self::$share->getShareById($shares[1]->getId());
-        $this->assertInstanceOf('Horde_Share_Object', $newshare);
-        $this->assertEquals($shares[1], $newshare);
-        $newshare = self::$share->getShareById($shares[2]->getId());
-        $this->assertInstanceOf('Horde_Share_Object', $newshare);
-        $this->assertEquals($shares[2], $newshare);
-
-        // Reset cache.
-        self::$share->resetCache();
-
-        $newshare = self::$share->getShareById($shares[0]->getId());
-        $this->assertInstanceOf('Horde_Share_Object', $newshare);
-        $this->assertEquals($shares[0], $newshare);
-        $newshare = self::$share->getShareById($shares[1]->getId());
-        $this->assertInstanceOf('Horde_Share_Object', $newshare);
-        $this->assertEquals($shares[1], $newshare);
-        $newshare = self::$share->getShareById($shares[2]->getId());
-        $this->assertInstanceOf('Horde_Share_Object', $newshare);
-        $this->assertEquals($shares[2], $newshare);
-    }
-
-    public function baseGetShares(array $shares)
-    {
-        $newshares = self::$share->getShares(array($shares[0]->getId(), $shares[1]->getId(), $shares[2]->getId()));
-        $this->assertType('array', $newshares);
-        $this->assertEquals(3, count($newshares));
-        $this->assertArrayHasKey('myshare', $newshares);
-        $this->assertArrayHasKey('janeshare', $newshares);
-        $this->assertArrayHasKey('groupshare', $newshares);
-        $this->assertInstanceOf('Horde_Share_Object', $newshares['myshare']);
-        $this->assertInstanceOf('Horde_Share_Object', $newshares['janeshare']);
-        $this->assertInstanceOf('Horde_Share_Object', $newshares['groupshare']);
-        $this->assertEquals($newshares['myshare'], $shares[0]);
-        $this->assertEquals($newshares['janeshare'], $shares[1]);
-        $this->assertEquals($newshares['groupshare'], $shares[2]);
-
-        // Reset cache.
-        self::$share->resetCache();
-
-        $newshares = self::$share->getShares(array($shares[0]->getId(), $shares[1]->getId(), $shares[2]->getId()));
-        $this->assertType('array', $newshares);
-        $this->assertEquals(3, count($newshares));
-        $this->assertArrayHasKey('myshare', $newshares);
-        $this->assertArrayHasKey('janeshare', $newshares);
-        $this->assertArrayHasKey('groupshare', $newshares);
-        $this->assertInstanceOf('Horde_Share_Object', $newshares['myshare']);
-        $this->assertInstanceOf('Horde_Share_Object', $newshares['janeshare']);
-        $this->assertInstanceOf('Horde_Share_Object', $newshares['groupshare']);
-        $this->assertEquals($newshares['myshare'], $shares[0]);
-        $this->assertEquals($newshares['janeshare'], $shares[1]);
-        $this->assertEquals($newshares['groupshare'], $shares[2]);
-    }
-
-    public function baseListAllShares()
-    {
-        // Getting shares from cache.
-        $shares = self::$share->listAllShares();
-        $this->assertType('array', $shares);
-        $this->assertEquals(5, count($shares));
-        $this->assertArrayHasKey('myshare', $shares);
-        $this->assertArrayHasKey('systemshare', $shares);
-        $this->assertArrayHasKey('janeshare', $shares);
-        $this->assertArrayHasKey('groupshare', $shares);
-        $this->assertArrayHasKey('noshare', $shares);
-
-        // Reset cache.
-        self::$share->resetCache();
-
-        // Getting shares from backend.
-        $shares = self::$share->listAllShares();
-        $this->assertType('array', $shares);
-        $this->assertEquals(5, count($shares));
-        $this->assertArrayHasKey('myshare', $shares);
-        $this->assertArrayHasKey('systemshare', $shares);
-        $this->assertArrayHasKey('janeshare', $shares);
-        $this->assertArrayHasKey('groupshare', $shares);
-        $this->assertArrayHasKey('noshare', $shares);
-    }
-
-    public function baseListSystemShares()
-    {
-        // Getting shares from cache.
-        $shares = self::$share->listSystemShares();
-        $this->assertType('array', $shares);
-        $this->assertEquals(1, count($shares));
-        $this->assertArrayHasKey('systemshare', $shares);
-
-        // Reset cache.
-        self::$share->resetCache();
-
-        // Getting shares from backend.
-        $shares = self::$share->listSystemShares();
-        $this->assertType('array', $shares);
-        $this->assertEquals(1, count($shares));
-        $this->assertArrayHasKey('systemshare', $shares);
-    }
-
-    public function baseRemoveShare(array $share)
-    {
-        self::$share->removeShare($share[0]);
-        try {
-            self::$share->getShareById($share[0]->getId());
-            $this->fail('Share ' . $share[0]->getId() . ' should be removed by now.');
-        } catch (Horde_Exception_NotFound $e) {
-        }
-
-        // Reset cache.
-        self::$share->resetCache();
-
-        try {
-            self::$share->getShareById($share[0]->getId());
-            $this->fail('Share ' . $share[0]->getId() . ' should be removed by now.');
-        } catch (Horde_Exception_NotFound $e) {
-        }
-    }
-}
-
-class Horde_Group_Test extends Horde_Group {
-    public function __construct()
-    {
-    }
-
-    public function __wakeup()
-    {
-    }
-
-    public function userIsInGroup($user, $gid, $subgroups = true)
-    {
-        return $user == 'john' && $gid == 'mygroup';
-    }
-
-    public function getGroupMemberships($user, $parentGroups = false)
-    {
-        return $user == 'john' ? array('mygroup' => 'mygroup') : array();
-    }
-}
diff --git a/framework/Share/test/Horde/Share/conf.php.dist b/framework/Share/test/Horde/Share/conf.php.dist
new file mode 100644 (file)
index 0000000..67ca8e7
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+// IMPORTANT: the conf.php version of this file must be both in this  and any
+// subdirectory. A symlink is fine too.
+$conf['share']['sql']['mysql']['host'] = 'localhost';
+$conf['share']['sql']['mysql']['username'] = '';
+$conf['share']['sql']['mysql']['password'] = '';
+$conf['share']['sql']['mysql']['dbname'] = 'test';
+$conf['share']['sql']['mysql']['charset'] = 'utf-8';
+$conf['share']['sql']['mysqli']['host'] = 'localhost';
+$conf['share']['sql']['mysqli']['username'] = '';
+$conf['share']['sql']['mysqli']['password'] = '';
+$conf['share']['sql']['mysqli']['dbname'] = 'test';
+$conf['share']['sql']['mysqli']['charset'] = 'utf-8';
+$conf['share']['sql']['pdo_mysql']['host'] = 'localhost';
+$conf['share']['sql']['pdo_mysql']['username'] = '';
+$conf['share']['sql']['pdo_mysql']['password'] = '';
+$conf['share']['sql']['pdo_mysql']['dbname'] = 'test';
+$conf['share']['sql']['pdo_mysql']['charset'] = 'utf-8';
+$conf['share']['sql']['pdo_pgsql']['username'] = '';
+$conf['share']['sql']['pdo_pgsql']['password'] = '';
+$conf['share']['sql']['pdo_pgsql']['dbname'] = 'test';