/**
  * {@inheritdoc}
  */
 public function getProjects()
 {
     if (empty($this->projects)) {
         // Retrieve the projects from storage, if present.
         $this->projects = $this->projectStorage('update_project_projects');
         if (empty($this->projects)) {
             // Still empty, so we have to rebuild.
             $module_data = system_rebuild_module_data();
             $theme_data = $this->themeHandler->rebuildThemeData();
             $project_info = new ProjectInfo();
             $project_info->processInfoList($this->projects, $module_data, 'module', TRUE);
             $project_info->processInfoList($this->projects, $theme_data, 'theme', TRUE);
             if ($this->updateSettings->get('check.disabled_extensions')) {
                 $project_info->processInfoList($this->projects, $module_data, 'module', FALSE);
                 $project_info->processInfoList($this->projects, $theme_data, 'theme', FALSE);
             }
             // Allow other modules to alter projects before fetching and comparing.
             $this->moduleHandler->alter('update_projects', $this->projects);
             // Store the site's project data for at most 1 hour.
             $this->keyValueStore->setWithExpire('update_project_projects', $this->projects, 3600);
         }
     }
     return $this->projects;
 }
 /**
  * Tests updates with a hidden base theme.
  */
 function testUpdateHiddenBaseTheme()
 {
     module_load_include('compare.inc', 'update');
     // Install the subtheme.
     \Drupal::service('theme_handler')->install(array('update_test_subtheme'));
     // Add a project and initial state for base theme and subtheme.
     $system_info = array('update_test_basetheme' => array('project' => 'update_test_basetheme', 'hidden' => TRUE), 'update_test_subtheme' => array('project' => 'update_test_subtheme', 'hidden' => FALSE));
     $this->config('update_test.settings')->set('system_info', $system_info)->save();
     $projects = \Drupal::service('update.manager')->getProjects();
     $theme_data = \Drupal::service('theme_handler')->rebuildThemeData();
     $project_info = new ProjectInfo();
     $project_info->processInfoList($projects, $theme_data, 'theme', TRUE);
     $this->assertTrue(!empty($projects['update_test_basetheme']), 'Valid base theme (update_test_basetheme) was found.');
 }
 /**
  * Tests updates with a hidden base theme.
  */
 function testUpdateHiddenBaseTheme()
 {
     module_load_include('compare.inc', 'update');
     // Enable the subtheme.
     theme_enable(array('update_test_subtheme'));
     // Add a project and initial state for base theme and subtheme.
     $system_info = array('update_test_basetheme' => array('project' => 'update_test_basetheme', 'hidden' => TRUE), 'update_test_subtheme' => array('project' => 'update_test_subtheme', 'hidden' => FALSE));
     \Drupal::config('update_test.settings')->set('system_info', $system_info)->save();
     $projects = update_get_projects();
     $theme_data = system_rebuild_theme_data();
     $project_info = new ProjectInfo();
     $project_info->processInfoList($projects, $theme_data, 'theme', TRUE);
     $this->assertTrue(!empty($projects['update_test_basetheme']), 'Valid base theme (update_test_basetheme) was found.');
 }