[ 
https://issues.apache.org/jira/browse/LANG-647?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12976437#action_12976437
 ] 

Henri Yandell commented on LANG-647:
------------------------------------

Raises the question of whether " should be wrapped around any String.

> ToStringBuilder output makes it difficult to distinguich between an empty 
> String array and an array of one empty String
> -----------------------------------------------------------------------------------------------------------------------
>
>                 Key: LANG-647
>                 URL: https://issues.apache.org/jira/browse/LANG-647
>             Project: Commons Lang
>          Issue Type: Improvement
>          Components: lang.builder.*
>    Affects Versions: 2.5
>            Reporter: pascal jacob
>            Priority: Minor
>             Fix For: 3.0
>
>   Original Estimate: 0.17h
>  Remaining Estimate: 0.17h
>
> ToStringBuilder output is the same for an empty array (i.e. new String[0]) 
> and for an array containing only a single empty string (i.e. new String[] { 
> "" } ).  This makes it difficult in some case to see the true nature of 
> arrays.
> For example I once had a JUnit test case that print the following trace 
> failure:
> java.lang.AssertionError: 
> Expected: <InputViewHelper[a={},b={},c={msg},d={time}>
>      got: <InputViewHelper[a={},b={},c={msg},d={time}>
> Apparently the two objects look like the same! But they are not: one had an 
> empty array; the other had an array with only a single empty string. With a 
> customized ToStringStyle the difference became apparent:
> Expected: <InputViewHelper[a={},b={},c={msg},d={time}>
>      got: <InputViewHelper[a={""},b={},c={msg},d={time}>
> The fix is simple, change the method: protected void 
> appendDetail(StringBuffer buffer, String fieldName, Object value) to:
>                       protected void appendDetail(StringBuffer buffer, String 
> fieldName, Object value) {
>                               if((value instanceof String) && 
> ((String)value).isEmpty()) {
>                                       buffer.append("\"\"");
>                               }
>                               else {
>                                       super.appendDetail(buffer, fieldName, 
> value);
>                               }
>                       }
>  
> here is the test case that revealed the problem:
>       public void testToStringBuilder() {
>               ToStringBuilder builder1 = new ToStringBuilder("Builder1");
>               builder1.append("empty array", new String[0]);
>               builder1.append("array of one empty string", new String[] { "" 
> });
>               builder1.append("array of two empty strings", new String[] { 
> "", "" });
>               String builder1Result = builder1.toString();
>               System.out.println(builder1Result);
>               // -----
>               ToStringBuilder builder2 = new ToStringBuilder("Builder2", new 
> ToStringStyle() {
>                       @Override
>                       protected void appendDetail(StringBuffer buffer, String 
> fieldName, Object value) {
>                               if((value instanceof String) && 
> ((String)value).isEmpty()) {
>                                       buffer.append("\"\"");
>                               }
>                               else {
>                                       super.appendDetail(buffer, fieldName, 
> value);
>                               }
>                       }
>               });
>               builder2.append("empty array", new String[0]);
>               builder2.append("array of one empty string", new String[] { "" 
> });
>               builder2.append("array of two empty strings", new String[] { 
> "", "" });
>               String builder2Result = builder2.toString();
>               System.out.println(builder2Result);
>       }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to