summaryrefslogtreecommitdiff
path: root/modules/simpletest
diff options
context:
space:
mode:
authorwebchick <webchick@24967.no-reply.drupal.org>2012-02-14 15:17:20 -0500
committerwebchick <webchick@24967.no-reply.drupal.org>2012-02-14 15:17:20 -0500
commit74b7b4466c62a18d6140b273208d5d332602410a (patch)
tree68f19f1f9646487dcd530e76115dec77e4ca9e9c /modules/simpletest
parent936c3331c155103875d2f4b3fb80785b366d0d6e (diff)
downloadbrdo-74b7b4466c62a18d6140b273208d5d332602410a.tar.gz
brdo-74b7b4466c62a18d6140b273208d5d332602410a.tar.bz2
Issue #1287368 by TwoD, valthebald, sun, xjm: Fixed Drupal.settings.ajaxPageState.css gets overwritten.
Diffstat (limited to 'modules/simpletest')
-rw-r--r--modules/simpletest/tests/ajax.test51
-rw-r--r--modules/simpletest/tests/ajax_forms_test.module12
2 files changed, 45 insertions, 18 deletions
diff --git a/modules/simpletest/tests/ajax.test b/modules/simpletest/tests/ajax.test
index 9a76b9692..8e731b8e7 100644
--- a/modules/simpletest/tests/ajax.test
+++ b/modules/simpletest/tests/ajax.test
@@ -127,6 +127,18 @@ class AJAXFrameworkTestCase extends AJAXTestCase {
'css' => drupal_get_path('module', 'system') . '/system.admin.css',
'js' => drupal_get_path('module', 'system') . '/system.js',
);
+ // @todo D8: Add a drupal_css_defaults() helper function.
+ $expected_css_html = drupal_get_css(array($expected['css'] => array(
+ 'type' => 'file',
+ 'group' => CSS_DEFAULT,
+ 'weight' => 0,
+ 'every_page' => FALSE,
+ 'media' => 'all',
+ 'preprocess' => TRUE,
+ 'data' => $expected['css'],
+ 'browsers' => array('IE' => TRUE, '!IE' => TRUE),
+ )), TRUE);
+ $expected_js_html = drupal_get_js('header', array($expected['js'] => drupal_js_defaults($expected['js'])), TRUE);
// Get the base page.
$this->drupalGet('ajax_forms_test_lazy_load_form');
@@ -135,13 +147,34 @@ class AJAXFrameworkTestCase extends AJAXTestCase {
$original_js = $original_settings['ajaxPageState']['js'];
// Verify that the base page doesn't have the settings and files that are to
- // be lazy loaded as part of the next request.
+ // be lazy loaded as part of the next requests.
$this->assertTrue(!isset($original_settings[$expected['setting_name']]), t('Page originally lacks the %setting, as expected.', array('%setting' => $expected['setting_name'])));
$this->assertTrue(!isset($original_settings[$expected['css']]), t('Page originally lacks the %css file, as expected.', array('%css' => $expected['css'])));
$this->assertTrue(!isset($original_settings[$expected['js']]), t('Page originally lacks the %js file, as expected.', array('%js' => $expected['js'])));
- // Submit the AJAX request.
- $commands = $this->drupalPostAJAX(NULL, array(), array('op' => t('Submit')));
+ // Submit the AJAX request without triggering files getting added.
+ $commands = $this->drupalPostAJAX(NULL, array('add_files' => FALSE), array('op' => t('Submit')));
+ $new_settings = $this->drupalGetSettings();
+
+ // Verify the setting was not added when not expected.
+ $this->assertTrue(!isset($new_settings['setting_name']), t('Page still lacks the %setting, as expected.', array('%setting' => $expected['setting_name'])));
+ // Verify a settings command does not add CSS or scripts to Drupal.settings
+ // and no command inserts the corresponding tags on the page.
+ $found_settings_command = FALSE;
+ $found_markup_command = FALSE;
+ foreach ($commands as $command) {
+ if ($command['command'] == 'settings' && (array_key_exists('css', $command['settings']['ajaxPageState']) || array_key_exists('js', $command['settings']['ajaxPageState']))) {
+ $found_settings_command = TRUE;
+ }
+ if (isset($command['data']) && ($command['data'] == $expected_js_html || $command['data'] == $expected_css_html)) {
+ $found_markup_command = TRUE;
+ }
+ }
+ $this->assertFalse($found_settings_command, t('Page state still lacks the %css and %js files, as expected.', array('%css' => $expected['css'], '%js' => $expected['js'])));
+ $this->assertFalse($found_markup_command, t('Page still lacks the %css and %js files, as expected.', array('%css' => $expected['css'], '%js' => $expected['js'])));
+
+ // Submit the AJAX request and trigger adding files.
+ $commands = $this->drupalPostAJAX(NULL, array('add_files' => TRUE), array('op' => t('Submit')));
$new_settings = $this->drupalGetSettings();
$new_css = $new_settings['ajaxPageState']['css'];
$new_js = $new_settings['ajaxPageState']['js'];
@@ -151,17 +184,6 @@ class AJAXFrameworkTestCase extends AJAXTestCase {
// Verify the expected CSS file was added, both to Drupal.settings, and as
// an AJAX command for inclusion into the HTML.
- // @todo A drupal_css_defaults() function in Drupal 8 would be nice.
- $expected_css_html = drupal_get_css(array($expected['css'] => array(
- 'type' => 'file',
- 'group' => CSS_DEFAULT,
- 'weight' => 0,
- 'every_page' => FALSE,
- 'media' => 'all',
- 'preprocess' => TRUE,
- 'data' => $expected['css'],
- 'browsers' => array('IE' => TRUE, '!IE' => TRUE),
- )), TRUE);
$this->assertEqual($new_css, $original_css + array($expected['css'] => 1), t('Page state now has the %css file.', array('%css' => $expected['css'])));
$this->assertCommand($commands, array('data' => $expected_css_html), t('Page now has the %css file.', array('%css' => $expected['css'])));
@@ -170,7 +192,6 @@ class AJAXFrameworkTestCase extends AJAXTestCase {
// string containing the SCRIPT tag, we also ensure that unexpected
// JavaScript code, such as a jQuery.extend() that would potentially clobber
// rather than properly merge settings, didn't accidentally get added.
- $expected_js_html = drupal_get_js('header', array($expected['js'] => drupal_js_defaults($expected['js'])), TRUE);
$this->assertEqual($new_js, $original_js + array($expected['js'] => 1), t('Page state now has the %js file.', array('%js' => $expected['js'])));
$this->assertCommand($commands, array('data' => $expected_js_html), t('Page now has the %js file.', array('%js' => $expected['js'])));
}
diff --git a/modules/simpletest/tests/ajax_forms_test.module b/modules/simpletest/tests/ajax_forms_test.module
index 075b005ea..6a95710a8 100644
--- a/modules/simpletest/tests/ajax_forms_test.module
+++ b/modules/simpletest/tests/ajax_forms_test.module
@@ -468,6 +468,10 @@ function ajax_forms_test_validation_form_callback($form, $form_state) {
* Form builder: Builds a form that triggers a simple AJAX callback.
*/
function ajax_forms_test_lazy_load_form($form, &$form_state) {
+ $form['add_files'] = array(
+ '#type' => 'checkbox',
+ '#default_value' => FALSE,
+ );
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
@@ -482,9 +486,11 @@ function ajax_forms_test_lazy_load_form($form, &$form_state) {
* Form submit handler: Adds JavaScript and CSS that wasn't on the original form.
*/
function ajax_forms_test_lazy_load_form_submit($form, &$form_state) {
- drupal_add_js(array('ajax_forms_test_lazy_load_form_submit' => 'executed'), 'setting');
- drupal_add_css(drupal_get_path('module', 'system') . '/system.admin.css');
- drupal_add_js(drupal_get_path('module', 'system') . '/system.js');
+ if ($form_state['values']['add_files']) {
+ drupal_add_js(array('ajax_forms_test_lazy_load_form_submit' => 'executed'), 'setting');
+ drupal_add_css(drupal_get_path('module', 'system') . '/system.admin.css');
+ drupal_add_js(drupal_get_path('module', 'system') . '/system.js');
+ }
$form_state['rebuild'] = TRUE;
}