diff options
author | Dries Buytaert <dries@buytaert.net> | 2010-09-16 20:14:49 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2010-09-16 20:14:49 +0000 |
commit | 2c10d1526fa2feddbbd40f73a9cb894091a5d8a7 (patch) | |
tree | 8325f0b7c3c08a0e8d829c204fe80493a5c6fd2a /modules | |
parent | 8e3e0036357335a339c55bf50d63c0d7ad13fc92 (diff) | |
download | brdo-2c10d1526fa2feddbbd40f73a9cb894091a5d8a7.tar.gz brdo-2c10d1526fa2feddbbd40f73a9cb894091a5d8a7.tar.bz2 |
- Patch #740834 by makononov, sun: form elements cannot be rendered without form_builder().
Diffstat (limited to 'modules')
-rw-r--r-- | modules/field_ui/field_ui.admin.inc | 15 | ||||
-rw-r--r-- | modules/simpletest/tests/common.test | 132 |
2 files changed, 141 insertions, 6 deletions
diff --git a/modules/field_ui/field_ui.admin.inc b/modules/field_ui/field_ui.admin.inc index cf3e8c3e9..dcfd7eca4 100644 --- a/modules/field_ui/field_ui.admin.inc +++ b/modules/field_ui/field_ui.admin.inc @@ -1648,13 +1648,22 @@ function field_ui_field_edit_form($form, &$form_state, $instance) { $bundles = field_info_bundles(); // Create a form structure for the instance values. - $form['instance'] = array( + // @todo Fieldset element info needs to be merged in order to not skip the + // default element definition for #pre_render. While the current default + // value could simply be hard-coded, we'd possibly forget this location + // when system_element_info() is updated. See also form_builder(). This + // particular #pre_render, field_ui_field_edit_instance_pre_render(), might + // as well be entirely needless though. + $form['instance'] = array_merge(element_info('fieldset'), array( '#tree' => TRUE, '#type' => 'fieldset', '#title' => t('%type settings', array('%type' => $bundles[$entity_type][$bundle]['label'])), - '#description' => t('These settings apply only to the %field field when used in the %type type.', array('%field' => $instance['label'], '%type' => $bundles[$entity_type][$bundle]['label'])), + '#description' => t('These settings apply only to the %field field when used in the %type type.', array( + '%field' => $instance['label'], + '%type' => $bundles[$entity_type][$bundle]['label'], + )), '#pre_render' => array('field_ui_field_edit_instance_pre_render'), - ); + )); // Build the non-configurable instance values. $form['instance']['field_name'] = array( diff --git a/modules/simpletest/tests/common.test b/modules/simpletest/tests/common.test index bcec70f0c..c90a59004 100644 --- a/modules/simpletest/tests/common.test +++ b/modules/simpletest/tests/common.test @@ -1389,11 +1389,11 @@ class JavaScriptTestCase extends DrupalWebTestCase { /** * Tests for drupal_render(). */ -class DrupalRenderUnitTestCase extends DrupalWebTestCase { +class DrupalRenderTestCase extends DrupalWebTestCase { public static function getInfo() { return array( - 'name' => 'Drupal render', - 'description' => 'Performs unit tests on drupal_render().', + 'name' => 'drupal_render()', + 'description' => 'Performs functional tests on drupal_render().', 'group' => 'System', ); } @@ -1470,6 +1470,132 @@ class DrupalRenderUnitTestCase extends DrupalWebTestCase { // Test that passing arguments to the theme function works. $this->assertEqual(drupal_render($element), $element['#foo'] . $element['#bar'], 'Passing arguments to theme functions works'); } + + /** + * Test rendering form elements without passing through form_builder(). + */ + function testDrupalRenderFormElements() { + // Define a series of form elements. + $element = array( + '#type' => 'button', + '#value' => $this->randomName(), + ); + $this->assertRenderedElement($element, '//input[@type=:type]', array(':type' => 'submit')); + + $element = array( + '#type' => 'textfield', + '#title' => $this->randomName(), + '#value' => $this->randomName(), + ); + $this->assertRenderedElement($element, '//input[@type=:type]', array(':type' => 'text')); + + $element = array( + '#type' => 'password', + '#title' => $this->randomName(), + ); + $this->assertRenderedElement($element, '//input[@type=:type]', array(':type' => 'password')); + + $element = array( + '#type' => 'textarea', + '#title' => $this->randomName(), + '#value' => $this->randomName(), + ); + $this->assertRenderedElement($element, '//textarea'); + + $element = array( + '#type' => 'radio', + '#title' => $this->randomName(), + '#value' => FALSE, + ); + $this->assertRenderedElement($element, '//input[@type=:type]', array(':type' => 'radio')); + + $element = array( + '#type' => 'checkbox', + '#title' => $this->randomName(), + ); + $this->assertRenderedElement($element, '//input[@type=:type]', array(':type' => 'checkbox')); + + $element = array( + '#type' => 'select', + '#title' => $this->randomName(), + '#options' => array( + 0 => $this->randomName(), + 1 => $this->randomName(), + ), + ); + $this->assertRenderedElement($element, '//select'); + + $element = array( + '#type' => 'file', + '#title' => $this->randomName(), + ); + $this->assertRenderedElement($element, '//input[@type=:type]', array(':type' => 'file')); + + $element = array( + '#type' => 'item', + '#title' => $this->randomName(), + '#markup' => $this->randomName(), + ); + $this->assertRenderedElement($element, '//div[contains(@class, :class) and contains(., :markup)]/label[contains(., :label)]', array( + ':class' => 'form-type-item', + ':markup' => $element['#markup'], + ':label' => $element['#title'], + )); + + $element = array( + '#type' => 'hidden', + '#title' => $this->randomName(), + '#value' => $this->randomName(), + ); + $this->assertRenderedElement($element, '//input[@type=:type]', array(':type' => 'hidden')); + + $element = array( + '#type' => 'link', + '#title' => $this->randomName(), + '#href' => $this->randomName(), + '#options' => array( + 'absolute' => TRUE, + ), + ); + $this->assertRenderedElement($element, '//a[@href=:href and contains(., :title)]', array( + ':href' => url($element['#href'], array('absolute' => TRUE)), + ':title' => $element['#title'], + )); + + $element = array( + '#type' => 'fieldset', + '#title' => $this->randomName(), + ); + $this->assertRenderedElement($element, '//fieldset/legend[contains(., :title)]', array( + ':title' => $element['#title'], + )); + + $element['item'] = array( + '#type' => 'item', + '#title' => $this->randomName(), + '#markup' => $this->randomName(), + ); + $this->assertRenderedElement($element, '//fieldset/div/div[contains(@class, :class) and contains(., :markup)]', array( + ':class' => 'form-type-item', + ':markup' => $element['item']['#markup'], + )); + } + + protected function assertRenderedElement(array $element, $xpath, array $xpath_args = array()) { + $original_element = $element; + $this->drupalSetContent(drupal_render($element)); + $this->verbose('<pre>' . check_plain(var_export($original_element, TRUE)) . '</pre>' + . '<pre>' . check_plain(var_export($element, TRUE)) . '</pre>' + . '<hr />' . $this->drupalGetContent() + ); + + // @see DrupalWebTestCase::xpath() + $xpath = $this->buildXPathQuery($xpath, $xpath_args); + $element += array('#value' => NULL); + $this->assertFieldByXPath($xpath, $element['#value'], t('#type @type was properly rendered.', array( + '@type' => var_export($element['#type'], TRUE), + ))); + } } /** |