Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.1329
diff -u -r1.1329 node.module
--- modules/node/node.module	1 Dec 2010 00:18:15 -0000	1.1329
+++ modules/node/node.module	2 Dec 2010 20:54:11 -0000
@@ -2692,7 +2692,9 @@
     // Languages:
     $language_options = array();
     foreach (language_list('language') as $key => $entity) {
-      $language_options[$key] = $entity->name;
+      if ($entity->enabled) {
+        $language_options[$key] = $entity->name;
+      }
     }
     if (count($language_options) > 1) {
       $form['advanced']['language'] = array(
@@ -2728,8 +2730,11 @@
   if (isset($form_state['values']['term']) && is_array($form_state['values']['term']) && count($form_state['values']['term'])) {
     $keys = search_expression_insert($keys, 'term', implode(',', $form_state['values']['term']));
   }
-  if (isset($form_state['values']['language']) && is_array($form_state['values']['language']) && count($form_state['values']['language'])) {
-    $keys = search_expression_insert($keys, 'language', implode(',', array_filter($form_state['values']['language'])));
+  if (isset($form_state['values']['language']) && is_array($form_state['values']['language'])) {
+    $languages = array_filter($form_state['values']['language']);
+    if (count($languages)) {
+      $keys = search_expression_insert($keys, 'language', implode(',', $languages));
+    }
   }
   if ($form_state['values']['or'] != '') {
     if (preg_match_all('/ ("[^"]+"|[^" ]+)/i', ' ' . $form_state['values']['or'], $matches)) {
Index: modules/search/search.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/search/search.test,v
retrieving revision 1.82
diff -u -r1.82 search.test
--- modules/search/search.test	29 Nov 2010 06:38:51 -0000	1.82
+++ modules/search/search.test	2 Dec 2010 20:54:11 -0000
@@ -1789,3 +1789,68 @@
     $this->assertText('Test page text is here', 'Page override is working');
   }
 }
+
+/**
+ * Test node search with multiple languages.
+ */
+class SearchLanguageTestCase extends DrupalWebTestCase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Search language selection',
+      'description' => 'Tests advanced search with different languages enabled.',
+      'group' => 'Search',
+    );
+  }
+
+  /**
+   * Implementation setUp().
+   */
+  function setUp() {
+    parent::setUp('search', 'locale');
+
+    // Create and login user.
+    $test_user = $this->drupalCreateUser(array('access content', 'search content', 'use advanced search', 'administer nodes', 'administer languages', 'access administration pages'));
+    $this->drupalLogin($test_user);
+  }
+
+  function testLanguages() {
+    // Check that there are initially no languages displayed.
+    $this->drupalGet('search/node');
+    $this->assertNoText(t('Languages'), t('No languages to choose from.'));
+
+    // Add predefined language.
+    $edit = array('langcode' => 'fr');
+    $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
+    $this->assertText('fr', t('Language added successfully.'));
+
+    // Now we should have languages displayed.
+    $this->drupalGet('search/node');
+    $this->assertText(t('Languages'), t('Languages displayed to choose from.'));
+    $this->assertText(t('English'), t('English is a possible choice.'));
+    $this->assertText(t('French'), t('French is a possible choice.'));
+
+    // Ensure selecting no language does not make the query different.
+    $this->drupalPost('search/node', array(), t('Advanced search'));
+    $this->assertEqual($this->getUrl(), url('search/node/', array('absolute' => TRUE)), t('Correct page redirection, no language filtering.'));
+
+    // Pick French and ensure it is selected.
+    $edit = array('language[fr]' => TRUE);
+    $this->drupalPost('search/node', $edit, t('Advanced search'));
+    $this->assertFieldByXPath('//input[@name="keys"]', 'language:fr', t('Language filter added to query.'));
+
+    // Change the default language and disable English.
+    $path = 'admin/config/regional/language';
+    $this->drupalGet($path);
+    $this->assertFieldChecked('edit-site-default-en', t('English is the default language.'));
+    $edit = array('site_default' => 'fr');
+    $this->drupalPost(NULL, $edit, t('Save configuration'));
+    $this->assertNoFieldChecked('edit-site-default-en', t('Default language updated.'));
+    $edit = array('enabled[en]' => FALSE);
+    $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
+    $this->assertNoFieldChecked('edit-enabled-en', t('Language disabled.'));
+
+    // Check that there are again no languages displayed.
+    $this->drupalGet('search/node');
+    $this->assertNoText(t('Languages'), t('No languages to choose from.'));
+  }
+}
