Application of patch from Bugzilla: #33574, by Travis Stevens. Balances a call to appendFieldStart with an appendFieldEnd after appending the field. Test also included.

git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/lang/trunk@156007 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Henri Yandell 2005-03-03 05:00:44 +00:00
parent 634f0e9762
commit 308009b9a1
2 changed files with 33 additions and 0 deletions

View File

@ -631,6 +631,7 @@ public class ReflectionToStringBuilder extends ToStringBuilder {
// append a simple Object.toString style string.
this.getStyle().appendFieldStart(this.getStringBuffer(), fieldName);
this.appendAsObjectToString(fieldValue);
this.getStyle().appendFieldEnd(this.getStringBuffer(), fieldName);
// The recursion out of
// builder.append(fieldName, fieldValue);
// below will append the field

View File

@ -487,6 +487,24 @@ public class ToStringBuilderTest extends TestCase {
}
}
private static class SelfInstanceTwoVarsReflectionTestFixture {
private SelfInstanceTwoVarsReflectionTestFixture typeIsSelf;
private String otherType = "The Other Type";
public SelfInstanceTwoVarsReflectionTestFixture() {
this.typeIsSelf = this;
}
public String getOtherType(){
return this.otherType;
}
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
/**
* Test an Object pointing to itself, the simplest test.
*
@ -511,6 +529,20 @@ public class ToStringBuilderTest extends TestCase {
assertEquals(this.toBaseString(test) + "[typeIsSelf=" + this.toBaseString(test) + "]", test.toString());
this.validateEmptyReflectionRegistry();
}
/**
* Test a class that defines an ivar pointing to itself. This test was
* created to show that handling cyclical object resulted in a missing endFieldSeparator call.
*
* @throws Exception
*/
public void testSelfInstanceTwoVarsReflectionObjectCycle() throws Exception {
SelfInstanceTwoVarsReflectionTestFixture test = new SelfInstanceTwoVarsReflectionTestFixture();
assertTrue(ReflectionToStringBuilder.getRegistry().isEmpty());
assertEquals(this.toBaseString(test) + "[typeIsSelf=" + this.toBaseString(test) + ",otherType=" + test.getOtherType().toString() + "]", test.toString());
this.validateEmptyReflectionRegistry();
}
/**
* Test Objects pointing to each other.