Author: johnh
Date: Sat Feb 28 00:27:22 2009
New Revision: 748762

URL: http://svn.apache.org/viewvc?rev=748762&view=rev
Log:
Fix for hangman substitution accommodating an odd number of underbars preceding 
a variable expansion.

Closes issue SHINDIG-956.


Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/variables/Substitutions.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/variables/SubstitutionsTest.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/variables/Substitutions.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/variables/Substitutions.java?rev=748762&r1=748761&r2=748762&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/variables/Substitutions.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/variables/Substitutions.java
 Sat Feb 28 00:27:22 2009
@@ -128,9 +128,12 @@
       }
 
       if (replacement == null) {
-        // Keep it.
-        output.append(pattern);
-        lastPosition = next;
+        // Just append the first underbar of the __ prefix. The substitution
+        // selection algorithm will move on to the next underbar, which itself
+        // might be a __ prefix suitable for substitution, ensuring proper
+        // accommodation of cases such as ___MODULE_ID__.
+        output.append('_');
+        lastPosition = i + 1;
       } else {
         lastPosition = next + 2;
         if (isMessage && !isNested) {

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/variables/SubstitutionsTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/variables/SubstitutionsTest.java?rev=748762&r1=748761&r2=748762&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/variables/SubstitutionsTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/variables/SubstitutionsTest.java
 Sat Feb 28 00:27:22 2009
@@ -91,6 +91,24 @@
     assertEquals("Hello__________ten__________World____", 
subst.substituteString(msg));
   }
 
+  public void testMessageId() throws Exception {
+    String msg = "Hello, __MODULE_ID__!";
+    subst.addSubstitution(Type.MODULE, "ID", "123");
+    assertEquals("Hello, 123!", subst.substituteString(msg));
+  }
+
+  public void testOddNumberOfPrecedingUnderscores() throws Exception {
+    String msg = "<div id='div___MODULE_ID__'/>";
+    subst.addSubstitution(Type.MODULE, "ID", "123");
+    assertEquals("<div id='div_123'/>", subst.substituteString(msg));
+  }
+
+  public void testOddUnderscoresWithInvalidSubstFollowedByValidSubst() throws 
Exception {
+    String msg = "<div id='div___HI_THERE__MODULE_ID___'/>";
+    subst.addSubstitution(Type.MODULE, "ID", "123");
+    assertEquals("<div id='div___HI_THERE123_'/>", 
subst.substituteString(msg));
+  }
+
   public void loadTest() throws Exception {
     String msg
         = "Random text and __UP_hello__, amongst other words __MSG_world__ 
stuff __weeeeee";


Reply via email to