ChangeSet extends Change { @Override public void applyTo(Entry r) { for (Change c : myChanges) { c.applyTo(r); } } ChangeSet(long timestamp, String name, List<Change> changes);  ChangeSet(long timestamp);  ChangeSet(Stream s); void write(Stream s); void setName(String name); @Override String getName(); @Override long getTimestamp(); void addChange(Change c); @Override List<Change> getChanges(); @Override void applyTo(Entry r); @Override boolean revertOnUpTo(Entry r, Change upTo, boolean revertTargetChange); @Override boolean affectsSameAs(List<Change> cc); @Override boolean affectsOnlyInside(Entry e); @Override boolean isCreationalFor(Entry e); @Override List<Content> getContentsToPurge(); @Override boolean isFileContentChange(); @Override void accept(ChangeVisitor v);  }
@Test public void testApplyingIsFIFO() { cs.applyTo(r); assertEquals(new Object[]{1, 2, 3}, log); }