package com.querydsl.sql; import static org.easymock.EasyMock.*; import static org.junit.Assert.assertThat; import java.util.List; import java.util.Map; import org.hamcrest.CoreMatchers; import org.junit.Test; import com.querydsl.core.DefaultQueryMetadata; import com.querydsl.core.QueryMetadata; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Path; import com.querydsl.core.types.SubQueryExpression; import com.querydsl.sql.dml.SQLInsertBatch; import com.querydsl.sql.dml.SQLMergeBatch; import com.querydsl.sql.dml.SQLUpdateBatch; public class SQLListenersTest { @Test public void notifyQuery() { SQLListener listener = createMock(SQLListener.class); SQLListeners listeners = new SQLListeners(); listeners.add(listener); QueryMetadata md = new DefaultQueryMetadata(); listener.notifyQuery(md); replay(listener); listeners.notifyQuery(md); verify(listener); } @Test public void notifyQuery_parent() { SQLListener listener = createMock(SQLListener.class); SQLListeners listeners = new SQLListeners(listener); QueryMetadata md = new DefaultQueryMetadata(); listener.notifyQuery(md); replay(listener); listeners.notifyQuery(md); verify(listener); } @Test public void notifyQuery_detailedListener_start() { SQLListenerContext sqlListenerContext = createMock(SQLListenerContext.class); SQLDetailedListener listenerParent = createMock(SQLDetailedListener.class); SQLDetailedListener listener1 = createMock(SQLDetailedListener.class); SQLDetailedListener listener2 = createMock(SQLDetailedListener.class); listenerParent.start(sqlListenerContext); replay(listenerParent); listener1.start(sqlListenerContext); replay(listener1); listener2.start(sqlListenerContext); replay(listener2); SQLListeners listeners = new SQLListeners(listenerParent); listeners.add(listener1); listeners.add(listener2); listeners.start(sqlListenerContext); verify(listenerParent); verify(listener1); verify(listener2); } @Test public void notifyQuery_detailedListener_contexSetting() { SQLListenerContext sqlListenerContext = new SQLListenerContextImpl(new DefaultQueryMetadata()); SQLDetailedListener listenerParent = new AssertingDetailedListener("keyParent", "valueParent"); SQLDetailedListener listener1 = new AssertingDetailedListener("key1", "value1"); SQLDetailedListener listener2 = new AssertingDetailedListener("key1", "value1"); SQLListeners listeners = new SQLListeners(listenerParent); listeners.add(listener1); listeners.add(listener2); listeners.start(sqlListenerContext); listeners.preRender(sqlListenerContext); listeners.rendered(sqlListenerContext); listeners.prePrepare(sqlListenerContext); listeners.prepared(sqlListenerContext); listeners.preExecute(sqlListenerContext); listeners.preExecute(sqlListenerContext); } static class AssertingDetailedListener implements SQLDetailedListener { private final String key; private final Object value; AssertingDetailedListener(String key, Object value) { this.key = key; this.value = value; } @Override public void start(SQLListenerContext context) { context.setData(key, value); } @Override public void preRender(SQLListenerContext context) { assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); } @Override public void rendered(SQLListenerContext context) { assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); } @Override public void prePrepare(SQLListenerContext context) { assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); } @Override public void prepared(SQLListenerContext context) { assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); } @Override public void preExecute(SQLListenerContext context) { assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); } @Override public void executed(SQLListenerContext context) { assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); } @Override public void exception(SQLListenerContext context) { assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); } @Override public void end(SQLListenerContext context) { assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); } @Override public void notifyQuery(QueryMetadata md) { } @Override public void notifyDelete(RelationalPath<?> entity, QueryMetadata md) { } @Override public void notifyDeletes(RelationalPath<?> entity, List<QueryMetadata> batches) { } @Override public void notifyMerge(RelationalPath<?> entity, QueryMetadata md, List<Path<?>> keys, List<Path<?>> columns, List<Expression<?>> values, SubQueryExpression<?> subQuery) { } @Override public void notifyMerges(RelationalPath<?> entity, QueryMetadata md, List<SQLMergeBatch> batches) { } @Override public void notifyInsert(RelationalPath<?> entity, QueryMetadata md, List<Path<?>> columns, List<Expression<?>> values, SubQueryExpression<?> subQuery) { } @Override public void notifyInserts(RelationalPath<?> entity, QueryMetadata md, List<SQLInsertBatch> batches) { } @Override public void notifyUpdate(RelationalPath<?> entity, QueryMetadata md, Map<Path<?>, Expression<?>> updates) { } @Override public void notifyUpdates(RelationalPath<?> entity, List<SQLUpdateBatch> batches) { } } }