ctools.plugins.test

File

tests/ctools.plugins.test

View source
<?php


/**
 * Test menu links depending on user permissions.
 */
class CtoolsPluginsGetInfoTestCase extends DrupalWebTestCase {
    
    /**
     * {@inheritdoc}
     */
    public static function getInfo() {
        return array(
            'name' => 'Get plugin info',
            'description' => 'Verify that plugin type definitions can properly set and overide values.',
            'group' => 'ctools',
            'dependencies' => array(
                'ctools',
            ),
        );
    }
    
    /**
     * {@inheritdoc}
     */
    public function setUp(array $modules = array()) {
        $modules[] = 'ctools';
        $modules[] = 'ctools_plugin_test';
        parent::setUp($modules);
    }
    
    /**
     * Assert helper to check that a specific plugin function exists.
     *
     * @param $module
     *   The module that owns the plugin.
     * @param $type
     *   The type of plugin.
     * @param $id
     *   The id of the specific plugin to load.
     * @param $function
     *   The identifier of the function. For example, 'settings form'.
     */
    protected function assertPluginFunction($module, $type, $id, $function = 'function') {
        $func = ctools_plugin_load_function($module, $type, $id, $function);
        $this->assertTrue(function_exists($func), t('Plugin @plugin of plugin type @module:@type successfully retrieved @retrieved for @function.', array(
            '@plugin' => $id,
            '@module' => $module,
            '@type' => $type,
            '@function' => $function,
            '@retrieved' => $func,
        )));
    }
    
    /**
     * Assert helper to check that a specific plugin function does NOT exist.
     *
     * @param $module
     *   The module that owns the plugin.
     * @param $type
     *   The type of plugin.
     * @param $id
     *   The id of the specific plugin to load.
     * @param $function
     *   The identifier of the function. For example, 'settings form'.
     */
    protected function assertPluginMissingFunction($module, $type, $id, $function = 'function') {
        $func = ctools_plugin_load_function($module, $type, $id, $function);
        $this->assertEqual($func, NULL, t('Plugin @plugin of plugin type @module:@type for @function with missing function successfully failed.', array(
            '@plugin' => $id,
            '@module' => $module,
            '@type' => $type,
            '@function' => (string) $func,
        )));
    }
    
    /**
     * Assert helper to check that a plugin can be loaded using a named class.
     *
     * @param $module
     *   The module that owns the plugin.
     * @param $type
     *   The type of plugin.
     * @param $id
     *   The id of the specific plugin to load.
     * @param string $class
     *   The name of the PHP class to load.
     */
    protected function assertPluginClass($module, $type, $id, $class = 'handler') {
        $class_name = ctools_plugin_load_class($module, $type, $id, $class);
        $this->assertTrue(class_exists($class_name), t('Plugin @plugin of plugin type @module:@type successfully retrieved @retrieved for @class.', array(
            '@plugin' => $id,
            '@module' => $module,
            '@type' => $type,
            '@class' => $class,
            '@retrieved' => $class_name,
        )));
    }
    
    /**
     * Assert helper to check that a plugin DOES NOT contain the named class.
     *
     * @param $module
     *   The module that owns the plugin.
     * @param $type
     *   The type of plugin.
     * @param $id
     *   The id of the specific plugin to load.
     * @param string $class
     *   The name of the PHP class to load.
     */
    protected function assertPluginMissingClass($module, $type, $id, $class = 'handler') {
        $class_name = ctools_plugin_load_class($module, $type, $id, $class);
        $this->assertEqual($class_name, NULL, t('Plugin @plugin of plugin type @module:@type for @class with missing class successfully failed.', array(
            '@plugin' => $id,
            '@module' => $module,
            '@type' => $type,
            '@class' => $class,
        )));
    }
    
    /**
     * Test that plugins are loaded correctly.
     */
    public function testPluginLoading() {
        ctools_include('plugins');
        $module = 'ctools_plugin_test';
        $type = 'not_cached';
        // Test function retrieval for plugins using different definition methods.
        $this->assertPluginFunction($module, $type, 'plugin_array', 'function');
        $this->assertPluginFunction($module, $type, 'plugin_array2', 'function');
        $this->assertPluginMissingFunction($module, $type, 'plugin_array_dne', 'function');
        $this->assertPluginFunction($module, "big_hook_{$type}", 'test1', 'function');
        // Test class retrieval for plugins using different definition methods.
        $this->assertPluginClass($module, $type, 'plugin_array', 'handler');
        $this->assertPluginClass($module, $type, 'plugin_array2', 'handler');
        $this->assertPluginMissingClass($module, $type, 'plugin_array_dne', 'handler');
        // @todo Test big hook plugins.
        $type = 'cached';
        // Test function retrieval for plugins using different definition methods.
        $this->assertPluginFunction($module, $type, 'plugin_array', 'function');
        $this->assertPluginFunction($module, $type, 'plugin_array2', 'function');
        $this->assertPluginMissingFunction($module, $type, 'plugin_array_dne', 'function');
        $this->assertPluginFunction($module, "big_hook_{$type}", 'test1', 'function');
        // Test class retrieval for plugins using different definition methods.
        $this->assertPluginClass($module, $type, 'plugin_array', 'handler');
        $this->assertPluginClass($module, $type, 'plugin_array2', 'handler');
        $this->assertPluginMissingClass($module, $type, 'plugin_array_dne', 'handler');
        // @todo Test big hook plugins.
    }

}

Classes

Title Deprecated Summary
CtoolsPluginsGetInfoTestCase Test menu links depending on user permissions.