package org.mongodb.morphia.query; import com.mongodb.DBCollection; import com.mongodb.DBObject; import org.junit.Assert; import org.junit.Test; import org.mongodb.morphia.Datastore; import org.mongodb.morphia.TestBase; import java.util.concurrent.atomic.AtomicInteger; public class QueryFactoryTest extends TestBase { @Test public void changeQueryFactory() { final QueryFactory current = getDs().getQueryFactory(); final QueryFactory custom = new DefaultQueryFactory(); getDs().setQueryFactory(custom); Assert.assertNotSame(current, getDs().getQueryFactory()); Assert.assertSame(custom, getDs().getQueryFactory()); } @Test public void createQuery() { final AtomicInteger counter = new AtomicInteger(); final QueryFactory queryFactory = new DefaultQueryFactory() { @Override public <T> Query<T> createQuery(final Datastore datastore, final DBCollection collection, final Class<T> type, final DBObject query) { counter.incrementAndGet(); return super.createQuery(datastore, collection, type, query); } }; getDs().setQueryFactory(queryFactory); final Query<String> query = getDs().find(String.class); final Query<String> other = getDs().find(String.class); Assert.assertNotSame(other, query); Assert.assertEquals(2, counter.get()); } }