### Question:
EventFilterChain implements EventSink { @Override public synchronized void sink(BusData data) throws IOException { Ensure.not_null(data); first().sink(data); } EventFilterChain(EventSink sink); synchronized EventSink chain_sink(); synchronized List<EventFilter> filters(); synchronized void add_filter(EventFilter f); synchronized void remove_filter(EventFilter f); synchronized void clear(); @Override synchronized void sink(BusData data); synchronized EventFilterChainInfo info();  }### Answer:
@Test public void process_empty_event_chain() throws Exception { BusData d = bus_data(); m_chain.sink(d); assertEquals(1, m_sink.m_data.size()); assertSame(d, m_sink.m_data.get(0)); }
@Test(expected = AssertionError.class) public void processing_null() throws Exception { m_chain.sink(null); }