$password, ); user_save($account, $edit); $account->pass_raw = $password; // Login. $this->drupalLogin($account); } /** * {@inheritdoc} */ protected function verbose($message, $title = NULL) { // Handle arrays, objects, etc. if (!is_string($message)) { $message = "
\n" . print_r($message, TRUE) . "\n
\n"; } // Optional title to go before the output. if (!empty($title)) { $title = '

' . check_plain($title) . "

\n"; } parent::verbose($title . $message); } /** * Confirm that a selector has the expected items. */ protected function assertSelectOptions($select_id, array $options, $message = '') { $elements = $this ->xpath('//select[@id=:id]//option', array( ':id' => $select_id, )); $results = $this->assertEqual(count($elements), count($options), t('The same number of items were found as were requested')); $this->verbose($elements); foreach ($options as $option) { $elements = $this ->xpath('//select[@id=:id]//option[@value=:option]', array( ':id' => $select_id, ':option' => $option, )); $this->verbose($elements); $results *= $this->assertTrue(isset($elements[0]), $message ? $message : t('Option @option for field @id is present.', array( '@option' => $option, '@id' => $select_id, )), t('Browser')); } return $results; } /** * Confirm that a specific selector does not have items selected. */ protected function assertNoOptionsSelected($id, $message = '') { $elements = $this ->xpath('//select[@id=:id]//option[@selected="selected"]', array( ':id' => $id, )); return $this ->assertTrue(!isset($elements[0]), $message ? $message : t('Field @id does not have any selected items.', array( '@id' => $id, )), t('Browser')); } /** * Work out which compressor systems are supported by PHP. * * @return array * The list of supported compressors. Will always include the item 'none'. */ protected function supportedCompressors() { $items = array('none'); // Work out which systems are supported. if (@function_exists("gzencode")) { $items[] = 'gzip'; } if (@function_exists("bzcompress")) { $items[] = 'bzip'; } if (class_exists('ZipArchive')) { $items[] = 'zip'; } return $items; } /** * Get a list of the files in a specific destination. * * @param string $destination_id * The ID of the destination to check. Defaults to the manual file path. * * @return array * The backup files found in the requested backup destination. */ protected function listBackupFiles($destination_id = 'manual') { $items = array(); backup_migrate_include('destinations'); // Load the destination object. $destination = backup_migrate_get_destination($destination_id); if (!empty($destination)) { $items = $destination->list_files(); } return $items; } /** * Run a specific backup. * * @param string $destination_id * The ID of the destination to check. Defaults to the manual file path. */ protected function runBackup($destination_id = 'manual') { $this->drupalGet(BACKUP_MIGRATE_MENU_PATH); $this->assertResponse(200); $edit = array( 'destination_id' => $destination_id, ); $this->drupalPost(NULL, $edit, 'Backup now'); $this->assertResponse(200); // Confirm the response is as expected. This is split up into separate // pieces because it'd be more effort than is necessary right now to confirm // what the exact filename is. $this->assertText('Default Database backed up successfully'); $this->assertText('in destination'); $this->assertLink('download'); $this->assertLink('restore'); $this->assertLink('delete'); } /** * Delete all of the files in a specific backup destination. * * @param string $destination_id * The ID of the destination to check. Defaults to the manual file path. */ protected function deleteBackups($destination_id = 'manual') { $destination = backup_migrate_get_destination($destination_id); $files = $this->listBackupFiles($destination_id); if (!empty($files)) { foreach ($files as $file_id => $file) { $destination->delete_file($file_id); } } } /** * Work out whether a backup filename includes a timestamp. * * @param object $file * The backup file to examine. * * @return mixed * Returns 1 if found, 0 if not found, FALSE if an error occurs. */ protected function fileHasTimestamp($file) { // Get the default filename, this is used later. backup_migrate_include('files'); $default_filename = _backup_migrate_default_filename(); $ext = implode('.', $file->ext); $pattern = "/{$default_filename}-(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d)-(\d\d)-(\d\d).{$ext}/"; return preg_match($pattern, $file->file_info['filename']); } /** * Confirm that a backup filename includes a timestamp. * * @param object $file * The backup file to examine. * * @return bool * Indicates whether the file includes a timestamp. */ protected function assertFileTimestamp($file) { return $this->assertTrue($this->fileHasTimestamp($file)); } /** * Confirm that a backup filename does not include a timestamp. * * @param object $file * The backup file to examine. * * @return bool * Indicates whether the file does not include a timestamp. */ protected function assertNoFileTimestamp($file) { return !$this->assertFalse($this->fileHasTimestamp($file)); } /** * Get a profile. * * @param string $profile_id * The name of the profile to load. Defaults to 'default'. * * @return object * The profile object. */ protected function getProfile($profile_id = 'default') { backup_migrate_include('profiles'); return backup_migrate_get_profile($profile_id); } }