package test;

import java.io.File;
import java.sql.*;
import org.junit.*;
import static org.junit.Assert.*;

/** These tests check whether access to files is woring correctly and
 *  some Connection.close() cases. */
public class ConnectionTest
{
    @BeforeClass public static void forName() throws Exception {
        Class.forName("org.sqlite.JDBC");
    }

    @Test public void openMemory() throws SQLException {
        Connection conn = DriverManager.getConnection("jdbc:sqlite:");
        conn.close();
    }

    @Test public void isClosed() throws SQLException {
        Connection conn = DriverManager.getConnection("jdbc:sqlite:");
        assertFalse(conn.isReadOnly());
        conn.close();
        assertTrue(conn.isClosed());
    }

    @Test public void openFile() throws SQLException {
        File testdb = new File("test.db");
        if (testdb.exists()) testdb.delete();

        assertFalse(testdb.exists());
        Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
        assertFalse(conn.isReadOnly());
        conn.close();

        assertTrue(testdb.exists());
        conn = DriverManager.getConnection("jdbc:sqlite:test.db");
        assertFalse(conn.isReadOnly());
        conn.close();

        assertTrue(testdb.exists());
        testdb.delete();
    }

    @Test(expected= SQLException.class)
    public void closeTest() throws SQLException {
        Connection conn = DriverManager.getConnection("jdbc:sqlite:");
        PreparedStatement prep = conn.prepareStatement("select null;");
        ResultSet rs = prep.executeQuery();
        conn.close();
        prep.clearParameters();
    }
}
