commit 741022785302a95445b54ad00356108c0a7d7563 (HEAD, round-two)
Author: Tim Plunkett <git@plnktt.com>
Date:   Mon Apr 16 18:54:44 2012 -0400

    round two

diff --git a/modules/system/system.test b/modules/system/system.test
index f70dae0..abd21aa 100644
--- a/modules/system/system.test
+++ b/modules/system/system.test
@@ -1638,26 +1638,98 @@ class SystemThemeFunctionalTest extends DrupalWebTestCase {
   function testThemeSettings() {
     // Specify a filesystem path to be used for the logo.
     $file = current($this->drupalGetTestFiles('image'));
-    $fullpath = drupal_realpath($file->uri);
-    $edit = array(
-      'default_logo' => FALSE,
-      'logo_path' => $fullpath,
+    $file_relative = strtr($file->uri, array('public:/' => variable_get('file_public_path', conf_path() . '/files')));
+    $default_theme_path = 'themes/stark';
+
+    $supported_paths = array(
+      // Raw stream wrapper URI.
+      $file->uri => array(
+        'form' => file_uri_target($file->uri),
+        'src' => file_create_url($file->uri),
+      ),
+      // Relative path within the public filesystem.
+      file_uri_target($file->uri) => array(
+        'form' => file_uri_target($file->uri),
+        'src' => file_create_url($file->uri),
+      ),
+      // Relative path to a public file.
+      $file_relative => array(
+        'form' => $file_relative,
+        'src' => file_create_url($file->uri),
+      ),
+      // Relative path to an arbitrary file.
+      'misc/druplicon.png' => array(
+        'form' => 'misc/druplicon.png',
+        'src' => $GLOBALS['base_url'] . '/' . 'misc/druplicon.png',
+      ),
+      // Relative path to a file in a theme.
+      $default_theme_path . '/logo.png' => array(
+        'form' => $default_theme_path . '/logo.png',
+        'src' => $GLOBALS['base_url'] . '/' . $default_theme_path . '/logo.png',
+      ),
     );
-    $this->drupalPost('admin/appearance/settings', $edit, t('Save configuration'));
-    $this->drupalGet('node');
-    $this->assertRaw($fullpath, t('Logo path successfully changed.'));
+    foreach ($supported_paths as $input => $expected) {
+      $edit = array(
+        'default_logo' => FALSE,
+        'logo_path' => $input,
+      );
+      $this->drupalPost('admin/appearance/settings', $edit, t('Save configuration'));
+      $this->assertNoText('The custom logo path is invalid.');
+      $this->assertFieldByName('logo_path', $expected['form']);
+
+      // Verify the actual 'src' attribute of the logo being output.
+      $this->drupalGet('');
+      $elements = $this->xpath('//*[@id=:id]/img', array(':id' => 'logo'));
+      $this->assertEqual((string) $elements[0]['src'], $expected['src']);
+    }
+
+    $unsupported_paths = array(
+      // Stream wrapper URI to non-existing file.
+      'public://whatever.png',
+      'private://whatever.png',
+      'temporary://whatever.png',
+      // Bogus stream wrapper URIs.
+      'public:/whatever.png',
+      '://whatever.png',
+      ':whatever.png',
+      'public://',
+      // Relative path within the public filesystem to non-existing file.
+      'whatever.png',
+      // Relative path to non-existing file in public filesystem.
+      variable_get('file_public_path', conf_path() . '/files') . '/whatever.png',
+      // Semi-absolute path to non-existing file in public filesystem.
+      '/' . variable_get('file_public_path', conf_path() . '/files') . '/whatever.png',
+      // Relative path to arbitrary non-existing file.
+      'misc/whatever.png',
+      // Semi-absolute path to arbitrary non-existing file.
+      '/misc/whatever.png',
+      // Absolute paths to any local file (even if it exists).
+      drupal_realpath($file->uri),
+    );
+    $this->drupalGet('admin/appearance/settings');
+    foreach ($unsupported_paths as $path) {
+      $edit = array(
+        'default_logo' => FALSE,
+        'logo_path' => $path,
+      );
+      $this->drupalPost(NULL, $edit, t('Save configuration'));
+      $this->assertText('The custom logo path is invalid.');
+    }
 
     // Upload a file to use for the logo.
-    $file = current($this->drupalGetTestFiles('image'));
     $edit = array(
       'default_logo' => FALSE,
       'logo_path' => '',
       'files[logo_upload]' => drupal_realpath($file->uri),
     );
-    $options = array();
-    $this->drupalPost('admin/appearance/settings', $edit, t('Save configuration'), $options);
-    $this->drupalGet('node');
-    $this->assertRaw($file->name, t('Logo file successfully uploaded.'));
+    $this->drupalPost('admin/appearance/settings', $edit, t('Save configuration'));
+
+    $fields = $this->xpath($this->constructFieldXpath('name', 'logo_path'));
+    $uploaded_filename = 'public://' . $fields[0]['value'];
+
+    $this->drupalGet('');
+    $elements = $this->xpath('//*[@id=:id]/img', array(':id' => 'logo'));
+    $this->assertEqual($elements[0]['src'], file_create_url($uploaded_filename));
   }
 
   /**
