Index: tests/formatting/Smilies.php
===================================================================
--- tests/formatting/Smilies.php	(revision 1337)
+++ tests/formatting/Smilies.php	(working copy)
@@ -81,4 +81,48 @@
 			$this->assertEquals( $outputs[$k], convert_smilies($input) );
 		}
 	}
+
+	/**
+	 * Check that $wp_smiliessearch pattern will match smilies
+	 * between spaces, but never capture those spaces.
+	 *
+	 * Further check that spaces aren't randomly deleted
+	 * or added when replacing the text with an image.
+	 *
+	 * @ticket 22692 / 26842
+	 */
+	function test_spaces_around_smilies() {
+		$nbsp = "\xC2\xA0";
+
+		$input  = array();
+		$output = array();
+
+		$input[]  = 'My test :) smile';
+		$output[] = array('test <img ', 'alt=":)"', ' /> smile');
+
+		$input[]  = 'My test ;) smile';
+		$output[] = array('test <img ', 'alt=";)"', ' /> smile');
+
+		$input[]  = 'My test &nbsp;:)&nbsp;smile';
+		$output[] = array('test &nbsp;<img ', 'alt=":)"', ' />&nbsp;smile');
+
+		$input[]  = 'My test &nbsp;;)&nbsp;smile';
+		$output[] = array('test &nbsp;<img ', 'alt=";)"', ' />&nbsp;smile');
+
+		$input[]  = "My test {$nbsp}:){$nbsp}smile";
+		$output[] = array("test {$nbsp}<img ", 'alt=":)"', " />{$nbsp}smile");
+
+		$input[]  = "My test {$nbsp};){$nbsp}smile";
+		$output[] = array("test {$nbsp}<img ", 'alt=";)"', " />{$nbsp}smile");
+
+		foreach($input as $key => $in) {
+			$result = convert_smilies( $in );
+			foreach($output[$key] as $k => $out) {
+
+				// Each output element must appear in the results.
+				$this->assertContains( $out[$k], $result );
+
+			}
+		}
+	}
 }
Index: tests/formatting/WPTexturize.php
===================================================================
--- tests/formatting/WPTexturize.php	(revision 1337)
+++ tests/formatting/WPTexturize.php	(working copy)
@@ -194,4 +194,55 @@
 		$this->assertEquals( ' &#8212;&nbsp;', wptexturize( ' --&nbsp;' ) );
 		$this->assertEquals( '&nbsp;&#8212; ', wptexturize( '&nbsp;-- ') );
 	}
+
+	/**
+	 * @ticket 22692
+	 */
+	function test_spaces_around_quotes() {
+		$nbsp = "\xC2\xA0";
+		$pi   = "\xCE\xA0";
+
+		// This should never happen, even if the desired output changes some day.
+
+		$problem_input  = "$nbsp\"A";
+		$problem_output = "$nbsp&#8221;A";
+
+		$this->assertNotEquals( $problem_output, wptexturize( $problem_input ) );
+
+		// These are desirable outputs for the current design.
+
+		$input  = array();
+		$output = array();
+
+		$input[]  = "stop. $nbsp\"A quote after 2 spaces.\"";
+		$output[] = "stop. $nbsp&#8220;A quote after 2 spaces.&#8221;";
+
+		$input[]  = "stop.$nbsp$nbsp\"A quote after 2 spaces.\"";
+		$output[] = "stop.$nbsp$nbsp&#8220;A quote after 2 spaces.&#8221;";
+
+		$input[]  = "stop. $nbsp'A quote after 2 spaces.'";
+		$output[] = "stop. $nbsp&#8216;A quote after 2 spaces.&#8217;";
+
+		$input[]  = "stop.$nbsp$nbsp'A quote after 2 spaces.'";
+		$output[] = "stop.$nbsp$nbsp&#8216;A quote after 2 spaces.&#8217;";
+
+		$input[]  = "stop. &nbsp;\"A quote after 2 spaces.\"";
+		$output[] = "stop. &nbsp;&#8220;A quote after 2 spaces.&#8221;";
+
+		$input[]  = "stop.&nbsp;&nbsp;\"A quote after 2 spaces.\"";
+		$output[] = "stop.&nbsp;&nbsp;&#8220;A quote after 2 spaces.&#8221;";
+
+		$input[]  = "stop. &nbsp;'A quote after 2 spaces.'";
+		$output[] = "stop. &nbsp;&#8216;A quote after 2 spaces.&#8217;";
+
+		$input[]  = "stop.&nbsp;&nbsp;'A quote after 2 spaces.'";
+		$output[] = "stop.&nbsp;&nbsp;&#8216;A quote after 2 spaces.&#8217;";
+
+		$input[]  = "Contraction: $pi's";
+		$output[] = "Contraction: $pi&#8217;s";
+
+		foreach($input as $key => $in) {
+			$this->assertEquals( $output[$key], wptexturize( $in ) );
+		}
+	}
 }
Index: tests/shortcode.php
===================================================================
--- tests/shortcode.php	(revision 1337)
+++ tests/shortcode.php	(working copy)
@@ -373,4 +373,25 @@
 		remove_filter( 'shortcode_atts_bartag', array( $this, '_filter_atts2' ), 10, 3 );
 	}
 
+	/**
+	 * Check that shortcode_unautop() will always recognize spaces around shortcodes.
+	 *
+	 * @ticket 22692
+	 */
+	function test_spaces_around_shortcodes() {
+		$nbsp = "\xC2\xA0";
+
+		$input  = array();
+
+		$input[] = "<p>[gallery ids=\"37,15,11\"]</p>";
+		$input[] = "<p> [gallery ids=\"37,15,11\"] </p>";
+		$input[] = "<p> $nbsp[gallery ids=\"37,15,11\"] $nbsp</p>";
+		$input[] = "<p> &nbsp;[gallery ids=\"37,15,11\"] &nbsp;</p>";
+
+		$output = "[gallery ids=\"37,15,11\"]";
+
+		foreach($input as $in) {
+			$this->assertEquals( $output, shortcode_unautop( $in ) );
+		}
+	}
 }
