diff --git a/src/interfaces/jdbc/org/postgresql/test/jdbc2/ConnectionTest.java b/src/interfaces/jdbc/org/postgresql/test/jdbc2/ConnectionTest.java
index b9c2444c79c72d90b7db461f9b78dbe320b8a9e0..8d52bccce2671a24b8bd3b5cbca0822f76bc6aa5 100644
--- a/src/interfaces/jdbc/org/postgresql/test/jdbc2/ConnectionTest.java
+++ b/src/interfaces/jdbc/org/postgresql/test/jdbc2/ConnectionTest.java
@@ -10,7 +10,7 @@ import java.sql.*;
  *
  * PS: Do you know how difficult it is to type on a train? ;-)
  *
- * $Id: ConnectionTest.java,v 1.3 2001/09/07 22:17:48 momjian Exp $
+ * $Id: ConnectionTest.java,v 1.4 2001/09/10 14:54:22 momjian Exp $
  */
 
 public class ConnectionTest extends TestCase {
@@ -203,36 +203,94 @@ public class ConnectionTest extends TestCase {
     }
   }
 
-  /**
-   * Transaction Isolation Levels
-   */
-  public void testTransactionIsolation() {
-    try {
-      Connection con = JDBC2Tests.openDB();
-
-      con.setAutoCommit(false);
-
-      // These are the currently available ones
-      con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
-      assert(con.getTransactionIsolation()==Connection.TRANSACTION_SERIALIZABLE);
-
-      con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
-      assert(con.getTransactionIsolation()==Connection.TRANSACTION_READ_COMMITTED);
-
-      // Now turn on AutoCommit. Transaction Isolation doesn't work outside of
-      // a transaction, so they should return READ_COMMITTED at all times!
-      con.setAutoCommit(true);
-      con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
-      assert(con.getTransactionIsolation()==Connection.TRANSACTION_READ_COMMITTED);
-
-      con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
-      assert(con.getTransactionIsolation()==Connection.TRANSACTION_READ_COMMITTED);
-
-      JDBC2Tests.closeDB(con);
-    } catch(SQLException ex) {
-      assert(ex.getMessage(),false);
-    }
-  }
+	/**
+	 * Transaction Isolation Levels
+	 */
+	public void testTransactionIsolation()
+	{
+		try
+		{
+			Connection con = JDBC2Tests.openDB();
+
+			// PostgreSQL defaults to READ COMMITTED
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_READ_COMMITTED );
+
+			// Begin a transaction
+			con.setAutoCommit(false);
+
+			// The isolation level should not have changed
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_READ_COMMITTED );
+
+			// Now change the default for future transactions
+			con.setTransactionIsolation( Connection.TRANSACTION_SERIALIZABLE );
+
+			// Since the call to setTransactionIsolation() above was made
+			// inside the transaction, the isolation level of the current
+			// transaction did not change. It affects only future transactions.
+			// This behaviour is recommended by the JDBC spec.
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_READ_COMMITTED );
+
+			// Begin a new transaction
+			con.commit();
+
+			// Now we should see the new isolation level
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_SERIALIZABLE );
+
+			// Repeat the steps above with the transition back to
+			// READ COMMITTED.
+			con.setTransactionIsolation(
+				Connection.TRANSACTION_READ_COMMITTED );
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_SERIALIZABLE );
+			con.commit();
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_READ_COMMITTED );
+
+			// Now run some tests with autocommit enabled.
+			con.setAutoCommit(true);
+
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_READ_COMMITTED );
+
+			con.setTransactionIsolation( Connection.TRANSACTION_SERIALIZABLE );
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_SERIALIZABLE );
+
+			con.setTransactionIsolation(
+				Connection.TRANSACTION_READ_COMMITTED );
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_READ_COMMITTED );
+
+			// Test if a change of isolation level before beginning the
+			// transaction affects the isolation level inside the transaction.
+			con.setTransactionIsolation( Connection.TRANSACTION_SERIALIZABLE );
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_SERIALIZABLE );
+			con.setAutoCommit(false);
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_SERIALIZABLE );
+			con.setAutoCommit(true);
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_SERIALIZABLE );
+			con.setTransactionIsolation( 
+				Connection.TRANSACTION_READ_COMMITTED );
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_READ_COMMITTED );
+			con.setAutoCommit(false);
+			assertEquals( con.getTransactionIsolation(),
+						  Connection.TRANSACTION_READ_COMMITTED );
+
+			JDBC2Tests.closeDB(con);
+		} 
+		catch ( SQLException ex ) 
+		{
+			fail( ex.getMessage() );
+		}
+	}
 
   /**
    * JDBC2 Type mappings