1/*
2 * Copyright (C) 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *       http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package androidx.core.database
18
19import android.database.Cursor
20import android.database.MatrixCursor
21import org.junit.Assert.assertArrayEquals
22import org.junit.Assert.assertEquals
23import org.junit.Assert.assertNull
24import org.junit.Test
25
26class CursorTest {
27    @Test fun blobByName() {
28        val cursor = scalarCursor(byteArrayOf(0x01))
29        val blob = cursor.getBlob("data")
30        assertArrayEquals(byteArrayOf(0x01), blob)
31    }
32
33    @Test fun doubleByName() {
34        val cursor = scalarCursor(1.5)
35        val double = cursor.getDouble("data")
36        assertEquals(1.5, double, 0.0)
37    }
38
39    @Test fun floatByName() {
40        val cursor = scalarCursor(1.5f)
41        val float = cursor.getFloat("data")
42        assertEquals(1.5f, float, 0f)
43    }
44
45    @Test fun intByName() {
46        val cursor = scalarCursor(1)
47        val int = cursor.getInt("data")
48        assertEquals(1, int)
49    }
50
51    @Test fun longByName() {
52        val cursor = scalarCursor(1L)
53        val long = cursor.getLong("data")
54        assertEquals(1L, long)
55    }
56
57    @Test fun shortByName() {
58        val cursor = scalarCursor(1.toShort())
59        val short = cursor.getShort("data")
60        assertEquals(1.toShort(), short)
61    }
62
63    @Test fun stringByName() {
64        val cursor = scalarCursor("hey")
65        val string = cursor.getString("data")
66        assertEquals("hey", string)
67    }
68
69    @Test fun blobOrNullByIndex() {
70        val cursor = scalarCursor(null)
71        val blob = cursor.getBlobOrNull(0)
72        assertNull(blob)
73    }
74
75    @Test fun doubleOrNullByIndex() {
76        val cursor = scalarCursor(null)
77        val double = cursor.getDoubleOrNull(0)
78        assertNull(double)
79    }
80
81    @Test fun floatOrNullByIndex() {
82        val cursor = scalarCursor(null)
83        val float = cursor.getFloatOrNull(0)
84        assertNull(float)
85    }
86
87    @Test fun intOrNullByIndex() {
88        val cursor = scalarCursor(null)
89        val int = cursor.getIntOrNull(0)
90        assertNull(int)
91    }
92
93    @Test fun longOrNullByIndex() {
94        val cursor = scalarCursor(null)
95        val long = cursor.getLongOrNull(0)
96        assertNull(long)
97    }
98
99    @Test fun shortOrNullByIndex() {
100        val cursor = scalarCursor(null)
101        val short = cursor.getShortOrNull(0)
102        assertNull(short)
103    }
104
105    @Test fun stringOrNullByIndex() {
106        val cursor = scalarCursor(null)
107        val string = cursor.getStringOrNull(0)
108        assertNull(string)
109    }
110
111    @Test fun blobOrNullByName() {
112        val cursor = scalarCursor(null)
113        val blob = cursor.getBlobOrNull("data")
114        assertNull(blob)
115    }
116
117    @Test fun doubleOrNullByName() {
118        val cursor = scalarCursor(null)
119        val double = cursor.getDoubleOrNull("data")
120        assertNull(double)
121    }
122
123    @Test fun floatOrNullByName() {
124        val cursor = scalarCursor(null)
125        val float = cursor.getFloatOrNull("data")
126        assertNull(float)
127    }
128
129    @Test fun intOrNullByName() {
130        val cursor = scalarCursor(null)
131        val int = cursor.getIntOrNull("data")
132        assertNull(int)
133    }
134
135    @Test fun longOrNullByName() {
136        val cursor = scalarCursor(null)
137        val long = cursor.getLongOrNull("data")
138        assertNull(long)
139    }
140
141    @Test fun shortOrNullByName() {
142        val cursor = scalarCursor(null)
143        val short = cursor.getShortOrNull("data")
144        assertNull(short)
145    }
146
147    @Test fun stringOrNullByName() {
148        val cursor = scalarCursor(null)
149        val string = cursor.getStringOrNull("data")
150        assertNull(string)
151    }
152
153    private fun scalarCursor(item: Any?): Cursor = MatrixCursor(arrayOf("data")).apply {
154        addRow(arrayOf(item))
155        moveToFirst() // Prepare for consumers to read.
156    }
157}
158