Repository: groovy
Updated Branches:
  refs/heads/master 26c3fbd80 -> 35a3df143


GROOVY-8741: Add tests and implementation(closes #782)


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/35a3df14
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/35a3df14
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/35a3df14

Branch: refs/heads/master
Commit: 35a3df1436b76f315a925f7d30479c8d092805c0
Parents: 26c3fbd
Author: Mikko Värri <[email protected]>
Authored: Fri Aug 10 19:37:47 2018 +0300
Committer: Daniel Sun <[email protected]>
Committed: Sat Aug 18 13:47:47 2018 +0800

----------------------------------------------------------------------
 .../typehandling/DefaultTypeTransformation.java | 10 ++----
 .../DefaultTypeTransformationTest.groovy        | 36 ++++++++++++++++++++
 2 files changed, 39 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/35a3df14/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
 
b/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
index 14cbecc..f487ad0 100644
--- 
a/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
+++ 
b/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
@@ -581,6 +581,8 @@ public class DefaultTypeTransformation {
                 return ((String) left).compareTo(right.toString());
             } else if (left instanceof GString && right instanceof String) {
                 return ((GString) left).compareTo(right);
+            } else if (left instanceof GString && right instanceof Character) {
+                return ((GString) left).compareTo(right);
             }
             if (!equalityCheckOnly || 
left.getClass().isAssignableFrom(right.getClass())
                     || (right.getClass() != Object.class && 
right.getClass().isAssignableFrom(left.getClass())) //GROOVY-4046
@@ -673,13 +675,7 @@ public class DefaultTypeTransformation {
      * @return true if the given value is a valid character string (i.e. has 
length of 1)
      */
     private static boolean isValidCharacterString(Object value) {
-        if (value instanceof String) {
-            String s = (String) value;
-            if (s.length() == 1) {
-                return true;
-            }
-        }
-        return false;
+        return (value instanceof String || value instanceof GString) && 
value.toString().length() == 1;
     }
 
     @Deprecated

http://git-wip-us.apache.org/repos/asf/groovy/blob/35a3df14/src/test/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformationTest.groovy
----------------------------------------------------------------------
diff --git 
a/src/test/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformationTest.groovy
 
b/src/test/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformationTest.groovy
index 11bed2c..5946830 100644
--- 
a/src/test/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformationTest.groovy
+++ 
b/src/test/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformationTest.groovy
@@ -155,4 +155,40 @@ class DefaultTypeTransformationTest extends GroovyTestCase 
{
             throw e
         }
     }
+
+    void testNumberEqualsCharacterGString() {
+        final String S = 'A'
+        final GString G = "$S"
+        final Number N = 65
+
+        assert N == S && S == G
+        assert N      ==      G
+    }
+
+    void testCharacterEqualsCharacterGString() {
+        final String S = 'A'
+        final Character C = 'A'
+        final GString G = "$S"
+
+        assert C == S && S == G
+        assert C      ==      G
+    }
+
+    void testCharacterGStringsEqualsCharacter() {
+        final String S = 'A'
+        final Character C = 'A'
+        final GString G = "$S"
+
+        assert S == C && G == S
+        assert      G == C
+    }
+
+    void testCharacterGStringEqualsNumber() {
+        final String S = 'A'
+        final GString G = "$S"
+        final Number N = 65
+
+        assert S == N && G == S
+        assert      G == N
+    }
 }

Reply via email to