12e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton/*
22e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton * Copyright (C) 2018 The Android Open Source Project
32e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton *
42e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton * Licensed under the Apache License, Version 2.0 (the "License");
52e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton * you may not use this file except in compliance with the License.
62e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton * You may obtain a copy of the License at
72e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton *
82e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton *       http://www.apache.org/licenses/LICENSE-2.0
92e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton *
102e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton * Unless required by applicable law or agreed to in writing, software
112e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton * distributed under the License is distributed on an "AS IS" BASIS,
122e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton * See the License for the specific language governing permissions and
142e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton * limitations under the License.
152e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton */
162e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
179c80550cbbe357a89e2abeeb9c7769fcaefc3a65Jake Whartonpackage androidx.core.database
182e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
192e66db433ad3a5e69ae95b606158049b39e082ccJake Whartonimport android.database.Cursor
202e66db433ad3a5e69ae95b606158049b39e082ccJake Whartonimport android.database.MatrixCursor
212e66db433ad3a5e69ae95b606158049b39e082ccJake Whartonimport org.junit.Assert.assertArrayEquals
222e66db433ad3a5e69ae95b606158049b39e082ccJake Whartonimport org.junit.Assert.assertEquals
232e66db433ad3a5e69ae95b606158049b39e082ccJake Whartonimport org.junit.Assert.assertNull
242e66db433ad3a5e69ae95b606158049b39e082ccJake Whartonimport org.junit.Test
252e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
262e66db433ad3a5e69ae95b606158049b39e082ccJake Whartonclass CursorTest {
272e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun blobByName() {
282e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(byteArrayOf(0x01))
292e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val blob = cursor.getBlob("data")
302e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertArrayEquals(byteArrayOf(0x01), blob)
312e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
322e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
332e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun doubleByName() {
342e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(1.5)
352e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val double = cursor.getDouble("data")
362e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertEquals(1.5, double, 0.0)
372e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
382e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
392e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun floatByName() {
402e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(1.5f)
412e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val float = cursor.getFloat("data")
422e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertEquals(1.5f, float, 0f)
432e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
442e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
452e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun intByName() {
462e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(1)
472e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val int = cursor.getInt("data")
482e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertEquals(1, int)
492e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
502e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
512e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun longByName() {
522e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(1L)
532e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val long = cursor.getLong("data")
542e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertEquals(1L, long)
552e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
562e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
572e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun shortByName() {
582e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(1.toShort())
592e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val short = cursor.getShort("data")
602e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertEquals(1.toShort(), short)
612e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
622e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
632e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun stringByName() {
642e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor("hey")
652e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val string = cursor.getString("data")
662e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertEquals("hey", string)
672e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
682e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
692e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun blobOrNullByIndex() {
702e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
712e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val blob = cursor.getBlobOrNull(0)
722e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(blob)
732e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
742e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
752e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun doubleOrNullByIndex() {
762e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
772e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val double = cursor.getDoubleOrNull(0)
782e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(double)
792e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
802e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
812e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun floatOrNullByIndex() {
822e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
832e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val float = cursor.getFloatOrNull(0)
842e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(float)
852e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
862e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
872e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun intOrNullByIndex() {
882e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
892e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val int = cursor.getIntOrNull(0)
902e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(int)
912e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
922e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
932e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun longOrNullByIndex() {
942e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
952e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val long = cursor.getLongOrNull(0)
962e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(long)
972e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
982e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
992e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun shortOrNullByIndex() {
1002e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
1012e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val short = cursor.getShortOrNull(0)
1022e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(short)
1032e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
1042e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
1052e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun stringOrNullByIndex() {
1062e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
1072e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val string = cursor.getStringOrNull(0)
1082e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(string)
1092e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
1102e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
1112e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun blobOrNullByName() {
1122e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
1132e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val blob = cursor.getBlobOrNull("data")
1142e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(blob)
1152e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
1162e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
1172e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun doubleOrNullByName() {
1182e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
1192e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val double = cursor.getDoubleOrNull("data")
1202e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(double)
1212e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
1222e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
1232e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun floatOrNullByName() {
1242e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
1252e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val float = cursor.getFloatOrNull("data")
1262e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(float)
1272e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
1282e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
1292e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun intOrNullByName() {
1302e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
1312e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val int = cursor.getIntOrNull("data")
1322e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(int)
1332e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
1342e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
1352e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun longOrNullByName() {
1362e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
1372e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val long = cursor.getLongOrNull("data")
1382e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(long)
1392e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
1402e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
1412e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun shortOrNullByName() {
1422e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
1432e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val short = cursor.getShortOrNull("data")
1442e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(short)
1452e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
1462e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
1472e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    @Test fun stringOrNullByName() {
1482e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val cursor = scalarCursor(null)
1492e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        val string = cursor.getStringOrNull("data")
1502e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        assertNull(string)
1512e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
1522e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton
1532e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    private fun scalarCursor(item: Any?): Cursor = MatrixCursor(arrayOf("data")).apply {
1542e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        addRow(arrayOf(item))
1552e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton        moveToFirst() // Prepare for consumers to read.
1562e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton    }
1572e66db433ad3a5e69ae95b606158049b39e082ccJake Wharton}
158