### Question:
PlotRenderingInfo implements Cloneable, Serializable { @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof PlotRenderingInfo)) { return false; } PlotRenderingInfo that = (PlotRenderingInfo) obj; if (!ObjectUtilities.equal(this.dataArea, that.dataArea)) { return false; } if (!ObjectUtilities.equal(this.plotArea, that.plotArea)) { return false; } if (!ObjectUtilities.equal(this.subplotInfo, that.subplotInfo)) { return false; } return true; } PlotRenderingInfo(ChartRenderingInfo owner); ChartRenderingInfo getOwner(); Rectangle2D getPlotArea(); void setPlotArea(Rectangle2D area); Rectangle2D getDataArea(); void setDataArea(Rectangle2D area); int getSubplotCount(); void addSubplotInfo(PlotRenderingInfo info); PlotRenderingInfo getSubplotInfo(int index); int getSubplotIndex(Point2D source); @Override boolean equals(Object obj); @Override Object clone();  }### Answer:
@Test public void testEquals() { PlotRenderingInfo p1 = new PlotRenderingInfo(new ChartRenderingInfo()); PlotRenderingInfo p2 = new PlotRenderingInfo(new ChartRenderingInfo()); assertEquals(p1, p2); assertEquals(p2, p1); p1.setPlotArea(new Rectangle(2, 3, 4, 5)); assertFalse(p1.equals(p2)); p2.setPlotArea(new Rectangle(2, 3, 4, 5)); assertEquals(p1, p2); p1.setDataArea(new Rectangle(2, 4, 6, 8)); assertFalse(p1.equals(p2)); p2.setDataArea(new Rectangle(2, 4, 6, 8)); assertEquals(p1, p2); p1.addSubplotInfo(new PlotRenderingInfo(null)); assertFalse(p1.equals(p2)); p2.addSubplotInfo(new PlotRenderingInfo(null)); assertEquals(p1, p2); p1.getSubplotInfo(0).setDataArea(new Rectangle(1, 2, 3, 4)); assertFalse(p1.equals(p2)); p2.getSubplotInfo(0).setDataArea(new Rectangle(1, 2, 3, 4)); assertEquals(p1, p2); }