12c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar/* 22c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * Copyright (C) 2017 The Android Open Source Project 32c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * 42c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 52c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * you may not use this file except in compliance with the License. 62c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * You may obtain a copy of the License at 72c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * 82c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 92c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * 102c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * Unless required by applicable law or agreed to in writing, software 112c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 122c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * See the License for the specific language governing permissions and 142c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar * limitations under the License. 152c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar */ 162c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar 17bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverettepackage androidx.room.integration.testapp.test; 182c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar 19540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescuimport static org.hamcrest.CoreMatchers.instanceOf; 202c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyarimport static org.hamcrest.CoreMatchers.is; 212c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyarimport static org.hamcrest.CoreMatchers.notNullValue; 222c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyarimport static org.hamcrest.MatcherAssert.assertThat; 23540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescuimport static org.junit.Assert.assertNotNull; 242c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar 25540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescuimport android.database.sqlite.SQLiteConstraintException; 26540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescuimport android.support.test.InstrumentationRegistry; 27540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescuimport android.support.test.filters.SmallTest; 28540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescuimport android.support.test.runner.AndroidJUnit4; 292c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar 30bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.room.Room; 31bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.room.integration.testapp.PKeyTestDatabase; 32bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.room.integration.testapp.vo.IntAutoIncPKeyEntity; 33bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.room.integration.testapp.vo.IntegerAutoIncPKeyEntity; 34bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.room.integration.testapp.vo.IntegerPKeyEntity; 35bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.room.integration.testapp.vo.ObjectPKeyEntity; 36bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverette 372c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyarimport org.junit.Before; 382c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyarimport org.junit.Test; 392c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyarimport org.junit.runner.RunWith; 402c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar 41f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyarimport java.util.Arrays; 42a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescuimport java.util.List; 43f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar 442c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar@RunWith(AndroidJUnit4.class) 452c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar@SmallTest 462c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyarpublic class PrimaryKeyTest { 472c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar private PKeyTestDatabase mDatabase; 48540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu 492c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar @Before 502c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar public void setup() { 512c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar mDatabase = Room.inMemoryDatabaseBuilder(InstrumentationRegistry.getTargetContext(), 522c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar PKeyTestDatabase.class).build(); 532c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar } 542c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar 552c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar @Test 562c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar public void integerTest() { 572c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar IntegerAutoIncPKeyEntity entity = new IntegerAutoIncPKeyEntity(); 582c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar entity.data = "foo"; 59a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu mDatabase.integerAutoIncPKeyDao().insertMe(entity); 60a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu IntegerAutoIncPKeyEntity loaded = mDatabase.integerAutoIncPKeyDao().getMe(1); 612c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar assertThat(loaded, notNullValue()); 622c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar assertThat(loaded.data, is(entity.data)); 632c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar } 642c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar 652c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar @Test 662c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar public void dontOverrideNullable0() { 672c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar IntegerAutoIncPKeyEntity entity = new IntegerAutoIncPKeyEntity(); 682c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar entity.pKey = 0; 692c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar entity.data = "foo"; 70a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu mDatabase.integerAutoIncPKeyDao().insertMe(entity); 71a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu IntegerAutoIncPKeyEntity loaded = mDatabase.integerAutoIncPKeyDao().getMe(0); 722c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar assertThat(loaded, notNullValue()); 732c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar assertThat(loaded.data, is(entity.data)); 742c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar } 752c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar 762c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar @Test 772c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar public void intTest() { 782c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar IntAutoIncPKeyEntity entity = new IntAutoIncPKeyEntity(); 792c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar entity.data = "foo"; 802c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar mDatabase.intPKeyDao().insertMe(entity); 812c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar IntAutoIncPKeyEntity loaded = mDatabase.intPKeyDao().getMe(1); 822c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar assertThat(loaded, notNullValue()); 832c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar assertThat(loaded.data, is(entity.data)); 842c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar } 85f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar 86f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar @Test 87f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar public void getInsertedId() { 88f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar IntAutoIncPKeyEntity entity = new IntAutoIncPKeyEntity(); 89f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar entity.data = "foo"; 90f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar final long id = mDatabase.intPKeyDao().insertAndGetId(entity); 91f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar assertThat(mDatabase.intPKeyDao().getMe((int) id).data, is("foo")); 92f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar } 93f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar 94f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar @Test 95f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar public void getInsertedIds() { 96f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar IntAutoIncPKeyEntity entity = new IntAutoIncPKeyEntity(); 97f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar entity.data = "foo"; 98f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar IntAutoIncPKeyEntity entity2 = new IntAutoIncPKeyEntity(); 99f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar entity2.data = "foo2"; 100f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar final long[] ids = mDatabase.intPKeyDao().insertAndGetIds(entity, entity2); 101f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar assertThat(mDatabase.intPKeyDao().loadDataById(ids), is(Arrays.asList("foo", "foo2"))); 102f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar } 103f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar 104f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar @Test 105f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar public void getInsertedIdFromInteger() { 106f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar IntegerAutoIncPKeyEntity entity = new IntegerAutoIncPKeyEntity(); 107f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar entity.data = "foo"; 108a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu final long id = mDatabase.integerAutoIncPKeyDao().insertAndGetId(entity); 109a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu assertThat(mDatabase.integerAutoIncPKeyDao().getMe((int) id).data, is("foo")); 110f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar } 111f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar 112f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar @Test 113f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar public void getInsertedIdsFromInteger() { 114f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar IntegerAutoIncPKeyEntity entity = new IntegerAutoIncPKeyEntity(); 115f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar entity.data = "foo"; 116f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar IntegerAutoIncPKeyEntity entity2 = new IntegerAutoIncPKeyEntity(); 117f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar entity2.data = "foo2"; 118a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu final long[] ids = mDatabase.integerAutoIncPKeyDao().insertAndGetIds(entity, entity2); 119a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu assertThat(mDatabase.integerAutoIncPKeyDao().loadDataById(ids), 120a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu is(Arrays.asList("foo", "foo2"))); 121f5f2cf6b9ed63915448e81551e4b7bb72a26030eYigit Boyar } 122540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu 123540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu @Test 124540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu public void insertNullPrimaryKey() throws Exception { 125540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu ObjectPKeyEntity o1 = new ObjectPKeyEntity(null, "1"); 126540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu 127540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu Throwable throwable = null; 128540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu try { 129540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu mDatabase.objectPKeyDao().insertMe(o1); 130540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu } catch (Throwable t) { 131540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu throwable = t; 132540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu } 133540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu assertNotNull("Was expecting an exception", throwable); 134540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu assertThat(throwable, instanceOf(SQLiteConstraintException.class)); 135540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu } 136a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu 137a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu @Test 138a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu public void insertNullPrimaryKeyForInteger() throws Exception { 139a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu IntegerPKeyEntity entity = new IntegerPKeyEntity(); 140a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu entity.data = "data"; 141a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu mDatabase.integerPKeyDao().insertMe(entity); 142a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu 143a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu List<IntegerPKeyEntity> list = mDatabase.integerPKeyDao().loadAll(); 144a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu assertThat(list.size(), is(1)); 145a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu assertThat(list.get(0).data, is("data")); 146a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu assertNotNull(list.get(0).pKey); 147a1be0035ff9cb46339f02db942c990e44eab7075Florina Muntenescu } 1482c6462f129bf43965ed8b054b026f6a28fe6fd8fYigit Boyar} 149