1package com.xtremelabs.robolectric.util;
2
3import com.xtremelabs.robolectric.WithTestDefaultsRunner;
4import com.xtremelabs.robolectric.util.DatabaseConfig.CannotLoadDatabaseMapDriverException;
5import com.xtremelabs.robolectric.util.DatabaseConfig.UsingDatabaseMap;
6import org.junit.Assert;
7import org.junit.Test;
8import org.junit.runner.RunWith;
9
10import java.sql.Connection;
11
12/**
13 * the @UsingDatabaseMap integration test
14 * @author cvanvranken
15 *
16 */
17@UsingDatabaseMap(NullDatabaseMap.class)
18@RunWith(WithTestDefaultsRunner.class)
19public class NullDatabaseMapTest {
20
21	@Test
22	public void CanChangeDatabaseMapUsingAnnotation() {
23		Assert.assertTrue(DatabaseConfig.getDatabaseMap().getClass().getName()
24				.equals(NullDatabaseMap.class.getName()));
25		Assert.assertTrue(DatabaseConfig.getDatabaseMap().getConnectionString() == null);
26		Assert.assertTrue(DatabaseConfig.getDatabaseMap()
27				.getSelectLastInsertIdentity() == null);
28		Assert.assertTrue(DatabaseConfig.getDatabaseMap().getDriverClassName() == "com.xtremelabs.robolectric.util.NullDatabaseMap");
29	}
30
31	@Test
32	public void MapIsSetButIsNotLoaded() {
33		Assert.assertTrue(DatabaseConfig.getDatabaseMap().getClass().getName()
34				.equals(NullDatabaseMap.class.getName()));
35		// check that the map has been set but not loaded.
36		Assert.assertFalse(DatabaseConfig.isMapLoaded());
37	}
38
39	@Test
40	public void MapLoadsButConnectionFails() {
41		Assert.assertFalse(DatabaseConfig.isMapLoaded());
42		Connection connection = null;
43
44		boolean expectedError = false;
45
46		try {
47			connection = DatabaseConfig.getMemoryConnection();
48			// we should never reach this,
49			//since the connection should not actually be made
50			Assert.assertTrue(false);
51		} catch (CannotLoadDatabaseMapDriverException e) {
52			//This error is expected.
53			expectedError = true;
54		}
55		Assert.assertTrue(expectedError);
56		Assert.assertTrue(connection == null);
57		// driver should have loaded because the class name was valid,
58		// even if the memoryConnectionString was invalid
59		Assert.assertTrue(DatabaseConfig.isMapLoaded());
60
61	}
62}
63