class ConfigTranslationUiTest in Zircon Profile 8.0
Same name and namespace in other branches
- 8 core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php \Drupal\config_translation\Tests\ConfigTranslationUiTest
Translate settings and entities to various languages.
@group config_translation
Hierarchy
- class \Drupal\simpletest\TestBase uses AssertHelperTrait, RandomGeneratorTrait, SessionTestTrait
- class \Drupal\simpletest\WebTestBase uses AssertContentTrait, UserCreationTrait
- class \Drupal\config_translation\Tests\ConfigTranslationUiTest
- class \Drupal\simpletest\WebTestBase uses AssertContentTrait, UserCreationTrait
Expanded class hierarchy of ConfigTranslationUiTest
File
- core/
modules/ config_translation/ src/ Tests/ ConfigTranslationUiTest.php, line 25 - Contains \Drupal\config_translation\Tests\ConfigTranslationUiTest.
Namespace
Drupal\config_translation\TestsView source
class ConfigTranslationUiTest extends WebTestBase {
/**
* Modules to enable.
*
* @var array
*/
public static $modules = [
'block',
'config_translation',
'config_translation_test',
'contact',
'contact_test',
'contextual',
'entity_test',
'field_test',
'field_ui',
'filter',
'filter_test',
'node',
'views',
'views_ui',
];
/**
* Languages to enable.
*
* @var array
*/
protected $langcodes = array(
'fr',
'ta',
);
/**
* Administrator user for tests.
*
* @var \Drupal\user\UserInterface
*/
protected $adminUser;
/**
* Translator user for tests.
*
* @var \Drupal\user\UserInterface
*/
protected $translatorUser;
/**
* String translation storage object.
*
* @var \Drupal\locale\StringStorageInterface
*/
protected $localeStorage;
protected function setUp() {
parent::setUp();
$translator_permissions = [
'translate configuration',
];
/** @var \Drupal\filter\FilterFormatInterface $filter_test_format */
$filter_test_format = entity_load('filter_format', 'filter_test');
/** @var \Drupal\filter\FilterFormatInterface $filtered_html_format */
$filtered_html_format = entity_load('filter_format', 'filtered_html');
/** @var \Drupal\filter\FilterFormatInterface $full_html_format */
$full_html_format = entity_load('filter_format', 'full_html');
$admin_permissions = array_merge($translator_permissions, [
'administer languages',
'administer site configuration',
'link to any page',
'administer contact forms',
'administer filters',
$filtered_html_format
->getPermissionName(),
$full_html_format
->getPermissionName(),
$filter_test_format
->getPermissionName(),
'access site-wide contact form',
'access contextual links',
'administer views',
'administer account settings',
'administer themes',
'bypass node access',
'administer content types',
'translate interface',
]);
// Create and login user.
$this->translatorUser = $this
->drupalCreateUser($translator_permissions);
$this->adminUser = $this
->drupalCreateUser($admin_permissions);
// Add languages.
foreach ($this->langcodes as $langcode) {
ConfigurableLanguage::createFromLangcode($langcode)
->save();
}
$this->localeStorage = $this->container
->get('locale.storage');
$this
->drupalPlaceBlock('local_tasks_block');
$this
->drupalPlaceBlock('page_title_block');
}
/**
* Tests the site information translation interface.
*/
public function testSiteInformationTranslationUi() {
$this
->drupalLogin($this->adminUser);
$site_name = 'Site name for testing configuration translation';
$site_slogan = 'Site slogan for testing configuration translation';
$fr_site_name = 'Nom du site pour tester la configuration traduction';
$fr_site_slogan = 'Slogan du site pour tester la traduction de configuration';
$translation_base_url = 'admin/config/system/site-information/translate';
// Set site name and slogan for default language.
$this
->setSiteInformation($site_name, $site_slogan);
$this
->drupalGet('admin/config/system/site-information');
// Check translation tab exist.
$this
->assertLinkByHref($translation_base_url);
$this
->drupalGet($translation_base_url);
// Check that the 'Edit' link in the source language links back to the
// original form.
$this
->clickLink(t('Edit'));
// Also check that saving the form leads back to the translation overview.
$this
->drupalPostForm(NULL, [], t('Save configuration'));
$this
->assertUrl($translation_base_url);
// Check 'Add' link of French to visit add page.
$this
->assertLinkByHref("{$translation_base_url}/fr/add");
$this
->clickLink(t('Add'));
// Make sure original text is present on this page.
$this
->assertRaw($site_name);
$this
->assertRaw($site_slogan);
// Update site name and slogan for French.
$edit = array(
'translation[config_names][system.site][name]' => $fr_site_name,
'translation[config_names][system.site][slogan]' => $fr_site_slogan,
);
$this
->drupalPostForm("{$translation_base_url}/fr/add", $edit, t('Save translation'));
$this
->assertRaw(t('Successfully saved @language translation.', array(
'@language' => 'French',
)));
// Check for edit, delete links (and no 'add' link) for French language.
$this
->assertNoLinkByHref("{$translation_base_url}/fr/add");
$this
->assertLinkByHref("{$translation_base_url}/fr/edit");
$this
->assertLinkByHref("{$translation_base_url}/fr/delete");
// Check translation saved proper.
$this
->drupalGet("{$translation_base_url}/fr/edit");
$this
->assertFieldByName('translation[config_names][system.site][name]', $fr_site_name);
$this
->assertFieldByName('translation[config_names][system.site][slogan]', $fr_site_slogan);
// Place branding block with site name and slogan into header region.
$this
->drupalPlaceBlock('system_branding_block', [
'region' => 'header',
]);
// Check French translation of site name and slogan are in place.
$this
->drupalGet('fr');
$this
->assertRaw($fr_site_name);
$this
->assertRaw($fr_site_slogan);
// Visit French site to ensure base language string present as source.
$this
->drupalGet("fr/{$translation_base_url}/fr/edit");
$this
->assertText($site_name);
$this
->assertText($site_slogan);
}
/**
* Tests the site information translation interface.
*/
public function testSourceValueDuplicateSave() {
$this
->drupalLogin($this->adminUser);
$site_name = 'Site name for testing configuration translation';
$site_slogan = 'Site slogan for testing configuration translation';
$translation_base_url = 'admin/config/system/site-information/translate';
$this
->setSiteInformation($site_name, $site_slogan);
$this
->drupalGet($translation_base_url);
// Case 1: Update new value for site slogan and site name.
$edit = array(
'translation[config_names][system.site][name]' => 'FR ' . $site_name,
'translation[config_names][system.site][slogan]' => 'FR ' . $site_slogan,
);
// First time, no overrides, so just Add link.
$this
->drupalPostForm("{$translation_base_url}/fr/add", $edit, t('Save translation'));
// Read overridden file from active config.
$override = \Drupal::languageManager()
->getLanguageConfigOverride('fr', 'system.site');
// Expect both name and slogan in language specific file.
$expected = array(
'name' => 'FR ' . $site_name,
'slogan' => 'FR ' . $site_slogan,
);
$this
->assertEqual($expected, $override
->get());
// Case 2: Update new value for site slogan and default value for site name.
$this
->drupalGet("{$translation_base_url}/fr/edit");
// Assert that the language configuration does not leak outside of the
// translation form into the actual site name and slogan.
$this
->assertNoText('FR ' . $site_name);
$this
->assertNoText('FR ' . $site_slogan);
$edit = array(
'translation[config_names][system.site][name]' => $site_name,
'translation[config_names][system.site][slogan]' => 'FR ' . $site_slogan,
);
$this
->drupalPostForm(NULL, $edit, t('Save translation'));
$this
->assertRaw(t('Successfully updated @language translation.', array(
'@language' => 'French',
)));
$override = \Drupal::languageManager()
->getLanguageConfigOverride('fr', 'system.site');
// Expect only slogan in language specific file.
$expected = 'FR ' . $site_slogan;
$this
->assertEqual($expected, $override
->get('slogan'));
// Case 3: Keep default value for site name and slogan.
$this
->drupalGet("{$translation_base_url}/fr/edit");
$this
->assertNoText('FR ' . $site_slogan);
$edit = array(
'translation[config_names][system.site][name]' => $site_name,
'translation[config_names][system.site][slogan]' => $site_slogan,
);
$this
->drupalPostForm(NULL, $edit, t('Save translation'));
$override = \Drupal::languageManager()
->getLanguageConfigOverride('fr', 'system.site');
// Expect no language specific file.
$this
->assertTrue($override
->isNew());
// Check configuration page with translator user. Should have no access.
$this
->drupalLogout();
$this
->drupalLogin($this->translatorUser);
$this
->drupalGet('admin/config/system/site-information');
$this
->assertResponse(403);
// While translator can access the translation page, the edit link is not
// present due to lack of permissions.
$this
->drupalGet($translation_base_url);
$this
->assertNoLink(t('Edit'));
// Check 'Add' link for French.
$this
->assertLinkByHref("{$translation_base_url}/fr/add");
}
/**
* Tests the contact form translation.
*/
public function testContactConfigEntityTranslation() {
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('admin/structure/contact');
// Check for default contact form configuration entity from Contact module.
$this
->assertLinkByHref('admin/structure/contact/manage/feedback');
// Save default language configuration.
$label = 'Send your feedback';
$edit = array(
'label' => $label,
'recipients' => 'sales@example.com,support@example.com',
'reply' => 'Thank you for your mail',
);
$this
->drupalPostForm('admin/structure/contact/manage/feedback', $edit, t('Save'));
// Ensure translation link is present.
$translation_base_url = 'admin/structure/contact/manage/feedback/translate';
$this
->assertLinkByHref($translation_base_url);
// Make sure translate tab is present.
$this
->drupalGet('admin/structure/contact/manage/feedback');
$this
->assertLink(t('Translate @type', array(
'@type' => 'contact form',
)));
// Visit the form to confirm the changes.
$this
->drupalGet('contact/feedback');
$this
->assertText($label);
foreach ($this->langcodes as $langcode) {
$this
->drupalGet($translation_base_url);
$this
->assertLink(t('Translate @type', array(
'@type' => 'contact form',
)));
// 'Add' link should be present for $langcode translation.
$translation_page_url = "{$translation_base_url}/{$langcode}/add";
$this
->assertLinkByHref($translation_page_url);
// Make sure original text is present on this page.
$this
->drupalGet($translation_page_url);
$this
->assertText($label);
// Update translatable fields.
$edit = array(
'translation[config_names][contact.form.feedback][label]' => 'Website feedback - ' . $langcode,
'translation[config_names][contact.form.feedback][reply]' => 'Thank you for your mail - ' . $langcode,
);
// Save language specific version of form.
$this
->drupalPostForm($translation_page_url, $edit, t('Save translation'));
// Expect translated values in language specific file.
$override = \Drupal::languageManager()
->getLanguageConfigOverride($langcode, 'contact.form.feedback');
$expected = array(
'label' => 'Website feedback - ' . $langcode,
'reply' => 'Thank you for your mail - ' . $langcode,
);
$this
->assertEqual($expected, $override
->get());
// Check for edit, delete links (and no 'add' link) for $langcode.
$this
->assertNoLinkByHref("{$translation_base_url}/{$langcode}/add");
$this
->assertLinkByHref("{$translation_base_url}/{$langcode}/edit");
$this
->assertLinkByHref("{$translation_base_url}/{$langcode}/delete");
// Visit language specific version of form to check label.
$this
->drupalGet($langcode . '/contact/feedback');
$this
->assertText('Website feedback - ' . $langcode);
// Submit feedback.
$edit = array(
'subject[0][value]' => 'Test subject',
'message[0][value]' => 'Test message',
);
$this
->drupalPostForm(NULL, $edit, t('Send message'));
}
// Now that all language translations are present, check translation and
// original text all appear in any translated page on the translation
// forms.
foreach ($this->langcodes as $langcode) {
$langcode_prefixes = array_merge(array(
'',
), $this->langcodes);
foreach ($langcode_prefixes as $langcode_prefix) {
$this
->drupalGet(ltrim("{$langcode_prefix}/{$translation_base_url}/{$langcode}/edit", '/'));
$this
->assertFieldByName('translation[config_names][contact.form.feedback][label]', 'Website feedback - ' . $langcode);
$this
->assertText($label);
}
}
// We get all emails so no need to check inside the loop.
$captured_emails = $this
->drupalGetMails();
// Check language specific auto reply text in email body.
foreach ($captured_emails as $email) {
if ($email['id'] == 'contact_page_autoreply') {
// Trim because we get an added newline for the body.
$this
->assertEqual(trim($email['body']), 'Thank you for your mail - ' . $email['langcode']);
}
}
// Test that delete links work and operations perform properly.
foreach ($this->langcodes as $langcode) {
$replacements = array(
'%label' => t('@label @entity_type', array(
'@label' => $label,
'@entity_type' => Unicode::strtolower(t('Contact form')),
)),
'@language' => \Drupal::languageManager()
->getLanguage($langcode)
->getName(),
);
$this
->drupalGet("{$translation_base_url}/{$langcode}/delete");
$this
->assertRaw(t('Are you sure you want to delete the @language translation of %label?', $replacements));
// Assert link back to list page to cancel delete is present.
$this
->assertLinkByHref($translation_base_url);
$this
->drupalPostForm(NULL, array(), t('Delete'));
$this
->assertRaw(t('@language translation of %label was deleted', $replacements));
$this
->assertLinkByHref("{$translation_base_url}/{$langcode}/add");
$this
->assertNoLinkByHref("translation_base_url/{$langcode}/edit");
$this
->assertNoLinkByHref("{$translation_base_url}/{$langcode}/delete");
// Expect no language specific file present anymore.
$override = \Drupal::languageManager()
->getLanguageConfigOverride($langcode, 'contact.form.feedback');
$this
->assertTrue($override
->isNew());
}
// Check configuration page with translator user. Should have no access.
$this
->drupalLogout();
$this
->drupalLogin($this->translatorUser);
$this
->drupalGet('admin/structure/contact/manage/feedback');
$this
->assertResponse(403);
// While translator can access the translation page, the edit link is not
// present due to lack of permissions.
$this
->drupalGet($translation_base_url);
$this
->assertNoLink(t('Edit'));
// Check 'Add' link for French.
$this
->assertLinkByHref("{$translation_base_url}/fr/add");
}
/**
* Tests date format translation.
*/
public function testDateFormatTranslation() {
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('admin/config/regional/date-time');
// Check for medium format.
$this
->assertLinkByHref('admin/config/regional/date-time/formats/manage/medium');
// Save default language configuration for a new format.
$edit = array(
'label' => 'Custom medium date',
'id' => 'custom_medium',
'date_format_pattern' => 'Y. m. d. H:i',
);
$this
->drupalPostForm('admin/config/regional/date-time/formats/add', $edit, t('Add format'));
// Test translating a default shipped format and our custom format.
$formats = array(
'medium' => 'Default medium date',
'custom_medium' => 'Custom medium date',
);
foreach ($formats as $id => $label) {
$translation_base_url = 'admin/config/regional/date-time/formats/manage/' . $id . '/translate';
$this
->drupalGet($translation_base_url);
// 'Add' link should be present for French translation.
$translation_page_url = "{$translation_base_url}/fr/add";
$this
->assertLinkByHref($translation_page_url);
// Make sure original text is present on this page.
$this
->drupalGet($translation_page_url);
$this
->assertText($label);
// Make sure that the date library is added.
$this
->assertRaw('core/modules/system/js/system.date.js');
// Update translatable fields.
$edit = array(
'translation[config_names][core.date_format.' . $id . '][label]' => $id . ' - FR',
'translation[config_names][core.date_format.' . $id . '][pattern]' => 'D',
);
// Save language specific version of form.
$this
->drupalPostForm($translation_page_url, $edit, t('Save translation'));
// Get translation and check we've got the right value.
$override = \Drupal::languageManager()
->getLanguageConfigOverride('fr', 'core.date_format.' . $id);
$expected = array(
'label' => $id . ' - FR',
'pattern' => 'D',
);
$this
->assertEqual($expected, $override
->get());
// Formatting the date 8 / 27 / 1985 @ 13:37 EST with pattern D should
// display "Tue".
$formatted_date = format_date(494015820, $id, NULL, 'America/New_York', 'fr');
$this
->assertEqual($formatted_date, 'Tue', 'Got the right formatted date using the date format translation pattern.');
}
}
/**
* Tests the account settings translation interface.
*
* This is the only special case so far where we have multiple configuration
* names involved building up one configuration translation form. Test that
* the translations are saved for all configuration names properly.
*/
public function testAccountSettingsConfigurationTranslation() {
$this
->drupalLogin($this->adminUser);
$this
->drupalGet('admin/config/people/accounts');
$this
->assertLink(t('Translate @type', array(
'@type' => 'account settings',
)));
$this
->drupalGet('admin/config/people/accounts/translate');
$this
->assertLink(t('Translate @type', array(
'@type' => 'account settings',
)));
$this
->assertLinkByHref('admin/config/people/accounts/translate/fr/add');
// Update account settings fields for French.
$edit = array(
'translation[config_names][user.settings][anonymous]' => 'Anonyme',
'translation[config_names][user.mail][status_blocked][subject]' => 'Testing, your account is blocked.',
'translation[config_names][user.mail][status_blocked][body]' => 'Testing account blocked body.',
);
$this
->drupalPostForm('admin/config/people/accounts/translate/fr/add', $edit, t('Save translation'));
// Make sure the changes are saved and loaded back properly.
$this
->drupalGet('admin/config/people/accounts/translate/fr/edit');
foreach ($edit as $key => $value) {
// Check the translations appear in the right field type as well.
$xpath = '//' . (strpos($key, '[body]') ? 'textarea' : 'input') . '[@name="' . $key . '"]';
$this
->assertFieldByXPath($xpath, $value);
}
// Check that labels for email settings appear.
$this
->assertText(t('Account cancellation confirmation'));
$this
->assertText(t('Password recovery'));
}
/**
* Tests source and target language edge cases.
*/
public function testSourceAndTargetLanguage() {
$this
->drupalLogin($this->adminUser);
// Loading translation page for not-specified language (und)
// should return 403.
$this
->drupalGet('admin/config/system/site-information/translate/und/add');
$this
->assertResponse(403);
// Check the source language doesn't have 'Add' or 'Delete' link and
// make sure source language edit goes to original configuration page
// not the translation specific edit page.
$this
->drupalGet('admin/config/system/site-information/translate');
$this
->assertNoLinkByHref('admin/config/system/site-information/translate/en/edit');
$this
->assertNoLinkByHref('admin/config/system/site-information/translate/en/add');
$this
->assertNoLinkByHref('admin/config/system/site-information/translate/en/delete');
$this
->assertLinkByHref('admin/config/system/site-information');
// Translation addition to source language should return 403.
$this
->drupalGet('admin/config/system/site-information/translate/en/add');
$this
->assertResponse(403);
// Translation editing in source language should return 403.
$this
->drupalGet('admin/config/system/site-information/translate/en/edit');
$this
->assertResponse(403);
// Translation deletion in source language should return 403.
$this
->drupalGet('admin/config/system/site-information/translate/en/delete');
$this
->assertResponse(403);
// Set default language of site information to not-specified language (und).
$this
->config('system.site')
->set('langcode', LanguageInterface::LANGCODE_NOT_SPECIFIED)
->save();
// Make sure translation tab does not exist on the configuration page.
$this
->drupalGet('admin/config/system/site-information');
$this
->assertNoLinkByHref('admin/config/system/site-information/translate');
// If source language is not specified, translation page should be 403.
$this
->drupalGet('admin/config/system/site-information/translate');
$this
->assertResponse(403);
}
/**
* Tests the views translation interface.
*/
public function testViewsTranslationUI() {
$this
->drupalLogin($this->adminUser);
// Assert contextual link related to views.
$ids = array(
'entity.view.edit_form:view=frontpage:location=page&name=frontpage&display_id=page_1',
);
$response = $this
->renderContextualLinks($ids, 'node');
$this
->assertResponse(200);
$json = Json::decode($response);
$this
->assertTrue(strpos($json[$ids[0]], 'Translate view'), 'Translate view contextual link added.');
$description = 'All content promoted to the front page.';
$human_readable_name = 'Frontpage';
$display_settings_master = 'Master';
$display_options_master = '(Empty)';
$translation_base_url = 'admin/structure/views/view/frontpage/translate';
$this
->drupalGet($translation_base_url);
// Check 'Add' link of French to visit add page.
$this
->assertLinkByHref("{$translation_base_url}/fr/add");
$this
->clickLink(t('Add'));
// Make sure original text is present on this page.
$this
->assertRaw($description);
$this
->assertRaw($human_readable_name);
// Update Views Fields for French.
$edit = array(
'translation[config_names][views.view.frontpage][description]' => $description . " FR",
'translation[config_names][views.view.frontpage][label]' => $human_readable_name . " FR",
'translation[config_names][views.view.frontpage][display][default][display_title]' => $display_settings_master . " FR",
'translation[config_names][views.view.frontpage][display][default][display_options][title]' => $display_options_master . " FR",
);
$this
->drupalPostForm("{$translation_base_url}/fr/add", $edit, t('Save translation'));
$this
->assertRaw(t('Successfully saved @language translation.', array(
'@language' => 'French',
)));
// Check for edit, delete links (and no 'add' link) for French language.
$this
->assertNoLinkByHref("{$translation_base_url}/fr/add");
$this
->assertLinkByHref("{$translation_base_url}/fr/edit");
$this
->assertLinkByHref("{$translation_base_url}/fr/delete");
// Check translation saved proper.
$this
->drupalGet("{$translation_base_url}/fr/edit");
$this
->assertFieldByName('translation[config_names][views.view.frontpage][description]', $description . " FR");
$this
->assertFieldByName('translation[config_names][views.view.frontpage][label]', $human_readable_name . " FR");
$this
->assertFieldByName('translation[config_names][views.view.frontpage][display][default][display_title]', $display_settings_master . " FR");
$this
->assertFieldByName('translation[config_names][views.view.frontpage][display][default][display_options][title]', $display_options_master . " FR");
}
/**
* Test the number of source elements for plural strings in config translation forms.
*/
public function testPluralConfigStringsSourceElements() {
$this
->drupalLogin($this->adminUser);
// Languages to test, with various number of plural forms.
$languages = array(
'vi' => array(
'plurals' => 1,
'expected' => array(
TRUE,
FALSE,
FALSE,
FALSE,
),
),
'fr' => array(
'plurals' => 2,
'expected' => array(
TRUE,
TRUE,
FALSE,
FALSE,
),
),
'sl' => array(
'plurals' => 4,
'expected' => array(
TRUE,
TRUE,
TRUE,
TRUE,
),
),
);
foreach ($languages as $langcode => $data) {
// Import a .po file to add a new language with a given number of plural forms
$name = tempnam('temporary://', $langcode . '_') . '.po';
file_put_contents($name, $this
->getPoFile($data['plurals']));
$this
->drupalPostForm('admin/config/regional/translate/import', array(
'langcode' => $langcode,
'files[file]' => $name,
), t('Import'));
// Change the config langcode of the 'files' view.
$config = \Drupal::service('config.factory')
->getEditable('views.view.files');
$config
->set('langcode', $langcode);
$config
->save();
// Go to the translation page of the 'files' view.
$translation_url = 'admin/structure/views/view/files/translate/en/add';
$this
->drupalGet($translation_url);
// Check if the expected number of source elements are present.
foreach ($data['expected'] as $index => $expected) {
if ($expected) {
$this
->assertRaw('edit-source-config-names-viewsviewfiles-display-default-display-options-fields-count-format-plural-string-' . $index);
}
else {
$this
->assertNoRaw('edit-source-config-names-viewsviewfiles-display-default-display-options-fields-count-format-plural-string-' . $index);
}
}
}
}
/**
* Test translation of plural strings with multiple plural forms in config.
*/
public function testPluralConfigStrings() {
$this
->drupalLogin($this->adminUser);
// First import a .po file with multiple plural forms.
// This will also automatically add the 'sl' language.
$name = tempnam('temporary://', "sl_") . '.po';
file_put_contents($name, $this
->getPoFile(4));
$this
->drupalPostForm('admin/config/regional/translate/import', array(
'langcode' => 'sl',
'files[file]' => $name,
), t('Import'));
// Translate the files view, as this one uses numeric formatters.
$description = 'Singular form';
$field_value = '1 place';
$field_value_plural = '@count places';
$translation_url = 'admin/structure/views/view/files/translate/sl/add';
$this
->drupalGet($translation_url);
// Make sure original text is present on this page, in addition to 2 new
// empty fields.
$this
->assertRaw($description);
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][0]', $field_value);
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][1]', $field_value_plural);
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][2]', '');
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][3]', '');
// Then make sure it also works.
$edit = [
'translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][0]' => $field_value . ' SL',
'translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][1]' => $field_value_plural . ' 1 SL',
'translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][2]' => $field_value_plural . ' 2 SL',
'translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][3]' => $field_value_plural . ' 3 SL',
];
$this
->drupalPostForm($translation_url, $edit, t('Save translation'));
// Make sure the values have changed.
$this
->drupalGet($translation_url);
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][0]', "{$field_value} SL");
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][1]', "{$field_value_plural} 1 SL");
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][2]', "{$field_value_plural} 2 SL");
$this
->assertFieldByName('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][3]', "{$field_value_plural} 3 SL");
}
/**
* Tests the translation of field and field storage configuration.
*/
public function testFieldConfigTranslation() {
// Add a test field which has a translatable field setting and a
// translatable field storage setting.
$field_name = strtolower($this
->randomMachineName());
$field_storage = FieldStorageConfig::create([
'field_name' => $field_name,
'entity_type' => 'entity_test',
'type' => 'test_field',
]);
$translatable_storage_setting = $this
->randomString();
$field_storage
->setSetting('translatable_storage_setting', $translatable_storage_setting);
$field_storage
->save();
$bundle = strtolower($this
->randomMachineName());
entity_test_create_bundle($bundle);
$field = FieldConfig::create([
'field_name' => $field_name,
'entity_type' => 'entity_test',
'bundle' => $bundle,
]);
$translatable_field_setting = $this
->randomString();
$field
->setSetting('translatable_field_setting', $translatable_field_setting);
$field
->save();
$this
->drupalLogin($this->translatorUser);
$this
->drupalGet("/entity_test/structure/{$bundle}/fields/entity_test.{$bundle}.{$field_name}/translate");
$this
->clickLink('Add');
$this
->assertText('Translatable field setting');
$this
->assertEscaped($translatable_field_setting);
$this
->assertText('Translatable storage setting');
$this
->assertEscaped($translatable_storage_setting);
}
/**
* Test translation storage in locale storage.
*/
public function testLocaleDBStorage() {
// Enable import of translations. By default this is disabled for automated
// tests.
$this
->config('locale.settings')
->set('translation.import_enabled', TRUE)
->save();
$this
->drupalLogin($this->adminUser);
$langcode = 'xx';
$name = $this
->randomMachineName(16);
$edit = array(
'predefined_langcode' => 'custom',
'langcode' => $langcode,
'label' => $name,
'direction' => Language::DIRECTION_LTR,
);
$this
->drupalPostForm('admin/config/regional/language/add', $edit, t('Add custom language'));
// Make sure there is no translation stored in locale storage before edit.
$translation = $this
->getTranslation('user.settings', 'anonymous', 'fr');
$this
->assertTrue(empty($translation));
// Add custom translation.
$edit = array(
'translation[config_names][user.settings][anonymous]' => 'Anonyme',
);
$this
->drupalPostForm('admin/config/people/accounts/translate/fr/add', $edit, t('Save translation'));
// Make sure translation stored in locale storage after saved language
// specific configuration translation.
$translation = $this
->getTranslation('user.settings', 'anonymous', 'fr');
$this
->assertEqual('Anonyme', $translation
->getString());
// revert custom translations to base translation.
$edit = array(
'translation[config_names][user.settings][anonymous]' => 'Anonymous',
);
$this
->drupalPostForm('admin/config/people/accounts/translate/fr/edit', $edit, t('Save translation'));
// Make sure there is no translation stored in locale storage after revert.
$translation = $this
->getTranslation('user.settings', 'anonymous', 'fr');
$this
->assertEqual('Anonymous', $translation
->getString());
}
/**
* Tests the single language existing.
*/
public function testSingleLanguageUI() {
$this
->drupalLogin($this->adminUser);
// Delete French language
$this
->drupalPostForm('admin/config/regional/language/delete/fr', array(), t('Delete'));
$this
->assertRaw(t('The %language (%langcode) language has been removed.', array(
'%language' => 'French',
'%langcode' => 'fr',
)));
// Change default language to Tamil.
$edit = array(
'site_default_language' => 'ta',
);
$this
->drupalPostForm('admin/config/regional/language', $edit, t('Save configuration'));
$this
->assertRaw(t('Configuration saved.'));
// Delete English language
$this
->drupalPostForm('admin/config/regional/language/delete/en', array(), t('Delete'));
$this
->assertRaw(t('The %language (%langcode) language has been removed.', array(
'%language' => 'English',
'%langcode' => 'en',
)));
// Visit account setting translation page, this should not
// throw any notices.
$this
->drupalGet('admin/config/people/accounts/translate');
$this
->assertResponse(200);
}
/**
* Tests the config_translation_info_alter() hook.
*/
public function testAlterInfo() {
$this
->drupalLogin($this->adminUser);
$this->container
->get('state')
->set('config_translation_test_config_translation_info_alter', TRUE);
$this->container
->get('plugin.manager.config_translation.mapper')
->clearCachedDefinitions();
// Check out if the translation page has the altered in settings.
$this
->drupalGet('admin/config/system/site-information/translate/fr/add');
$this
->assertText(t('Feed channel'));
$this
->assertText(t('Feed description'));
// Check if the translation page does not have the altered out settings.
$this
->drupalGet('admin/config/people/accounts/translate/fr/add');
$this
->assertText(t('Name'));
$this
->assertNoText(t('Account cancellation confirmation'));
$this
->assertNoText(t('Password recovery'));
}
/**
* Tests the sequence data type translation.
*/
public function testSequenceTranslation() {
$this
->drupalLogin($this->adminUser);
/** @var \Drupal\Core\Config\ConfigFactoryInterface $config_factory */
$config_factory = $this->container
->get('config.factory');
$expected = array(
'kitten',
'llama',
'elephant',
);
$actual = $config_factory
->getEditable('config_translation_test.content')
->get('animals');
$this
->assertEqual($expected, $actual);
$edit = array(
'translation[config_names][config_translation_test.content][content][value]' => '<p><strong>Hello World</strong> - FR</p>',
'translation[config_names][config_translation_test.content][animals][0]' => 'kitten - FR',
'translation[config_names][config_translation_test.content][animals][1]' => 'llama - FR',
'translation[config_names][config_translation_test.content][animals][2]' => 'elephant - FR',
);
$this
->drupalPostForm('admin/config/media/file-system/translate/fr/add', $edit, t('Save translation'));
$this->container
->get('language.config_factory_override')
->setLanguage(new Language(array(
'id' => 'fr',
)));
$expected = array(
'kitten - FR',
'llama - FR',
'elephant - FR',
);
$actual = $config_factory
->get('config_translation_test.content')
->get('animals');
$this
->assertEqual($expected, $actual);
}
/**
* Test text_format translation.
*/
public function testTextFormatTranslation() {
$this
->drupalLogin($this->adminUser);
/** @var \Drupal\Core\Config\ConfigFactoryInterface $config_factory */
$config_factory = $this->container
->get('config.factory');
$expected = array(
'value' => '<p><strong>Hello World</strong></p>',
'format' => 'plain_text',
);
$actual = $config_factory
->get('config_translation_test.content')
->getOriginal('content', FALSE);
$this
->assertEqual($expected, $actual);
$translation_base_url = 'admin/config/media/file-system/translate';
$this
->drupalGet($translation_base_url);
// 'Add' link should be present for French translation.
$translation_page_url = "{$translation_base_url}/fr/add";
$this
->assertLinkByHref($translation_page_url);
$this
->drupalGet($translation_page_url);
// Assert that changing the text format is not possible, even for an
// administrator.
$this
->assertNoFieldByName('translation[config_names][config_translation_test.content][content][format]');
// Update translatable fields.
$edit = array(
'translation[config_names][config_translation_test.content][content][value]' => '<p><strong>Hello World</strong> - FR</p>',
);
// Save language specific version of form.
$this
->drupalPostForm($translation_page_url, $edit, t('Save translation'));
// Get translation and check we've got the right value.
$expected = array(
'value' => '<p><strong>Hello World</strong> - FR</p>',
'format' => 'plain_text',
);
$this->container
->get('language.config_factory_override')
->setLanguage(new Language(array(
'id' => 'fr',
)));
$actual = $config_factory
->get('config_translation_test.content')
->get('content');
$this
->assertEqual($expected, $actual);
// Change the text format of the source configuration and verify that the
// text format of the translation does not change because that could lead to
// security vulnerabilities.
$config_factory
->getEditable('config_translation_test.content')
->set('content.format', 'full_html')
->save();
$actual = $config_factory
->get('config_translation_test.content')
->get('content');
// The translation should not have changed, so re-use $expected.
$this
->assertEqual($expected, $actual);
// Because the text is now in a text format that the translator does not
// have access to, the translator should not be able to translate it.
$translation_page_url = "{$translation_base_url}/fr/edit";
$this
->drupalLogin($this->translatorUser);
$this
->drupalGet($translation_page_url);
$this
->assertDisabledTextarea('edit-translation-config-names-config-translation-testcontent-content-value');
$this
->drupalPostForm(NULL, array(), t('Save translation'));
// Check that submitting the form did not update the text format of the
// translation.
$actual = $config_factory
->get('config_translation_test.content')
->get('content');
$this
->assertEqual($expected, $actual);
// The administrator must explicitly change the text format.
$this
->drupalLogin($this->adminUser);
$edit = array(
'translation[config_names][config_translation_test.content][content][format]' => 'full_html',
);
$this
->drupalPostForm($translation_page_url, $edit, t('Save translation'));
$expected = array(
'value' => '<p><strong>Hello World</strong> - FR</p>',
'format' => 'full_html',
);
$actual = $config_factory
->get('config_translation_test.content')
->get('content');
$this
->assertEqual($expected, $actual);
}
/**
* Gets translation from locale storage.
*
* @param $config_name
* Configuration object.
* @param $key
* Translation configuration field key.
* @param $langcode
* String language code to load translation.
*
* @return bool|mixed
* Returns translation if exists, FALSE otherwise.
*/
protected function getTranslation($config_name, $key, $langcode) {
$settings_locations = $this->localeStorage
->getLocations(array(
'type' => 'configuration',
'name' => $config_name,
));
$this
->assertTrue(!empty($settings_locations), format_string('Configuration locations found for %config_name.', array(
'%config_name' => $config_name,
)));
if (!empty($settings_locations)) {
$source = $this->container
->get('config.factory')
->get($config_name)
->get($key);
$source_string = $this->localeStorage
->findString(array(
'source' => $source,
'type' => 'configuration',
));
$this
->assertTrue(!empty($source_string), format_string('Found string for %config_name.%key.', array(
'%config_name' => $config_name,
'%key' => $key,
)));
if (!empty($source_string)) {
$conditions = array(
'lid' => $source_string->lid,
'language' => $langcode,
);
$translations = $this->localeStorage
->getTranslations($conditions + array(
'translated' => TRUE,
));
return reset($translations);
}
}
return FALSE;
}
/**
* Sets site name and slogan for default language, helps in tests.
*
* @param string $site_name
* @param string $site_slogan
*/
protected function setSiteInformation($site_name, $site_slogan) {
$edit = array(
'site_name' => $site_name,
'site_slogan' => $site_slogan,
);
$this
->drupalPostForm('admin/config/system/site-information', $edit, t('Save configuration'));
$this
->assertRaw(t('The configuration options have been saved.'));
}
/**
* Get server-rendered contextual links for the given contextual link ids.
*
* @param array $ids
* An array of contextual link ids.
* @param string $current_path
* The Drupal path for the page for which the contextual links are rendered.
*
* @return string
* The response body.
*/
protected function renderContextualLinks($ids, $current_path) {
$post = array();
for ($i = 0; $i < count($ids); $i++) {
$post['ids[' . $i . ']'] = $ids[$i];
}
return $this
->drupalPostWithFormat('contextual/render', 'json', $post, array(
'query' => array(
'destination' => $current_path,
),
));
}
/**
* Asserts that a textarea with a given ID has been disabled from editing.
*
* @param string $id
* The HTML ID of the textarea.
*
* @return bool
* TRUE if the assertion passed; FALSE otherwise.
*/
protected function assertDisabledTextarea($id) {
$textarea = $this
->xpath('//textarea[@id=:id and contains(@disabled, "disabled")]', array(
':id' => $id,
));
$textarea = reset($textarea);
$passed = $this
->assertTrue($textarea instanceof \SimpleXMLElement, SafeMarkup::format('Disabled field @id exists.', array(
'@id' => $id,
)));
$expected = 'This field has been disabled because you do not have sufficient permissions to edit it.';
$passed = $passed && $this
->assertEqual((string) $textarea, $expected, SafeMarkup::format('Disabled textarea @id hides text in an inaccessible text format.', array(
'@id' => $id,
)));
// Make sure the text format select is not shown.
$select_id = str_replace('value', 'format--2', $id);
$select = $this
->xpath('//select[@id=:id]', array(
':id' => $select_id,
));
return $passed && $this
->assertFalse($select, SafeMarkup::format('Field @id does not exist.', array(
'@id' => $id,
)));
}
/**
* Helper function that returns a .po file with a given number of plural forms.
*/
public function getPoFile($plurals) {
$po_file = array();
$po_file[1] = <<<EOF
msgid ""
msgstr ""
"Project-Id-Version: Drupal 8\\n"
"MIME-Version: 1.0\\n"
"Content-Type: text/plain; charset=UTF-8\\n"
"Content-Transfer-Encoding: 8bit\\n"
"Plural-Forms: nplurals=1; plural=0;\\n"
EOF;
$po_file[2] = <<<EOF
msgid ""
msgstr ""
"Project-Id-Version: Drupal 8\\n"
"MIME-Version: 1.0\\n"
"Content-Type: text/plain; charset=UTF-8\\n"
"Content-Transfer-Encoding: 8bit\\n"
"Plural-Forms: nplurals=2; plural=(n>1);\\n"
EOF;
$po_file[4] = <<<EOF
msgid ""
msgstr ""
"Project-Id-Version: Drupal 8\\n"
"MIME-Version: 1.0\\n"
"Content-Type: text/plain; charset=UTF-8\\n"
"Content-Transfer-Encoding: 8bit\\n"
"Plural-Forms: nplurals=4; plural=(((n%100)==1)?(0):(((n%100)==2)?(1):((((n%100)==3)||((n%100)==4))?(2):3)));\\n"
EOF;
return $po_file[$plurals];
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AssertContentTrait:: |
protected | property | The current raw content. | |
AssertContentTrait:: |
protected | property | The drupalSettings value from the current raw $content. | |
AssertContentTrait:: |
protected | property | The XML structure parsed from the current raw $content. | 2 |
AssertContentTrait:: |
protected | property | The plain-text content of raw $content (text nodes). | |
AssertContentTrait:: |
protected | function | Passes if the raw text IS found escaped on the loaded page, fail otherwise. | |
AssertContentTrait:: |
protected | function | Asserts that a field exists with the given name or ID. | |
AssertContentTrait:: |
protected | function | Asserts that a field exists with the given ID and value. | |
AssertContentTrait:: |
protected | function | Asserts that a field exists with the given name and value. | |
AssertContentTrait:: |
protected | function | Asserts that a field exists in the current page by the given XPath. | |
AssertContentTrait:: |
protected | function | Asserts that a checkbox field in the current page is checked. | |
AssertContentTrait:: |
protected | function | Asserts that a field exists in the current page with a given Xpath result. | |
AssertContentTrait:: |
protected | function | Passes if a link with the specified label is found. | |
AssertContentTrait:: |
protected | function | Passes if a link containing a given href (part) is found. | |
AssertContentTrait:: |
protected | function | Asserts that each HTML ID is used for just a single element. | |
AssertContentTrait:: |
protected | function | Passes if the raw text IS NOT found escaped on the loaded page, fail otherwise. | |
AssertContentTrait:: |
protected | function | Asserts that a field does not exist with the given name or ID. | |
AssertContentTrait:: |
protected | function | Asserts that a field does not exist with the given ID and value. | |
AssertContentTrait:: |
protected | function | Asserts that a field does not exist with the given name and value. | |
AssertContentTrait:: |
protected | function | Asserts that a field does not exist or its value does not match, by XPath. | |
AssertContentTrait:: |
protected | function | Asserts that a checkbox field in the current page is not checked. | |
AssertContentTrait:: |
protected | function | Passes if a link with the specified label is not found. | |
AssertContentTrait:: |
protected | function | Passes if a link containing a given href (part) is not found. | |
AssertContentTrait:: |
protected | function | Passes if a link containing a given href is not found in the main region. | |
AssertContentTrait:: |
protected | function | Asserts that a select option in the current page does not exist. | |
AssertContentTrait:: |
protected | function | Asserts that a select option in the current page is not checked. | |
AssertContentTrait:: |
protected | function | Triggers a pass if the perl regex pattern is not found in raw content. | |
AssertContentTrait:: |
protected | function | Passes if the raw text is NOT found on the loaded page, fail otherwise. | |
AssertContentTrait:: |
protected | function | Passes if the page (with HTML stripped) does not contains the text. | |
AssertContentTrait:: |
protected | function | Pass if the page title is not the given string. | |
AssertContentTrait:: |
protected | function | Passes if the text is found MORE THAN ONCE on the text version of the page. | |
AssertContentTrait:: |
protected | function | Asserts that a select option in the current page exists. | |
AssertContentTrait:: |
protected | function | Asserts that a select option in the current page is checked. | |
AssertContentTrait:: |
protected | function | Asserts that a select option in the current page is checked. | |
AssertContentTrait:: |
protected | function | Asserts that a select option in the current page exists. | |
AssertContentTrait:: |
protected | function | Triggers a pass if the Perl regex pattern is found in the raw content. | |
AssertContentTrait:: |
protected | function | Passes if the raw text IS found on the loaded page, fail otherwise. | |
AssertContentTrait:: |
protected | function | Passes if the page (with HTML stripped) contains the text. | |
AssertContentTrait:: |
protected | function | Helper for assertText and assertNoText. | |
AssertContentTrait:: |
protected | function | Asserts that a Perl regex pattern is found in the plain-text content. | |
AssertContentTrait:: |
protected | function | Asserts themed output. | |
AssertContentTrait:: |
protected | function | Pass if the page title is the given string. | |
AssertContentTrait:: |
protected | function | Passes if the text is found ONLY ONCE on the text version of the page. | |
AssertContentTrait:: |
protected | function | Helper for assertUniqueText and assertNoUniqueText. | |
AssertContentTrait:: |
protected | function | Builds an XPath query. | |
AssertContentTrait:: |
protected | function | Helper: Constructs an XPath for the given set of attributes and value. | |
AssertContentTrait:: |
protected | function | Searches elements using a CSS selector in the raw content. | |
AssertContentTrait:: |
protected | function | Get all option elements, including nested options, in a select. | |
AssertContentTrait:: |
protected | function | Gets the value of drupalSettings for the currently-loaded page. | |
AssertContentTrait:: |
protected | function | Gets the current raw content. | |
AssertContentTrait:: |
protected | function | Get the selected value from a select field. | |
AssertContentTrait:: |
protected | function | Retrieves the plain-text content from the current raw content. | |
AssertContentTrait:: |
protected | function | Get the current URL from the cURL handler. | 1 |
AssertContentTrait:: |
protected | function | Parse content returned from curlExec using DOM and SimpleXML. | |
AssertContentTrait:: |
protected | function | Removes all white-space between HTML tags from the raw content. | |
AssertContentTrait:: |
protected | function | Sets the value of drupalSettings for the currently-loaded page. | |
AssertContentTrait:: |
protected | function | Sets the raw content (e.g. HTML). | |
AssertContentTrait:: |
protected | function | Performs an xpath search on the contents of the internal browser. | |
AssertHelperTrait:: |
protected | function | Casts MarkupInterface objects into strings. | |
ConfigTranslationUiTest:: |
protected | property | Administrator user for tests. | |
ConfigTranslationUiTest:: |
protected | property | Languages to enable. | |
ConfigTranslationUiTest:: |
protected | property | String translation storage object. | |
ConfigTranslationUiTest:: |
public static | property | Modules to enable. | |
ConfigTranslationUiTest:: |
protected | property | Translator user for tests. | |
ConfigTranslationUiTest:: |
protected | function | Asserts that a textarea with a given ID has been disabled from editing. | |
ConfigTranslationUiTest:: |
public | function | Helper function that returns a .po file with a given number of plural forms. | |
ConfigTranslationUiTest:: |
protected | function | Gets translation from locale storage. | |
ConfigTranslationUiTest:: |
protected | function | Get server-rendered contextual links for the given contextual link ids. | |
ConfigTranslationUiTest:: |
protected | function | Sets site name and slogan for default language, helps in tests. | |
ConfigTranslationUiTest:: |
protected | function |
Sets up a Drupal site for running functional and integration tests. Overrides WebTestBase:: |
|
ConfigTranslationUiTest:: |
public | function | Tests the account settings translation interface. | |
ConfigTranslationUiTest:: |
public | function | Tests the config_translation_info_alter() hook. | |
ConfigTranslationUiTest:: |
public | function | Tests the contact form translation. | |
ConfigTranslationUiTest:: |
public | function | Tests date format translation. | |
ConfigTranslationUiTest:: |
public | function | Tests the translation of field and field storage configuration. | |
ConfigTranslationUiTest:: |
public | function | Test translation storage in locale storage. | |
ConfigTranslationUiTest:: |
public | function | Test translation of plural strings with multiple plural forms in config. | |
ConfigTranslationUiTest:: |
public | function | Test the number of source elements for plural strings in config translation forms. | |
ConfigTranslationUiTest:: |
public | function | Tests the sequence data type translation. | |
ConfigTranslationUiTest:: |
public | function | Tests the single language existing. | |
ConfigTranslationUiTest:: |
public | function | Tests the site information translation interface. | |
ConfigTranslationUiTest:: |
public | function | Tests source and target language edge cases. | |
ConfigTranslationUiTest:: |
public | function | Tests the site information translation interface. | |
ConfigTranslationUiTest:: |
public | function | Test text_format translation. | |
ConfigTranslationUiTest:: |
public | function | Tests the views translation interface. | |
RandomGeneratorTrait:: |
protected | property | The random generator. | |
RandomGeneratorTrait:: |
protected | function | Gets the random generator for the utility methods. | |
RandomGeneratorTrait:: |
protected | function | Generates a unique random string containing letters and numbers. | |
RandomGeneratorTrait:: |
public | function | Generates a random PHP object. | |
RandomGeneratorTrait:: |
public | function | Generates a pseudo-random string of ASCII characters of codes 32 to 126. | |
RandomGeneratorTrait:: |
public | function | Callback for random string validation. | |
SessionTestTrait:: |
protected | property | The name of the session cookie. | |
SessionTestTrait:: |
protected | function | Generates a session cookie name. | |
SessionTestTrait:: |
protected | function | Returns the session name in use on the child site. | |
TestBase:: |
protected | property | Assertions thrown in that test case. | |
TestBase:: |
protected | property | The config importer that can used in a test. | 5 |
TestBase:: |
protected static | property | An array of config object names that are excluded from schema checking. | |
TestBase:: |
protected | property | The dependency injection container used in the test. | |
TestBase:: |
protected | property | The database prefix of this test run. | |
TestBase:: |
public | property | Whether to die in case any test assertion fails. | |
TestBase:: |
protected | property | HTTP authentication credentials (<username>:<password>). | |
TestBase:: |
protected | property | HTTP authentication method (specified as a CURLAUTH_* constant). | |
TestBase:: |
protected | property | The original configuration (variables), if available. | |
TestBase:: |
protected | property | The original configuration (variables). | |
TestBase:: |
protected | property | The original configuration directories. | |
TestBase:: |
protected | property | The original container. | |
TestBase:: |
protected | property | The original file directory, before it was changed for testing purposes. | |
TestBase:: |
protected | property | The original language. | |
TestBase:: |
protected | property | The original database prefix when running inside Simpletest. | |
TestBase:: |
protected | property | The original installation profile. | |
TestBase:: |
protected | property | The name of the session cookie of the test-runner. | |
TestBase:: |
protected | property | The settings array. | |
TestBase:: |
protected | property | The site directory of the original parent site. | |
TestBase:: |
protected | property | The private file directory for the test environment. | |
TestBase:: |
protected | property | The public file directory for the test environment. | |
TestBase:: |
public | property | Current results of this test case. | |
TestBase:: |
protected | property | The site directory of this test run. | |
TestBase:: |
protected | property | This class is skipped when looking for the source of an assertion. | |
TestBase:: |
protected | property | Set to TRUE to strict check all configuration saved. | 4 |
TestBase:: |
protected | property | The temporary file directory for the test environment. | |
TestBase:: |
protected | property | The test run ID. | |
TestBase:: |
protected | property | Time limit for the test. | |
TestBase:: |
protected | property | The translation file directory for the test environment. | |
TestBase:: |
public | property | TRUE if verbose debugging is enabled. | |
TestBase:: |
protected | property | Safe class name for use in verbose output filenames. | |
TestBase:: |
protected | property | Directory where verbose output files are put. | |
TestBase:: |
protected | property | URL to the verbose output file directory. | |
TestBase:: |
protected | property | Incrementing identifier for verbose output filenames. | |
TestBase:: |
protected | function | Internal helper: stores the assert. | |
TestBase:: |
protected | function | Check to see if two values are equal. | |
TestBase:: |
protected | function | Asserts that a specific error has been logged to the PHP error log. | |
TestBase:: |
protected | function | Check to see if a value is false. | |
TestBase:: |
protected | function | Check to see if two values are identical. | |
TestBase:: |
protected | function | Checks to see if two objects are identical. | |
TestBase:: |
protected | function | Asserts that no errors have been logged to the PHP error.log thus far. | |
TestBase:: |
protected | function | Check to see if two values are not equal. | |
TestBase:: |
protected | function | Check to see if two values are not identical. | |
TestBase:: |
protected | function | Check to see if a value is not NULL. | |
TestBase:: |
protected | function | Check to see if a value is NULL. | |
TestBase:: |
protected | function | Check to see if a value is not false. | |
TestBase:: |
protected | function | Act on global state information before the environment is altered for a test. | 1 |
TestBase:: |
private | function | Changes the database connection to the prefixed one. | |
TestBase:: |
protected | function | Checks the matching requirements for Test. | 2 |
TestBase:: |
protected | function | Configuration accessor for tests. Returns non-overridden configuration. | |
TestBase:: |
public | function | Returns a ConfigImporter object to import test importing of configuration. | 5 |
TestBase:: |
public | function | Copies configuration objects from source storage to target storage. | |
TestBase:: |
public static | function | Delete an assertion record by message ID. | |
TestBase:: |
protected | function | Fire an error assertion. | 3 |
TestBase:: |
public | function | Handle errors during test runs. | |
TestBase:: |
protected | function | Handle exceptions. | |
TestBase:: |
protected | function | Fire an assertion that is always negative. | |
TestBase:: |
public static | function | Ensures test files are deletable within file_unmanaged_delete_recursive(). | |
TestBase:: |
public static | function | Converts a list of possible parameters into a stack of permutations. | |
TestBase:: |
protected | function | Cycles through backtrace until the first non-assertion method is found. | |
TestBase:: |
protected | function | Gets the config schema exclusions for this test. | |
TestBase:: |
public static | function | Returns the database connection to the site running Simpletest. | |
TestBase:: |
public | function | Gets the database prefix. | |
TestBase:: |
public | function | Gets the temporary files directory. | |
TestBase:: |
public static | function | Store an assertion from outside the testing context. | |
TestBase:: |
protected | function | Fire an assertion that is always positive. | |
TestBase:: |
private | function | Generates a database prefix for running tests. | |
TestBase:: |
private | function | Prepares the current environment for running the test. | |
TestBase:: |
private | function | Cleans up the test environment and restores the original environment. | |
TestBase:: |
public | function | Run all tests in this class. | 1 |
TestBase:: |
protected | function | Changes in memory settings. | |
TestBase:: |
protected | function | Helper method to store an assertion record in the configured database. | |
TestBase:: |
protected | function | Logs a verbose message in a text file. | |
UserCreationTrait:: |
protected | function | Checks whether a given list of permission names is valid. | |
UserCreationTrait:: |
protected | function | Creates an administrative role. Aliased as: drupalCreateAdminRole | |
UserCreationTrait:: |
protected | function | Creates a role with specified permissions. Aliased as: drupalCreateRole | |
UserCreationTrait:: |
protected | function | Create a user with a given set of permissions. Aliased as: drupalCreateUser | |
UserCreationTrait:: |
protected | function | Grant permissions to a user role. | |
UserCreationTrait:: |
protected | function | Switch the current logged in user. | |
WebTestBase:: |
protected | property | Additional cURL options. | |
WebTestBase:: |
protected | property | Whether or not to assert the presence of the X-Drupal-Ajax-Token. | |
WebTestBase:: |
protected | property | The class loader to use for installation and initialization of setup. | |
WebTestBase:: |
protected | property | The config directories used in this test. | |
WebTestBase:: |
protected | property | The current cookie file used by cURL. | |
WebTestBase:: |
protected | property | The cookies of the page currently loaded in the internal browser. | |
WebTestBase:: |
protected | property | Cookies to set on curl requests. | |
WebTestBase:: |
protected | property | The handle of the current cURL connection. | |
WebTestBase:: |
protected | property | An array of custom translations suitable for drupal_rewrite_settings(). | |
WebTestBase:: |
protected | property | Indicates that headers should be dumped if verbose output is enabled. | 12 |
WebTestBase:: |
protected | property | Whether the files were copied to the test files directory. | |
WebTestBase:: |
protected | property | The headers of the page currently loaded in the internal browser. | |
WebTestBase:: |
protected | property |
The kernel used in this test. Overrides TestBase:: |
|
WebTestBase:: |
protected | property | The current user logged in using the internal browser. | |
WebTestBase:: |
protected | property | The number of meta refresh redirects to follow, or NULL if unlimited. | |
WebTestBase:: |
protected | property | The maximum number of redirects to follow when handling responses. | |
WebTestBase:: |
protected | property | The number of meta refresh redirects followed during ::drupalGet(). | |
WebTestBase:: |
protected | property | The original batch, before it was changed for testing purposes. | |
WebTestBase:: |
protected | property |
The original shutdown handlers array, before it was cleaned for testing. Overrides TestBase:: |
|
WebTestBase:: |
protected | property |
The original user, before it was changed to a clean uid = 1 for testing. Overrides TestBase:: |
|
WebTestBase:: |
protected | property | The profile to install as a basis for testing. | 30 |
WebTestBase:: |
protected | property | The number of redirects followed during the handling of a request. | |
WebTestBase:: |
protected | property | The "#1" admin user. | |
WebTestBase:: |
protected | property | The current session ID, if available. | |
WebTestBase:: |
protected | property | The URL currently loaded in the internal browser. | |
WebTestBase:: |
protected | function | Queues custom translations to be written to settings.php. | |
WebTestBase:: |
protected | function | Checks to see whether a block appears on the page. | |
WebTestBase:: |
protected | function | Asserts whether an expected cache context was present in the last response. | |
WebTestBase:: |
protected | function | Asserts whether an expected cache tag was present in the last response. | |
WebTestBase:: |
protected | function | Check if a HTTP response header exists and has the expected value. | |
WebTestBase:: |
protected | function | Asserts that the most recently sent email message has the given value. | |
WebTestBase:: |
protected | function | Asserts that the most recently sent email message has the pattern in it. | |
WebTestBase:: |
protected | function | Asserts that the most recently sent email message has the string in it. | |
WebTestBase:: |
protected | function | Checks to see whether a block does not appears on the page. | |
WebTestBase:: |
protected | function | Asserts that a cache context was not present in the last response. | |
WebTestBase:: |
protected | function | Asserts whether an expected cache tag was absent in the last response. | |
WebTestBase:: |
protected | function | Asserts the page did not return the specified response code. | |
WebTestBase:: |
protected | function | Asserts the page responds with the specified response code. | |
WebTestBase:: |
protected | function | Passes if the internal browser's URL matches the given path. | |
WebTestBase:: |
protected | function | Builds an a absolute URL from a system path or a URL object. | |
WebTestBase:: |
protected | function | Checks for meta refresh tag and if found call drupalGet() recursively. | |
WebTestBase:: |
protected | function | Follows a link by complete name. | |
WebTestBase:: |
protected | function | Provides a helper for ::clickLink() and ::clickLinkPartialName(). | |
WebTestBase:: |
protected | function | Follows a link by partial name. | |
WebTestBase:: |
protected | function | Runs cron in the Drupal installed by Simpletest. | |
WebTestBase:: |
protected | function | Close the cURL handler and unset the handler. | |
WebTestBase:: |
protected | function | Initializes and executes a cURL request. | 2 |
WebTestBase:: |
protected | function | Reads headers and registers errors received from the tested site. | |
WebTestBase:: |
protected | function | Initializes the cURL connection. | |
WebTestBase:: |
protected | function | Execute the non-interactive installer. | |
WebTestBase:: |
protected | function | Builds the renderable view of an entity. | |
WebTestBase:: |
protected | function | Compare two files based on size and file name. | |
WebTestBase:: |
protected | function | Creates a custom content type based on default settings. | |
WebTestBase:: |
protected | function | Creates a node based on default settings. | |
WebTestBase:: |
protected | function | Retrieves a Drupal path or an absolute path. | 1 |
WebTestBase:: |
protected | function | Requests a path or URL in drupal_ajax format and JSON-decodes the response. | |
WebTestBase:: |
protected | function | Gets the value of an HTTP response header. | |
WebTestBase:: |
protected | function | Gets the HTTP response headers of the requested page. | |
WebTestBase:: |
protected | function | Retrieves a Drupal path or an absolute path and JSON decodes the result. | |
WebTestBase:: |
protected | function | Gets an array containing all emails sent during this test case. | |
WebTestBase:: |
function | Get a node from the database based on its title. | ||
WebTestBase:: |
protected | function | Gets a list of files that can be used in tests. | |
WebTestBase:: |
protected | function | Retrieves a Drupal path or an absolute path for a given format. | |
WebTestBase:: |
protected | function | Requests a Drupal path or an absolute path as if it is a XMLHttpRequest. | |
WebTestBase:: |
protected | function | Retrieves only the headers for a Drupal path or an absolute path. | |
WebTestBase:: |
protected | function | Log in a user with the internal browser. | |
WebTestBase:: |
protected | function | Logs a user out of the internal browser and confirms. | |
WebTestBase:: |
protected | function | Creates a block instance based on default settings. | |
WebTestBase:: |
protected | function | Perform a POST HTTP request. | |
WebTestBase:: |
protected | function | Executes an Ajax form submission. | |
WebTestBase:: |
protected | function | Executes a form submission. | |
WebTestBase:: |
protected | function | Performs a POST HTTP request with a specific format. | |
WebTestBase:: |
protected | function | Processes an AJAX response into current content. | |
WebTestBase:: |
protected | function | Returns whether a given user account is logged in. | |
WebTestBase:: |
protected | function | Find a block instance on the page. | |
WebTestBase:: |
protected | function | Takes a path and returns an absolute path. | |
WebTestBase:: |
protected | function | Get the Ajax page state from drupalSettings and prepare it for POSTing. | |
WebTestBase:: |
protected | function | Returns all supported database driver installer objects. | |
WebTestBase:: |
protected | function | Handles form input related to drupalPostForm(). | |
WebTestBase:: |
protected | function | Initialize various configurations post-installation. | |
WebTestBase:: |
protected | function | Initializes the kernel after installation. | |
WebTestBase:: |
protected | function | Initialize settings created during install. | |
WebTestBase:: |
protected | function | Initializes user 1 for the site to be installed. | |
WebTestBase:: |
protected | function | Install modules defined by `static::$modules`. | |
WebTestBase:: |
protected | function | Returns the parameters that will be used when Simpletest installs Drupal. | 2 |
WebTestBase:: |
protected | function | Returns whether the test is being executed from within a test site. | |
WebTestBase:: |
protected | function | Creates a mock request and sets it on the generator. | |
WebTestBase:: |
protected | function | Prepares site settings and services before installation. | 1 |
WebTestBase:: |
protected | function | Reset and rebuild the environment after setup. | |
WebTestBase:: |
protected | function | Rebuilds \Drupal::getContainer(). | |
WebTestBase:: |
protected | function | Refreshes in-memory configuration and state information. | 1 |
WebTestBase:: |
protected | function | Resets all data structures after having enabled new modules. | |
WebTestBase:: |
protected | function | Restore the original batch. | |
WebTestBase:: |
protected | function | Serialize POST HTTP request values. | |
WebTestBase:: |
protected | function | Preserve the original batch, and instantiate the test batch. | |
WebTestBase:: |
protected | function | Changes parameters in the services.yml file. | |
WebTestBase:: |
protected | function | Enables/disables the cacheability headers. | |
WebTestBase:: |
protected | function |
Cleans up after testing. Overrides TestBase:: |
2 |
WebTestBase:: |
protected | function | Transforms a nested array into a flat array suitable for WebTestBase::drupalPostForm(). | |
WebTestBase:: |
protected | function | Outputs to verbose the most recent $count emails sent. | |
WebTestBase:: |
protected | function | Writes custom translations to the test site's settings.php. | |
WebTestBase:: |
protected | function | Rewrites the settings.php file of the test site. | |
WebTestBase:: |
function |
Constructor for \Drupal\simpletest\WebTestBase. Overrides TestBase:: |
1 |