123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- <?php
- /**
- * User permission component tests for Features
- */
- class FeaturesUserTestCase extends DrupalWebTestCase {
- protected $profile = 'testing';
- /**
- * Test info.
- */
- public static function getInfo() {
- return array(
- 'name' => t('Component tests'),
- 'description' => t('Run tests for components of Features.') ,
- 'group' => t('Features'),
- );
- }
- /**
- * Set up test.
- */
- public function setUp() {
- parent::setUp(array(
- 'field',
- 'filter',
- 'image',
- 'taxonomy',
- 'views',
- 'features',
- 'features_test'
- ));
- // Run a features rebuild to ensure our feature is fully installed.
- features_rebuild();
- $admin_user = $this->drupalCreateUser(array('administer features'));
- $this->drupalLogin($admin_user);
- }
- /**
- * Run test.
- */
- public function test() {
- module_load_include('inc', 'features', 'features.export');
- $components = array_filter(array(
- 'field_instance' => 'field',
- 'filter' => 'filter',
- 'image' => 'image',
- 'node' => 'node',
- 'user_permission' => 'user',
- 'views_view' => 'views',
- ), 'module_exists');
- foreach (array_keys($components) as $component) {
- $callback = "_test_{$component}";
- // Ensure that the component/default is properly available.
- $object = $this->$callback('load');
- $this->assertTrue(!empty($object), t('@component present.', array('@component' => $component)));
- // Ensure that the component is defaulted.
- $states = features_get_component_states(array('features_test'), FALSE, TRUE);
- $this->assertTrue($states['features_test'][$component] === FEATURES_DEFAULT, t('@component state: Default.', array('@component' => $component)));
- // Override component and test that Features detects the override.
- $this->$callback('override', $this);
- $states = features_get_component_states(array('features_test'), FALSE, TRUE);
- $this->assertTrue($states['features_test'][$component] === FEATURES_OVERRIDDEN, t('@component state: Overridden.', array('@component' => $component)));
- }
- // Revert component and ensure that component has reverted.
- // Do this in separate loops so we only have to run
- // drupal_flush_all_caches() once.
- foreach (array_keys($components) as $component) {
- features_revert(array('features_test' => array($component)));
- }
- drupal_flush_all_caches();
- foreach (array_keys($components) as $component) {
- // Reload so things like Views can clear it's cache
- $this->$callback('load');
- $states = features_get_component_states(array('features_test'), FALSE, TRUE);
- $this->assertTrue($states['features_test'][$component] === FEATURES_DEFAULT, t('@component reverted.', array('@component' => $component)));
- }
- }
- protected function _test_field_instance($op = 'load') {
- switch ($op) {
- case 'load':
- return field_info_instance('node', 'field_features_test', 'features_test');
- case 'override':
- $field_instance = field_info_instance('node', 'field_features_test', 'features_test');
- $field_instance['label'] = 'Foo bar';
- field_update_instance($field_instance);
- break;
- }
- }
- protected function _test_filter($op = 'load') {
- // So... relying on our own API functions to test is pretty lame.
- // But these modules don't have APIs either. So might as well use
- // the ones we've written for them...
- features_include();
- switch ($op) {
- case 'load':
- return features_filter_format_load('features_test');
- case 'override':
- $format = features_filter_format_load('features_test');
- unset($format->filters['filter_url']);
- filter_format_save($format);
- break;
- }
- }
- protected function _test_image($op = 'load') {
- switch ($op) {
- case 'load':
- return image_style_load('features_test');
- case 'override':
- $style = image_style_load('features_test');
- $style = image_style_save($style);
- foreach ($style['effects'] as $effect) {
- $effect['data']['width'] = '120';
- image_effect_save($effect);
- }
- break;
- }
- }
- protected function _test_node($op = 'load') {
- switch ($op) {
- case 'load':
- return node_type_get_type('features_test');
- case 'override':
- $type = node_type_get_type('features_test');
- $type->description = 'Foo bar baz.';
- $type->modified = TRUE;
- node_type_save($type);
- break;
- }
- }
- protected function _test_views_view($op = 'load') {
- switch ($op) {
- case 'load':
- return views_get_view('features_test', TRUE);
- case 'override':
- $view = views_get_view('features_test', TRUE);
- $view->set_display('default');
- $view->display_handler->override_option('title', 'Foo bar');
- $view->save();
- // Clear the load cache from above
- views_get_view('features_test', TRUE);
- break;
- }
- }
- protected function _test_user_permission($op = 'load') {
- switch ($op) {
- case 'load':
- $permissions = user_role_permissions(array(DRUPAL_AUTHENTICATED_RID => 'authenticated user'));
- return !empty($permissions[DRUPAL_AUTHENTICATED_RID]['create features_test content']);
- case 'override':
- user_role_change_permissions(DRUPAL_AUTHENTICATED_RID, array('create features_test content' => 0));
- break;
- }
- }
- }
- /**
- * Tests enabling of feature modules.
- */
- class FeaturesEnableTestCase extends DrupalWebTestCase {
- protected $profile = 'testing';
- /**
- * Test info.
- */
- public static function getInfo() {
- return array(
- 'name' => t('Features enable tests'),
- 'description' => t('Run tests for enabling of features.') ,
- 'group' => t('Features'),
- );
- }
- /**
- * Run test for features_get_components on enable.
- */
- public function testFeaturesGetComponents() {
- // Testing that features_get_components returns correct after enable.
- $modules = array(
- 'features',
- 'taxonomy',
- 'features_test',
- );
- // Make sure features_get_components is cached if features already enabled.
- if (!module_exists('features')) {
- drupal_load('module', 'features');
- }
- features_get_components();
- module_enable($modules);
- // Make sure correct information for enabled modules is now cached.
- $components = features_get_components();
- $taxonomy_component_info = taxonomy_features_api();
- $this->assertTrue(!empty($components['taxonomy']) && $components['taxonomy'] == $taxonomy_component_info['taxonomy'], 'features_get_components returns correct taxonomy information on enable');
- features_rebuild();
- $this->assertNotNull(taxonomy_vocabulary_machine_name_load('taxonomy_features_test'), 'Taxonomy vocabulary correctly enabled on enable.');
- }
- }
- /**
- * Tests integration of ctools for features.
- */
- class FeaturesCtoolsIntegrationTest extends DrupalWebTestCase {
- protected $profile = 'testing';
- /**
- * Test info.
- */
- public static function getInfo() {
- return array(
- 'name' => t('Features Chaos Tools integration'),
- 'description' => t('Run tests for ctool integration of features.') ,
- 'group' => t('Features'),
- );
- }
- /**
- * Set up test.
- */
- public function setUp() {
- parent::setUp(array(
- 'features',
- 'ctools',
- ));
- }
- /**
- * Run test.
- */
- public function testModuleEnable() {
- $try = array(
- 'strongarm',
- 'views',
- );
- // Trigger the first includes and the static to be set.
- features_include();
- $function_ends = array(
- 'features_export',
- 'features_export_options',
- 'features_export_render',
- 'features_revert',
- );
- foreach ($try as $module) {
- $function = $module . '_features_api';
- $this->assertFalse(function_exists($function), 'Chaos tools functions for ' . $module . ' do not exist while it is disabled.');
- // Module enable will trigger declaring the new functions.
- module_enable(array($module));
- }
- // CTools hooks only created when there is an actual feature exportable
- // enabled.
- module_enable(array('features_test'));
- foreach ($try as $module) {
- if (module_exists($module)) {
- $function_exists = function_exists($function);
- if ($function_exists) {
- foreach ($function() as $component_type => $component_info) {
- foreach ($function_ends as $function_end) {
- $function_exists = $function_exists && function_exists($component_type . '_' . $function_end);
- }
- }
- }
- $this->assertTrue($function_exists, 'Chaos tools functions for ' . $module . ' exist when it is enabled.');
- }
- }
- }
- }
- /**
- * Test detecting modules as features.
- */
- class FeaturesDetectionTestCase extends DrupalWebTestCase {
- protected $profile = 'testing';
- /**
- * Test info.
- */
- public static function getInfo() {
- return array(
- 'name' => t('Feature Detection tests'),
- 'description' => t('Run tests for detecting items as features.') ,
- 'group' => t('Features'),
- );
- }
- /**
- * Set up test.
- */
- public function setUp() {
- parent::setUp(array(
- 'features',
- ));
- }
- /**
- * Run test.
- */
- public function test() {
- module_load_include('inc', 'features', 'features.export');
- // First test that features_populate inserts the features api key.
- $export = features_populate(array(), array(), 'features_test_empty_fake');
- $this->assertTrue(!empty($export['features']['features_api']) && key($export['features']['features_api']) == 'api:' . FEATURES_API, 'Features API key added to new export.');
- $this->assertTrue((bool)features_get_features('features_test'), 'Features test recognized as a feature.');
- $this->assertFalse((bool)features_get_features('features'), 'Features module not recognized as a feature.');
- }
- }
|