### Question:
BorderArrangement implements Arrangement, Serializable { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof BorderArrangement)) { return false; } BorderArrangement that = (BorderArrangement) obj; if (!ObjectUtils.equal(this.topBlock, that.topBlock)) { return false; } if (!ObjectUtils.equal(this.bottomBlock, that.bottomBlock)) { return false; } if (!ObjectUtils.equal(this.leftBlock, that.leftBlock)) { return false; } if (!ObjectUtils.equal(this.rightBlock, that.rightBlock)) { return false; } if (!ObjectUtils.equal(this.centerBlock, that.centerBlock)) { return false; } return true; } BorderArrangement(); @Override void add(Block block, Object key); @Override Size2D arrange(BlockContainer container, Graphics2D g2,
                          RectangleConstraint constraint); @Override void clear(); @Override boolean equals(Object obj);  }### Answer:
@Test public void testEquals() { BorderArrangement b1 = new BorderArrangement(); BorderArrangement b2 = new BorderArrangement(); assertEquals(b1, b2); assertEquals(b2, b1); b1.add(new EmptyBlock(99.0, 99.0), null); assertFalse(b1.equals(b2)); b2.add(new EmptyBlock(99.0, 99.0), null); assertEquals(b1, b2); b1.add(new EmptyBlock(1.0, 1.0), RectangleEdge.LEFT); assertFalse(b1.equals(b2)); b2.add(new EmptyBlock(1.0, 1.0), RectangleEdge.LEFT); assertEquals(b1, b2); b1.add(new EmptyBlock(2.0, 2.0), RectangleEdge.RIGHT); assertFalse(b1.equals(b2)); b2.add(new EmptyBlock(2.0, 2.0), RectangleEdge.RIGHT); assertEquals(b1, b2); b1.add(new EmptyBlock(3.0, 3.0), RectangleEdge.TOP); assertFalse(b1.equals(b2)); b2.add(new EmptyBlock(3.0, 3.0), RectangleEdge.TOP); assertEquals(b1, b2); b1.add(new EmptyBlock(4.0, 4.0), RectangleEdge.BOTTOM); assertFalse(b1.equals(b2)); b2.add(new EmptyBlock(4.0, 4.0), RectangleEdge.BOTTOM); assertEquals(b1, b2); }