diff options
author | webchick <webchick@24967.no-reply.drupal.org> | 2012-02-14 15:17:20 -0500 |
---|---|---|
committer | webchick <webchick@24967.no-reply.drupal.org> | 2012-02-14 15:17:20 -0500 |
commit | 74b7b4466c62a18d6140b273208d5d332602410a (patch) | |
tree | 68f19f1f9646487dcd530e76115dec77e4ca9e9c /modules/simpletest | |
parent | 936c3331c155103875d2f4b3fb80785b366d0d6e (diff) | |
download | brdo-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.test | 51 | ||||
-rw-r--r-- | modules/simpletest/tests/ajax_forms_test.module | 12 |
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; } |