package org.greenrobot.greendao.unittest;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import java.util.concurrent.CountDownLatch;
import org.greenrobot.greendao.database.Database;
import org.greenrobot.greendao.query.Query;
import org.greenrobot.greendao.daotest.dummyapp.BuildConfig;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 16)
public class MinimalEntityTest {
private DaoSession daoSession;
private MinimalEntityDao minimalEntityDao;
@Before
public void setUp() {
DaoMaster.DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(RuntimeEnvironment.application, null);
Database db = openHelper.getWritableDb();
daoSession = new DaoMaster(db).newSession();
minimalEntityDao = daoSession.getMinimalEntityDao();
}
@Test
public void testBasics() {
MinimalEntity entity = new MinimalEntity();
daoSession.insert(entity);
assertNotNull(entity.getId());
assertNotNull(minimalEntityDao.load(entity.getId()));
assertEquals(1, minimalEntityDao.count());
assertEquals(1, daoSession.loadAll(MinimalEntity.class).size());
daoSession.update(entity);
daoSession.delete(entity);
assertNull(minimalEntityDao.load(entity.getId()));
}
@Test
// Testing the work around for Process.myTid() being always 0 in Robolectric
public void testQueryForCurrentThread() throws InterruptedException {
final CountDownLatch latch = new CountDownLatch(1);
final Query<MinimalEntity>[] queryHolder = new Query[1];
new Thread() {
@Override
public void run() {
try {
queryHolder[0] = minimalEntityDao.queryBuilder().build();
queryHolder[0].list();
} finally {
latch.countDown();
}
}
}.start();
latch.await();
Query<MinimalEntity> query = queryHolder[0].forCurrentThread();
query.list();
}
}