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 + } }
