1package com.xtremelabs.robolectric.util;
2
3import com.xtremelabs.robolectric.WithTestDefaultsRunner;
4import com.xtremelabs.robolectric.util.DatabaseConfig.DatabaseMap;
5import com.xtremelabs.robolectric.util.DatabaseConfig.NullDatabaseMapException;
6import org.junit.Before;
7import org.junit.Test;
8import org.junit.runner.RunWith;
9
10import java.sql.ResultSet;
11
12import static org.hamcrest.CoreMatchers.equalTo;
13import static org.junit.Assert.assertThat;
14
15@RunWith(WithTestDefaultsRunner.class)
16public class DatabaseConfigTest {
17
18    @Before
19    public void setup() {
20        DatabaseConfig.setDatabaseMap(new H2Map());
21    }
22
23    @Test
24    public void testSettingDatabaseMapLoadsCorrectly() throws Exception {
25        assertThat(DatabaseConfig.getDatabaseMap().getClass().getName(), equalTo(H2Map.class.getName()));
26        assertThat(DatabaseConfig.isMapLoaded(), equalTo(false));
27        DatabaseConfig.getMemoryConnection(); //load map
28        assertThat(DatabaseConfig.isMapLoaded(), equalTo(true));
29        assertThat(DatabaseConfig.getResultSetType(), equalTo(ResultSet.TYPE_SCROLL_INSENSITIVE));
30
31        H2Map_TypeForwardOnly ForwardOnlyMap = new H2Map_TypeForwardOnly();
32        DatabaseConfig.setDatabaseMap(ForwardOnlyMap);
33        assertThat(DatabaseConfig.isMapLoaded(), equalTo(false));
34        assertThat(DatabaseConfig.getDatabaseMap(), equalTo((DatabaseMap) ForwardOnlyMap));
35        DatabaseConfig.getMemoryConnection(); //load map
36        assertThat(DatabaseConfig.isMapLoaded(), equalTo(true));
37        assertThat(DatabaseConfig.getDatabaseMap().getClass().getName(), equalTo(H2Map_TypeForwardOnly.class.getName()));
38        assertThat(DatabaseConfig.getResultSetType(), equalTo(ResultSet.TYPE_FORWARD_ONLY));
39    }
40
41    @Test
42    public void testMapIsNotNull() throws Exception {
43        assertThat(DatabaseConfig.isMapNull(), equalTo(false));
44    }
45
46    private void setDatabaseMapNull() {
47        DatabaseConfig.setDatabaseMap(null);
48        assertThat(DatabaseConfig.isMapNull(), equalTo(true));
49        assertThat(DatabaseConfig.isMapLoaded(), equalTo(false));
50    }
51
52    @Test(expected = NullDatabaseMapException.class)
53    public void testLoadingNullMapThrowsException() throws Exception {
54        setDatabaseMapNull();
55        DatabaseConfig.getMemoryConnection(); //attempt to load driver for map and throw exception
56    }
57
58    @Test(expected = NullDatabaseMapException.class)
59    public void testGetScrubSQLThrowsExceptionWithNullMap() throws Exception {
60        setDatabaseMapNull();
61        DatabaseConfig.getScrubSQL("");
62    }
63
64    @Test(expected = NullDatabaseMapException.class)
65    public void testGetSelectLastInsertIdentityThrowsExceptionWithNullMap() throws Exception {
66        setDatabaseMapNull();
67        DatabaseConfig.getSelectLastInsertIdentity();
68    }
69
70    @Test(expected = NullDatabaseMapException.class)
71    public void testGetResultSetTypeThrowsExceptionWithNullMap() throws Exception {
72        setDatabaseMapNull();
73        DatabaseConfig.getResultSetType();
74    }
75
76    @Test
77    public void testGetScrubSQL() throws Exception {
78        assertThat(DatabaseConfig.getScrubSQL("autoincrement"), equalTo(DatabaseConfig.getDatabaseMap().getScrubSQL("autoincrement")));
79    }
80
81    @Test
82    public void testGetSelectLastInsertIdentity() throws Exception {
83        assertThat(DatabaseConfig.getSelectLastInsertIdentity(), equalTo(DatabaseConfig.getDatabaseMap().getSelectLastInsertIdentity()));
84    }
85
86    @Test
87    public void testGetResultSetType() throws Exception {
88        assertThat(DatabaseConfig.getResultSetType(), equalTo(DatabaseConfig.getDatabaseMap().getResultSetType()));
89    }
90}
91