Skip to content

Commit

Permalink
GROOVY-7853: o.c.g.r.t.DefaultTypeTransformation does not apply the r…
Browse files Browse the repository at this point in the history
…ight toString on primitve arrays when transforming to String
  • Loading branch information
paulk-asert committed Jun 3, 2016
1 parent b57f46d commit 5c91415
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

import groovy.lang.GString;

import java.util.Arrays;

/**
* Class providing various short paths for type conversions. Read the comments
* to what conditions have to be met to get valid results!
Expand All @@ -41,7 +43,15 @@ public static Class castToClass(Object object) {

public static String castToString(Object object) {
if (object==null) return null;
if (object instanceof Class) return (String) object;
if (object instanceof boolean[]) return Arrays.toString((boolean[])object);
if (object instanceof byte[]) return Arrays.toString((byte[])object);
if (object instanceof char[]) return new String((char[])object);
if (object instanceof double[]) return Arrays.toString((double[])object);
if (object instanceof float[]) return Arrays.toString((float[])object);
if (object instanceof int[]) return Arrays.toString((int[])object);
if (object instanceof long[]) return Arrays.toString((long[])object);
if (object instanceof short[]) return Arrays.toString((short[])object);
if (object instanceof Object[]) return Arrays.toString((Object[])object);
return object.toString();
}

Expand Down
44 changes: 44 additions & 0 deletions src/test/org/codehaus/groovy/classgen/CastToStringTest.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.codehaus.groovy.classgen

class CastToStringTest extends GroovyShellTestCase {
void testNormalAndPrimitiveArrayHandling_Groovy7853() {
assertScript '''
byte[] bytes = "hello".bytes
char[] chars = "hello".chars
boolean[] flags = [true, false]
long[] nums = [34L, 45L]
String[] pets = ['cat', 'dog']
String convert(byte[] data) { data }
String convert(char[] data) { data }
String convert(boolean[] data) { data }
String convert(long[] data) { data }
String convert(String[] data) { data }
assert bytes.toString() == convert(bytes)
assert chars.toString() == convert(chars)
assert flags.toString() == convert(flags)
assert nums.toString() == convert(nums)
assert pets.toString() == convert(pets)
'''
}
}

0 comments on commit 5c91415

Please sign in to comment.