--- http://drupalcode.org/viewvc/drupal/drupal/includes/form.inc 2010/03/11 22:46:32 1.440 +++ http://drupalcode.org/viewvc/drupal/drupal/includes/form.inc 2010/03/12 14:38:37 1.441 @@ -1658,7 +1658,10 @@ } return $value; } - elseif (!isset($input)) { + // If the checkboxes are enabled, and NULL input is submitted, it means + // they're intentionally unchecked, so we need to return an empty array to + // prevent the default value from being used. + elseif (!isset($input) && empty($element['#disabled'])) { return array(); } } @@ -1698,7 +1701,15 @@ function form_type_select_value($element, $input = FALSE) { if ($input !== FALSE) { if (isset($element['#multiple']) && $element['#multiple']) { - return (is_array($input)) ? drupal_map_assoc($input) : array(); + // If an enabled multi-select submits NULL, it means all items are + // unselected. A disabled multi-select always submits NULL, and the + // default value should be used. + if (empty($element['#disabled'])) { + return (is_array($input)) ? drupal_map_assoc($input) : array(); + } + else { + return (isset($element['#default_value']) && is_array($element['#default_value'])) ? $element['#default_value'] : array(); + } } else { return $input; @@ -1719,7 +1730,7 @@ * for this element. Return nothing to use the default. */ function form_type_textfield_value($element, $input = FALSE) { - if ($input !== FALSE) { + if ($input !== FALSE && $input !== NULL) { // Equate $input to the form value to ensure it's marked for // validation. return str_replace(array("\r", "\n"), '', $input); @@ -2206,6 +2217,7 @@ '#parents' => $element['#parents'], '#id' => drupal_html_id('edit-' . implode('-', $parents_for_id)), '#ajax' => isset($element['#ajax']) ? $element['#ajax'] : NULL, + '#disabled' => isset($element['#disabled']) ? $element['#disabled'] : NULL, ); } } @@ -2308,6 +2320,7 @@ '#default_value' => isset($value[$key]) ? $key : NULL, '#attributes' => $element['#attributes'], '#ajax' => isset($element['#ajax']) ? $element['#ajax'] : NULL, + '#disabled' => isset($element['#disabled']) ? $element['#disabled'] : NULL, ); } } @@ -2459,6 +2472,7 @@ '#default_value' => isset($value[$key]) ? $key : NULL, '#attributes' => $element['#attributes'], '#ajax' => isset($element['#ajax']) ? $element['#ajax'] : NULL, + '#disabled' => isset($element['#disabled']) ? $element['#disabled'] : NULL, ); } else { @@ -2474,6 +2488,7 @@ '#parents' => $element['#parents'], '#id' => drupal_html_id('edit-' . implode('-', $parents_for_id)), '#ajax' => isset($element['#ajax']) ? $element['#ajax'] : NULL, + '#disabled' => isset($element['#disabled']) ? $element['#disabled'] : NULL, ); } } --- http://drupalcode.org/viewvc/drupal/drupal/modules/simpletest/drupal_web_test_case.php 2010/03/07 18:06:06 1.202 +++ http://drupalcode.org/viewvc/drupal/drupal/modules/simpletest/drupal_web_test_case.php 2010/03/12 14:38:37 1.203 @@ -1747,7 +1747,7 @@ */ protected function handleForm(&$post, &$edit, &$upload, $submit, $form) { // Retrieve the form elements. - $elements = $form->xpath('.//input|.//textarea|.//select'); + $elements = $form->xpath('.//input[not(@disabled)]|.//textarea[not(@disabled)]|.//select[not(@disabled)]'); $submit_matches = FALSE; foreach ($elements as $element) { // SimpleXML objects need string casting all the time. --- http://drupalcode.org/viewvc/drupal/drupal/modules/simpletest/tests/form.test 2010/03/07 07:49:26 1.38 +++ http://drupalcode.org/viewvc/drupal/drupal/modules/simpletest/tests/form.test 2010/03/12 14:38:37 1.39 @@ -172,7 +172,7 @@ // Checkboxes values are not filtered out. $returned_values[$key] = array_filter($returned_values[$key]); } - $this->assertEqual($expected_value, $returned_values[$key], t('Default value for %type: expected %expected, returned %returned.', array('%type' => $key, '%expected' => var_export($expected_value, TRUE), '%returned' => var_export($returned_values[$key], TRUE)))); + $this->assertIdentical($expected_value, $returned_values[$key], t('Default value for %type: expected %expected, returned %returned.', array('%type' => $key, '%expected' => var_export($expected_value, TRUE), '%returned' => var_export($returned_values[$key], TRUE)))); } } } --- http://drupalcode.org/viewvc/drupal/drupal/modules/translation/translation.test 2010/01/10 22:56:51 1.23 +++ http://drupalcode.org/viewvc/drupal/drupal/modules/translation/translation.test 2010/03/12 14:38:37 1.24 @@ -110,11 +110,14 @@ $this->assertRaw(t('The language %language has been created and can now be used. More information is available on the help screen.', array('%language' => $languages[$language_code]->name, '@locale-help' => url('admin/help/locale'))), t('Language has been created.')); } } + elseif ($this->xpath('//input[@type=\'checkbox\' and @name=\'enabled[' . $language_code . ']\' and @checked=\'checked\']')) { + // It's installed and enabled. No need to do anything. + $this->assertTrue(true, 'Language [' . $language_code . '] already installed and enabled.'); + } else { - // Ensure that it is enabled. + // It's installed but not enabled. Enable it. $this->assertTrue(true, 'Language [' . $language_code . '] already installed.'); $this->drupalPost(NULL, array('enabled[' . $language_code . ']' => TRUE), t('Save configuration')); - $this->assertRaw(t('Configuration saved.'), t('Language successfully enabled.')); } }