original_string: protected function get_behat_features_for_theme($theme) {
          global $CFG;
  
          // Get list of features defined by theme.
          $themefeatures = $this->get_tests_for_theme($theme, 'features');
          $themeblacklistfeatures = $this->get_blacklisted_tests_for_theme($theme, 'features');
          $themeblacklisttags = $this->get_blacklisted_tests_for_theme($theme, 'tags');
  
          // Mobile app tests are not theme-specific, so run only for the default theme (and if
          // configured).
          if ((empty($CFG->behat_ionic_dirroot) && empty($CFG->behat_ionic_wwwroot)) ||
                  $theme !== $this->get_default_theme()) {
              $themeblacklisttags[] = '@app';
          }
  
          // Clean feature key and path.
          $features = array();
          $blacklistfeatures = array();
  
          foreach ($themefeatures as $themefeature) {
              list($featurekey, $featurepath) = $this->get_clean_feature_key_and_path($themefeature);
              $features[$featurekey] = $featurepath;
          }
  
          foreach ($themeblacklistfeatures as $themeblacklistfeature) {
              list($blacklistfeaturekey, $blacklistfeaturepath) = $this->get_clean_feature_key_and_path($themeblacklistfeature);
              $blacklistfeatures[$blacklistfeaturekey] = $blacklistfeaturepath;
          }
  
          // If blacklist tags then add those features to list.
          if (!empty($themeblacklisttags)) {
              // Remove @ if given, so we are sure we have only tag names.
              $themeblacklisttags = array_map(function($v) {
                  return ltrim($v, '@');
              }, $themeblacklisttags);
  
              $themeblacklisttags = '@' . implode(',@', $themeblacklisttags);
              $blacklistedfeatureswithtag = $this->filtered_features_with_tags($this->get_components_features(),
                  $themeblacklisttags);
  
              // Add features with blacklisted tags.
              if (!empty($blacklistedfeatureswithtag)) {
                  foreach ($blacklistedfeatureswithtag as $themeblacklistfeature) {
                      list($key, $path) = $this->get_clean_feature_key_and_path($themeblacklistfeature);
                      $blacklistfeatures[$key] = $path;
                  }
              }
          }
  
          ksort($features);
  
          $retval = array(
              'blacklistfeatures' => $blacklistfeatures,
              'features' => $features
          );
  
          return $retval;
      }
code: protected function get_behat_features_for_theme($theme) {
          global $CFG;
  
          // Get list of features defined by theme.
          $themefeatures = $this->get_tests_for_theme($theme, 'features');
          $themeblacklistfeatures = $this->get_blacklisted_tests_for_theme($theme, 'features');
          $themeblacklisttags = $this->get_blacklisted_tests_for_theme($theme, 'tags');
  
          // Mobile app tests are not theme-specific, so run only for the default theme (and if
          // configured).
          if ((empty($CFG->behat_ionic_dirroot) && empty($CFG->behat_ionic_wwwroot)) ||
                  $theme !== $this->get_default_theme()) {
              $themeblacklisttags[] = '@app';
          }
  
          // Clean feature key and path.
          $features = array();
          $blacklistfeatures = array();
  
          foreach ($themefeatures as $themefeature) {
              list($featurekey, $featurepath) = $this->get_clean_feature_key_and_path($themefeature);
              $features[$featurekey] = $featurepath;
          }
  
          foreach ($themeblacklistfeatures as $themeblacklistfeature) {
              list($blacklistfeaturekey, $blacklistfeaturepath) = $this->get_clean_feature_key_and_path($themeblacklistfeature);
              $blacklistfeatures[$blacklistfeaturekey] = $blacklistfeaturepath;
          }
  
          // If blacklist tags then add those features to list.
          if (!empty($themeblacklisttags)) {
              // Remove @ if given, so we are sure we have only tag names.
              $themeblacklisttags = array_map(function($v) {
                  return ltrim($v, '@');
              }, $themeblacklisttags);
  
              $themeblacklisttags = '@' . implode(',@', $themeblacklisttags);
              $blacklistedfeatureswithtag = $this->filtered_features_with_tags($this->get_components_features(),
                  $themeblacklisttags);
  
              // Add features with blacklisted tags.
              if (!empty($blacklistedfeatureswithtag)) {
                  foreach ($blacklistedfeatureswithtag as $themeblacklistfeature) {
                      list($key, $path) = $this->get_clean_feature_key_and_path($themeblacklistfeature);
                      $blacklistfeatures[$key] = $path;
                  }
              }
          }
  
          ksort($features);
  
          $retval = array(
              'blacklistfeatures' => $blacklistfeatures,
              'features' => $features
          );
  
          return $retval;
      }
code_tokens: protected function get_behat_features_for_theme ( $ theme ) { global $ CFG ; // Get list of features defined by theme. $ themefeatures = $ this -> get_tests_for_theme ( $ theme , 'features' ) ; $ themeblacklistfeatures = $ this -> get_blacklisted_tests_for_theme ( $ theme , 'features' ) ; $ themeblacklisttags = $ this -> get_blacklisted_tests_for_theme ( $ theme , 'tags' ) ; // Mobile app tests are not theme-specific, so run only for the default theme (and if // configured). if ( ( empty ( $ CFG -> behat_ionic_dirroot ) && empty ( $ CFG -> behat_ionic_wwwroot ) ) || $ theme !== $ this -> get_default_theme ( ) ) { $ themeblacklisttags [ ] = '@app' ; } // Clean feature key and path. $ features = array ( ) ; $ blacklistfeatures = array ( ) ; foreach ( $ themefeatures as $ themefeature ) { list ( $ featurekey , $ featurepath ) = $ this -> get_clean_feature_key_and_path ( $ themefeature ) ; $ features [ $ featurekey ] = $ featurepath ; } foreach ( $ themeblacklistfeatures as $ themeblacklistfeature ) { list ( $ blacklistfeaturekey , $ blacklistfeaturepath ) = $ this -> get_clean_feature_key_and_path ( $ themeblacklistfeature ) ; $ blacklistfeatures [ $ blacklistfeaturekey ] = $ blacklistfeaturepath ; } // If blacklist tags then add those features to list. if ( ! empty ( $ themeblacklisttags ) ) { // Remove @ if given, so we are sure we have only tag names. $ themeblacklisttags = array_map ( function ( $ v ) { return ltrim ( $ v , '@' ) ; } , $ themeblacklisttags ) ; $ themeblacklisttags = '@' . implode ( ',@' , $ themeblacklisttags ) ; $ blacklistedfeatureswithtag = $ this -> filtered_features_with_tags ( $ this -> get_components_features ( ) , $ themeblacklisttags ) ; // Add features with blacklisted tags. if ( ! empty ( $ blacklistedfeatureswithtag ) ) { foreach ( $ blacklistedfeatureswithtag as $ themeblacklistfeature ) { list ( $ key , $ path ) = $ this -> get_clean_feature_key_and_path ( $ themeblacklistfeature ) ; $ blacklistfeatures [ $ key ] = $ path ; } } } ksort ( $ features ) ; $ retval = array ( 'blacklistfeatures' => $ blacklistfeatures , 'features' => $ features ) ; return $ retval ; }
docstring: Return list of blacklisted behat features for theme and features defined by theme only.
  
  @param string $theme theme name.
  @return array ($blacklistfeatures, $blacklisttags, $features)
docstring_tokens: Return list of blacklisted behat features for theme and features defined by theme only .