<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[28717] trunk: `smilies_init()`, treat `&nbsp;` like whitespace when converting smilies.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://core.trac.wordpress.org/changeset/28717">28717</a></dd>
<dt>Author</dt> <dd>wonderboymusic</dd>
<dt>Date</dt> <dd>2014-06-10 02:02:23 +0000 (Tue, 10 Jun 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>`smilies_init()`, treat `&nbsp;` like whitespace when converting smilies.

Adds unit tests.

Props miqrogroove.
Fixes <a href="http://core.trac.wordpress.org/ticket/27587">#27587</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesformattingphp">trunk/src/wp-includes/formatting.php</a></li>
<li><a href="#trunksrcwpincludesfunctionsphp">trunk/src/wp-includes/functions.php</a></li>
<li><a href="#trunktestsphpunittestsformattingSmiliesphp">trunk/tests/phpunit/tests/formatting/Smilies.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludesformattingphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/formatting.php (28716 => 28717)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/formatting.php     2014-06-10 01:54:11 UTC (rev 28716)
+++ trunk/src/wp-includes/formatting.php        2014-06-10 02:02:23 UTC (rev 28717)
</span><span class="lines">@@ -1912,7 +1912,7 @@
</span><span class="cx">   */
</span><span class="cx">  $src_url = apply_filters( 'smilies_src', includes_url( "images/smilies/$img" ), $img, site_url() );
</span><span class="cx"> 
</span><del>-       return sprintf( ' <img src="%s" alt="%s" class="wp-smiley" /> ', esc_url( $src_url ), esc_attr( $smiley ) );
</del><ins>+        return sprintf( '<img src="%s" alt="%s" class="wp-smiley" />', esc_url( $src_url ), esc_attr( $smiley ) );
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /**
</span></span></pre></div>
<a id="trunksrcwpincludesfunctionsphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/functions.php (28716 => 28717)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/functions.php      2014-06-10 01:54:11 UTC (rev 28716)
+++ trunk/src/wp-includes/functions.php 2014-06-10 02:02:23 UTC (rev 28717)
</span><span class="lines">@@ -2713,8 +2713,11 @@
</span><span class="cx">   */
</span><span class="cx">  krsort($wpsmiliestrans);
</span><span class="cx"> 
</span><del>-       $wp_smiliessearch = '/((?:\s|^)';
</del><ins>+        $spaces = wp_spaces_regexp();
</ins><span class="cx"> 
</span><ins>+       // Begin first "subpattern"
+       $wp_smiliessearch = '/(?<=' . $spaces . '|^)';
+
</ins><span class="cx">   $subchar = '';
</span><span class="cx">  foreach ( (array) $wpsmiliestrans as $smiley => $img ) {
</span><span class="cx">          $firstchar = substr($smiley, 0, 1);
</span><span class="lines">@@ -2723,7 +2726,8 @@
</span><span class="cx">          // new subpattern?
</span><span class="cx">          if ($firstchar != $subchar) {
</span><span class="cx">                  if ($subchar != '') {
</span><del>-                               $wp_smiliessearch .= ')(?=\s|$))|((?:\s|^)'; ;
</del><ins>+                                $wp_smiliessearch .= ')(?=' . $spaces . '|$)';  // End previous "subpattern"
+                               $wp_smiliessearch .= '|(?<=' . $spaces . '|^)'; // Begin another "subpattern"
</ins><span class="cx">                   }
</span><span class="cx">                  $subchar = $firstchar;
</span><span class="cx">                  $wp_smiliessearch .= preg_quote($firstchar, '/') . '(?:';
</span><span class="lines">@@ -2733,7 +2737,7 @@
</span><span class="cx">          $wp_smiliessearch .= preg_quote($rest, '/');
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       $wp_smiliessearch .= ')(?=\s|$))/m';
</del><ins>+        $wp_smiliessearch .= ')(?=' . $spaces . '|$)/m';
</ins><span class="cx"> 
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4419,4 +4423,4 @@
</span><span class="cx">  }
</span><span class="cx"> 
</span><span class="cx">  return (bool) $var;
</span><del>-}
</del><span class="cx">\ No newline at end of file
</span><ins>+}
</ins></span></pre></div>
<a id="trunktestsphpunittestsformattingSmiliesphp"></a>
<div class="modfile"><h4>Modified: trunk/tests/phpunit/tests/formatting/Smilies.php (28716 => 28717)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/tests/phpunit/tests/formatting/Smilies.php 2014-06-10 01:54:11 UTC (rev 28716)
+++ trunk/tests/phpunit/tests/formatting/Smilies.php    2014-06-10 02:02:23 UTC (rev 28717)
</span><span class="lines">@@ -16,15 +16,15 @@
</span><span class="cx">          return array (
</span><span class="cx">                  array (
</span><span class="cx">                          'Lorem ipsum dolor sit amet mauris ;-) Praesent gravida sodales. :lol: Vivamus nec diam in faucibus eu, bibendum varius nec, imperdiet purus est, at augue at lacus malesuada elit dapibus a, :eek: mauris. Cras mauris viverra elit. Nam laoreet viverra. Pellentesque tortor. Nam libero ante, porta urna ut turpis. Nullam wisi magna, :mrgreen: tincidunt nec, sagittis non, fringilla enim. Nam consectetuer nec, ullamcorper pede eu dui odio consequat vel, vehicula tortor quis pede turpis cursus quis, egestas ipsum ultricies ut, eleifend velit. Mauris vestibulum iaculis. Sed in nunc. Vivamus elit porttitor egestas. Mauris purus :?:',
</span><del>-                               'Lorem ipsum dolor sit amet mauris <img src="' . $includes_path . 'icon_wink.gif" alt=";-)" class="wp-smiley" />  Praesent gravida sodales. <img src="' . $includes_path . 'icon_lol.gif" alt=":lol:" class="wp-smiley" />  Vivamus nec diam in faucibus eu, bibendum varius nec, imperdiet purus est, at augue at lacus malesuada elit dapibus a, <img src="' . $includes_path . 'icon_surprised.gif" alt=":eek:" class="wp-smiley" />  mauris. Cras mauris viverra elit. Nam laoreet viverra. Pellentesque tortor. Nam libero ante, porta urna ut turpis. Nullam wisi magna, <img src="' . $includes_path . 'icon_mrgreen.gif" alt=":mrgreen:" class="wp-smiley" />  tincidunt nec, sagittis non, fringilla enim. Nam consectetuer nec, ullamcorper pede eu dui odio consequat vel, vehicula tortor quis pede turpis cursus quis, egestas ipsum ultricies ut, eleif
 end velit. Mauris vestibulum iaculis. Sed in nunc. Vivamus elit porttitor egestas. Mauris purus <img src="' . $includes_path . 'icon_question.gif" alt=":?:" class="wp-smiley" /> '
</del><ins>+                                'Lorem ipsum dolor sit amet mauris <img src="' . $includes_path . 'icon_wink.gif" alt=";-)" class="wp-smiley" /> Praesent gravida sodales. <img src="' . $includes_path . 'icon_lol.gif" alt=":lol:" class="wp-smiley" /> Vivamus nec diam in faucibus eu, bibendum varius nec, imperdiet purus est, at augue at lacus malesuada elit dapibus a, <img src="' . $includes_path . 'icon_surprised.gif" alt=":eek:" class="wp-smiley" /> mauris. Cras mauris viverra elit. Nam laoreet viverra. Pellentesque tortor. Nam libero ante, porta urna ut turpis. Nullam wisi magna, <img src="' . $includes_path . 'icon_mrgreen.gif" alt=":mrgreen:" class="wp-smiley" /> tincidunt nec, sagittis non, fringilla enim. Nam consectetuer nec, ullamcorper pede eu dui odio consequat vel, vehicula tortor quis pede turpis cursus quis, egestas ipsum ultricies ut, eleifend v
 elit. Mauris vestibulum iaculis. Sed in nunc. Vivamus elit porttitor egestas. Mauris purus <img src="' . $includes_path . 'icon_question.gif" alt=":?:" class="wp-smiley" />'
</ins><span class="cx">                   ),
</span><span class="cx">                  array (
</span><span class="cx">                          '<strong>Welcome to the jungle!</strong> We got fun n games! :) We got everything you want 8-) <em>Honey we know the names :)</em>',
</span><del>-                               '<strong>Welcome to the jungle!</strong> We got fun n games! <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" />  We got everything you want <img src="' . $includes_path . 'icon_cool.gif" alt="8-)" class="wp-smiley" />  <em>Honey we know the names <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" /> </em>'
</del><ins>+                                '<strong>Welcome to the jungle!</strong> We got fun n games! <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" /> We got everything you want <img src="' . $includes_path . 'icon_cool.gif" alt="8-)" class="wp-smiley" /> <em>Honey we know the names <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" /></em>'
</ins><span class="cx">                   ),
</span><span class="cx">                  array (
</span><span class="cx">                          "<strong;)>a little bit of this\na little bit:other: of that :D\n:D a little bit of good\nyeah with a little bit of bad8O",
</span><del>-                               "<strong;)>a little bit of this\na little bit:other: of that <img src=\"{$includes_path}icon_biggrin.gif\" alt=\":D\" class=\"wp-smiley\" />  <img src=\"{$includes_path}icon_biggrin.gif\" alt=\":D\" class=\"wp-smiley\" />  a little bit of good\nyeah with a little bit of bad8O"
</del><ins>+                                "<strong;)>a little bit of this\na little bit:other: of that <img src=\"{$includes_path}icon_biggrin.gif\" alt=\":D\" class=\"wp-smiley\" />\n<img src=\"{$includes_path}icon_biggrin.gif\" alt=\":D\" class=\"wp-smiley\" /> a little bit of good\nyeah with a little bit of bad8O"
</ins><span class="cx">                   ),
</span><span class="cx">                  array (
</span><span class="cx">                          '<strong style="here comes the sun :-D">and I say it\'s allright:D:D',
</span><span class="lines">@@ -48,8 +48,6 @@
</span><span class="cx">   * when use_smilies = 1 and not when use_smilies = 0
</span><span class="cx">   */
</span><span class="cx">  function test_convert_standard_smilies( $in_txt, $converted_txt ) {
</span><del>-               global $wpsmiliestrans;
-
</del><span class="cx">           // standard smilies, use_smilies: ON
</span><span class="cx">          update_option( 'use_smilies', 1 );
</span><span class="cx"> 
</span><span class="lines">@@ -61,8 +59,6 @@
</span><span class="cx">          update_option( 'use_smilies', 0 );
</span><span class="cx"> 
</span><span class="cx">          $this->assertEquals( $in_txt, convert_smilies($in_txt) );
</span><del>-
-               unset( $wpsmiliestrans );
</del><span class="cx">   }
</span><span class="cx"> 
</span><span class="cx">  /**
</span><span class="lines">@@ -76,15 +72,15 @@
</span><span class="cx">          return array (
</span><span class="cx">                  array (
</span><span class="cx">                          'Peter Brian Gabriel (born 13 February 1950) is a British singer, musician, and songwriter who rose to fame as the lead vocalist and flautist of the progressive rock group Genesis. :monkey:',
</span><del>-                               'Peter Brian Gabriel (born 13 February 1950) is a British singer, musician, and songwriter who rose to fame as the lead vocalist and flautist of the progressive rock group Genesis. <img src="' . $includes_path . 'icon_shock_the_monkey.gif" alt=":monkey:" class="wp-smiley" /> '
</del><ins>+                                'Peter Brian Gabriel (born 13 February 1950) is a British singer, musician, and songwriter who rose to fame as the lead vocalist and flautist of the progressive rock group Genesis. <img src="' . $includes_path . 'icon_shock_the_monkey.gif" alt=":monkey:" class="wp-smiley" />'
</ins><span class="cx">                   ),
</span><span class="cx">                  array (
</span><span class="cx">                          'Star Wars Jedi Knight :arrow: Jedi Academy is a first and third-person shooter action game set in the Star Wars universe. It was developed by Raven Software and published, distributed and marketed by LucasArts in North America and by Activision in the rest of the world. :nervou:',
</span><del>-                               'Star Wars Jedi Knight <img src="' . $includes_path . 'icon_arrow.gif" alt=":arrow:" class="wp-smiley" />  Jedi Academy is a first and third-person shooter action game set in the Star Wars universe. It was developed by Raven Software and published, distributed and marketed by LucasArts in North America and by Activision in the rest of the world. <img src="' . $includes_path . 'icon_nervou.gif" alt=":nervou:" class="wp-smiley" /> '
</del><ins>+                                'Star Wars Jedi Knight <img src="' . $includes_path . 'icon_arrow.gif" alt=":arrow:" class="wp-smiley" /> Jedi Academy is a first and third-person shooter action game set in the Star Wars universe. It was developed by Raven Software and published, distributed and marketed by LucasArts in North America and by Activision in the rest of the world. <img src="' . $includes_path . 'icon_nervou.gif" alt=":nervou:" class="wp-smiley" />'
</ins><span class="cx">                   ),
</span><span class="cx">                  array (
</span><span class="cx">                          ':arrow: monkey: Lorem ipsum dolor sit amet enim. Etiam ullam :PP <br />corper. Suspendisse a pellentesque dui, non felis.<a> :arrow: :arrow</a>',
</span><del>-                               ' <img src="' . $includes_path . 'icon_arrow.gif" alt=":arrow:" class="wp-smiley" />  monkey: Lorem ipsum dolor sit amet enim. Etiam ullam <img src="' . $includes_path . 'icon_tongue.gif" alt=":PP" class="wp-smiley" />  <br />corper. Suspendisse a pellentesque dui, non felis.<a> <img src="' . $includes_path . 'icon_arrow.gif" alt=":arrow:" class="wp-smiley" />  :arrow</a>'
</del><ins>+                                '<img src="' . $includes_path . 'icon_arrow.gif" alt=":arrow:" class="wp-smiley" /> monkey: Lorem ipsum dolor sit amet enim. Etiam ullam <img src="' . $includes_path . 'icon_tongue.gif" alt=":PP" class="wp-smiley" /> <br />corper. Suspendisse a pellentesque dui, non felis.<a> <img src="' . $includes_path . 'icon_arrow.gif" alt=":arrow:" class="wp-smiley" /> :arrow</a>'
</ins><span class="cx">                   ),
</span><span class="cx">          );
</span><span class="cx">  }
</span><span class="lines">@@ -96,10 +92,16 @@
</span><span class="cx">   */
</span><span class="cx">  function test_convert_custom_smilies ( $in_txt, $converted_txt ) {
</span><span class="cx">          global $wpsmiliestrans;
</span><del>-               $trans_orig = $wpsmiliestrans; // save original translations array
</del><span class="cx"> 
</span><span class="cx">          // custom smilies, use_smilies: ON
</span><span class="cx">          update_option( 'use_smilies', 1 );
</span><ins>+
+               if ( !isset( $wpsmiliestrans ) ) {
+                       smilies_init();
+               }
+
+               $trans_orig = $wpsmiliestrans; // save original translations array
+
</ins><span class="cx">           $wpsmiliestrans = array(
</span><span class="cx">            ':PP' => 'icon_tongue.gif',
</span><span class="cx">            ':arrow:' => 'icon_arrow.gif',
</span><span class="lines">@@ -142,13 +144,10 @@
</span><span class="cx">   * @dataProvider get_smilies_ignore_tags
</span><span class="cx">   */
</span><span class="cx">  public function test_ignore_smilies_in_tags( $element ) {
</span><del>-               global $wpsmiliestrans;
-               $trans_orig = $wpsmiliestrans;  // save original translations array
-
</del><span class="cx">           $includes_path = includes_url("images/smilies/");
</span><span class="cx"> 
</span><span class="cx">          $in_str = 'Do we ingore smilies ;-) in ' . $element . ' tags <' . $element . '>My Content Here :?: </' . $element . '>';
</span><del>-               $exp_str = 'Do we ingore smilies <img src="' . $includes_path . 'icon_wink.gif" alt=";-)" class="wp-smiley" />  in ' . $element . ' tags <' . $element . '>My Content Here :?: </' . $element . '>';
</del><ins>+                $exp_str = 'Do we ingore smilies <img src="' . $includes_path . 'icon_wink.gif" alt=";-)" class="wp-smiley" /> in ' . $element . ' tags <' . $element . '>My Content Here :?: </' . $element . '>';
</ins><span class="cx"> 
</span><span class="cx">          // standard smilies, use_smilies: ON
</span><span class="cx">          update_option( 'use_smilies', 1 );
</span><span class="lines">@@ -158,8 +157,6 @@
</span><span class="cx"> 
</span><span class="cx">          // standard smilies, use_smilies: OFF
</span><span class="cx">          update_option( 'use_smilies', 0 );
</span><del>-
-               $wpsmiliestrans = $trans_orig; // reset original translations array
</del><span class="cx">   }
</span><span class="cx"> 
</span><span class="cx">  /**
</span><span class="lines">@@ -172,27 +169,27 @@
</span><span class="cx">          return array (
</span><span class="cx">                  array (
</span><span class="cx">                          '8-O :-(',
</span><del>-                               ' <img src="' . $includes_path . 'icon_eek.gif" alt="8-O" class="wp-smiley" />  <img src="' . $includes_path . 'icon_sad.gif" alt=":-(" class="wp-smiley" /> '
</del><ins>+                                '<img src="' . $includes_path . 'icon_eek.gif" alt="8-O" class="wp-smiley" /> <img src="' . $includes_path . 'icon_sad.gif" alt=":-(" class="wp-smiley" />'
</ins><span class="cx">                   ),
</span><span class="cx">                  array (
</span><span class="cx">                          '8-) 8-O',
</span><del>-                               ' <img src="' . $includes_path . 'icon_cool.gif" alt="8-)" class="wp-smiley" />  <img src="' . $includes_path . 'icon_eek.gif" alt="8-O" class="wp-smiley" /> '
</del><ins>+                                '<img src="' . $includes_path . 'icon_cool.gif" alt="8-)" class="wp-smiley" /> <img src="' . $includes_path . 'icon_eek.gif" alt="8-O" class="wp-smiley" />'
</ins><span class="cx">                   ),
</span><span class="cx">                  array (
</span><span class="cx">                          '8-) 8O',
</span><del>-                               ' <img src="' . $includes_path . 'icon_cool.gif" alt="8-)" class="wp-smiley" />  <img src="' . $includes_path . 'icon_eek.gif" alt="8O" class="wp-smiley" /> '
</del><ins>+                                '<img src="' . $includes_path . 'icon_cool.gif" alt="8-)" class="wp-smiley" /> <img src="' . $includes_path . 'icon_eek.gif" alt="8O" class="wp-smiley" />'
</ins><span class="cx">                   ),
</span><span class="cx">                  array (
</span><span class="cx">                          '8-) :-(',
</span><del>-                               ' <img src="' . $includes_path . 'icon_cool.gif" alt="8-)" class="wp-smiley" />  <img src="' . $includes_path . 'icon_sad.gif" alt=":-(" class="wp-smiley" /> '
</del><ins>+                                '<img src="' . $includes_path . 'icon_cool.gif" alt="8-)" class="wp-smiley" /> <img src="' . $includes_path . 'icon_sad.gif" alt=":-(" class="wp-smiley" />'
</ins><span class="cx">                   ),
</span><span class="cx">                  array (
</span><span class="cx">                          '8-) :twisted:',
</span><del>-                               ' <img src="' . $includes_path . 'icon_cool.gif" alt="8-)" class="wp-smiley" />  <img src="' . $includes_path . 'icon_twisted.gif" alt=":twisted:" class="wp-smiley" /> '
</del><ins>+                                '<img src="' . $includes_path . 'icon_cool.gif" alt="8-)" class="wp-smiley" /> <img src="' . $includes_path . 'icon_twisted.gif" alt=":twisted:" class="wp-smiley" />'
</ins><span class="cx">                   ),
</span><span class="cx">                  array (
</span><span class="cx">                          '8O :twisted: :( :? :(',
</span><del>-                               ' <img src="' . $includes_path . 'icon_eek.gif" alt="8O" class="wp-smiley" />  <img src="' . $includes_path . 'icon_twisted.gif" alt=":twisted:" class="wp-smiley" />  <img src="' . $includes_path . 'icon_sad.gif" alt=":(" class="wp-smiley" />  <img src="' . $includes_path . 'icon_confused.gif" alt=":?" class="wp-smiley" />  <img src="' . $includes_path . 'icon_sad.gif" alt=":(" class="wp-smiley" /> '
</del><ins>+                                '<img src="' . $includes_path . 'icon_eek.gif" alt="8O" class="wp-smiley" /> <img src="' . $includes_path . 'icon_twisted.gif" alt=":twisted:" class="wp-smiley" /> <img src="' . $includes_path . 'icon_sad.gif" alt=":(" class="wp-smiley" /> <img src="' . $includes_path . 'icon_confused.gif" alt=":?" class="wp-smiley" /> <img src="' . $includes_path . 'icon_sad.gif" alt=":(" class="wp-smiley" />'
</ins><span class="cx">                   ),
</span><span class="cx">          );
</span><span class="cx">  }
</span><span class="lines">@@ -205,8 +202,6 @@
</span><span class="cx">   * @dataProvider get_smilies_combinations
</span><span class="cx">   */
</span><span class="cx">  public function test_smilies_combinations( $in_txt, $converted_txt ) {
</span><del>-               global $wpsmiliestrans;
-
</del><span class="cx">           // custom smilies, use_smilies: ON
</span><span class="cx">          update_option( 'use_smilies', 1 );
</span><span class="cx">          smilies_init();
</span><span class="lines">@@ -233,11 +228,11 @@
</span><span class="cx">                  ),
</span><span class="cx">                  array (
</span><span class="cx">                          '8O :) additional text here :)',
</span><del>-                               '8O <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" />  additional text here <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" /> '
</del><ins>+                                '8O <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" /> additional text here <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" />'
</ins><span class="cx">                   ),
</span><span class="cx">                  array (
</span><span class="cx">                          ':) :) :) :)',
</span><del>-                               ' <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" />  <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" />  <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" />  <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" /> '
</del><ins>+                                '<img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" /> <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" /> <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" /> <img src="' . $includes_path . 'icon_smile.gif" alt=":)" class="wp-smiley" />'
</ins><span class="cx">                   ),
</span><span class="cx">          );
</span><span class="cx">  }
</span><span class="lines">@@ -251,11 +246,16 @@
</span><span class="cx">   */
</span><span class="cx">  public function test_single_smilies_in_wpsmiliestrans( $in_txt, $converted_txt ) {
</span><span class="cx">          global $wpsmiliestrans;
</span><del>-               $orig_trans = $wpsmiliestrans; // save original tranlations array
</del><span class="cx"> 
</span><span class="cx">          // standard smilies, use_smilies: ON
</span><span class="cx">          update_option( 'use_smilies', 1 );
</span><span class="cx"> 
</span><ins>+               if ( !isset( $wpsmiliestrans ) ) {
+                       smilies_init();
+               }
+
+               $orig_trans = $wpsmiliestrans; // save original tranlations array
+
</ins><span class="cx">           $wpsmiliestrans = array (
</span><span class="cx">            ':)' => 'icon_smile.gif'
</span><span class="cx">          );
</span><span class="lines">@@ -271,4 +271,55 @@
</span><span class="cx"> 
</span><span class="cx">          $wpsmiliestrans = $orig_trans; // reset original translations array
</span><span class="cx">  }
</span><del>-}
</del><span class="cx">\ No newline at end of file
</span><ins>+
+       /**
+        * 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
+        */
+       function test_spaces_around_smilies() {
+               $nbsp = "\xC2\xA0";
+
+               // standard smilies, use_smilies: ON
+               update_option( 'use_smilies', 1 );
+               smilies_init();
+
+               $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 $out) {
+
+                               // Each output element must appear in the results.
+                               $this->assertContains( $out, $result );
+
+                       }
+               }
+
+               // standard smilies, use_smilies: OFF
+               update_option( 'use_smilies', 0 );
+       }
+}
</ins></span></pre>
</div>
</div>

</body>
</html>