You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Henri Yandell (JIRA)" <ji...@apache.org> on 2011/01/01 20:31:46 UTC
[jira] Updated: (LANG-647) ToStringBuilder output makes it
difficult to distinguich between an empty String array and an array of one
empty String
[ https://issues.apache.org/jira/browse/LANG-647?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Henri Yandell updated LANG-647:
-------------------------------
Fix Version/s: 3.0
Remaining Estimate: (was: 0.17h)
Original Estimate: (was: 0.17h)
Potential for functionality change; needs to be decided on before 3.0 released.
> 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
>
>
> 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.