1package com.xtremelabs.robolectric.util;
2
3import android.content.ContentValues;
4import android.database.sqlite.SQLiteDatabase;
5import com.xtremelabs.robolectric.WithTestDefaultsRunner;
6import org.junit.Before;
7import org.junit.Test;
8import org.junit.runner.RunWith;
9
10import static com.xtremelabs.robolectric.util.SQLite.*;
11import static org.hamcrest.CoreMatchers.equalTo;
12import static org.junit.Assert.assertThat;
13
14@RunWith(WithTestDefaultsRunner.class)
15public class SQLite_Test {
16    ContentValues values;
17    @Before
18    public void setUp() throws Exception {
19        String byteString = "byte_string";
20        byte[] byteData = byteString.getBytes();
21
22        values = new ContentValues();
23        values.put("name", "Chuck");
24        values.put("int_value", 33);
25        values.put("float_value", (float) 1.5);
26        values.put("byte_data", byteData);
27    }
28
29    @Test
30    public void testBuildInsertString() throws Exception {
31        SQLite.SQLStringAndBindings insertString = buildInsertString("table_name", values, SQLiteDatabase.CONFLICT_NONE);
32        assertThat(insertString.sql, equalTo("INSERT INTO table_name (float_value, byte_data, name, int_value) VALUES (?, ?, ?, ?);"));
33        SQLiteTestHelper.verifyColumnValues(insertString.columnValues);
34    }
35
36    @Test
37    public void testBuildUpdateString() {
38        SQLite.SQLStringAndBindings insertString = buildUpdateString("table_name", values, "id=?", new String[]{"1234"});
39        assertThat(insertString.sql, equalTo("UPDATE table_name SET float_value=?, byte_data=?, name=?, int_value=? WHERE id='1234';"));
40        SQLiteTestHelper.verifyColumnValues(insertString.columnValues);
41    }
42
43    @Test
44    public void testBuildDeleteString() {
45        String deleteString = buildDeleteString("table_name", "id=?", new String[]{"1234"});
46        assertThat(deleteString, equalTo("DELETE FROM table_name WHERE id='1234';"));
47    }
48
49    @Test
50    public void testBuildWhereClause() {
51        String whereClause = buildWhereClause("id=? AND name=? AND int_value=?", new String[]{"1234", "Chuck", "33"});
52        assertThat(whereClause, equalTo("id='1234' AND name='Chuck' AND int_value='33'"));
53    }
54
55    @Test
56    public void testBuildColumnValuesClause() {
57        SQLStringAndBindings columnValuesClause = buildColumnValuesClause(values);
58
59        assertThat(columnValuesClause.sql, equalTo("(float_value, byte_data, name, int_value) VALUES (?, ?, ?, ?)"));
60        SQLiteTestHelper.verifyColumnValues(columnValuesClause.columnValues);
61    }
62
63    @Test
64    public void testBuildColumnAssignmentsClause() {
65        SQLStringAndBindings columnAssignmentsClause = buildColumnAssignmentsClause(values);
66
67        assertThat(columnAssignmentsClause.sql, equalTo("float_value=?, byte_data=?, name=?, int_value=?"));
68        SQLiteTestHelper.verifyColumnValues(columnAssignmentsClause.columnValues);
69    }
70}
71