| 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.');  }}
 |