// Copyright (c) 2005 Dustin Sallings <dustin@spy.net> package net.spy.db; import java.net.MalformedURLException; import java.net.URL; import java.sql.ResultSet; import java.sql.SQLException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import junit.framework.TestCase; public class FileResultSetTest extends TestCase { private void assertColumn(ResultSet rs, int val, String col, int colInt) throws Exception { assertEquals(val, rs.getInt(col)); assertEquals(val, rs.getInt(colInt)); } private void assertColumn(ResultSet rs, String val, String col, int colInt) throws Exception { assertEquals(val, rs.getString(col)); assertEquals(val, rs.getString(colInt)); } private void assertColumn(ResultSet rs, boolean val, String col, int colInt) throws Exception { assertEquals(val, rs.getBoolean(col)); assertEquals(val, rs.getBoolean(colInt)); } private void assertTimestampColumn( ResultSet rs, String val, String col, int colInt) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HH:mm:ss.SSS"); Date parsedDate = null; try { parsedDate = new java.sql.Timestamp(sdf.parse(val).getTime()); } catch(ParseException e) { // Alternate parse sdf = new SimpleDateFormat("yyyyMMdd'T'HH:mm:ss"); parsedDate = new java.sql.Time(sdf.parse(val).getTime()); } assertEquals(parsedDate, rs.getTimestamp(col)); assertEquals(parsedDate, rs.getTimestamp(colInt)); } private void assertTimeColumn( ResultSet rs, String val, String col, int colInt) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); java.sql.Time parsedTime = null; try { parsedTime = new java.sql.Time(sdf.parse(val).getTime()); } catch(ParseException e) { // Alternate parse sdf = new SimpleDateFormat("HH:mm:ss"); parsedTime = new java.sql.Time(sdf.parse(val).getTime()); } assertEquals(parsedTime, rs.getTime(col)); assertEquals(parsedTime, rs.getTime(colInt)); } private void assertDateColumn( ResultSet rs, String val, String col, int colInt) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); java.sql.Date parsedDate = new java.sql.Date(sdf.parse(val).getTime()); assertEquals(parsedDate, rs.getDate(col)); assertEquals(parsedDate, rs.getDate(colInt)); } public void testCountResultSet() throws Exception { String path = "file://" + System.getProperty("basedir") + "/src/test/net/spy/test/db/resulttest.txt"; FileResultSet rs = new FileResultSet(new URL(path), Integer.MAX_VALUE); int i=0; while(rs.next()) { i++; } assertEquals(3, i); } public void testLimitedResultSet() throws Exception { String path = "file://" + System.getProperty("basedir") + "/src/test/net/spy/test/db/resulttest.txt"; FileResultSet rs = new FileResultSet(new URL(path), 2); int i=0; while(rs.next()) { i++; } assertEquals(2, i); } public void testResultSet1() throws Exception { String path = "file://" + System.getProperty("basedir") + "/src/test/net/spy/test/db/resulttest.txt"; FileResultSet rs = new FileResultSet(new URL(path), Integer.MAX_VALUE); try { String s=rs.getString("col_two"); fail("Shouldn't be able to get a column before rs.next(), got " + s); } catch(SQLException e) { assertEquals("No current result.", e.getMessage()); } assertTrue(rs.next()); try { String s=rs.getString("nonexistent"); fail("Should not be able to request nonexistent column, got " + s); } catch(SQLException e) { assertEquals("No such column: nonexistent", e.getMessage()); } try { String s=rs.getString(8); fail("Should not be able to request not existent column, got " + s); } catch(SQLException e) { assertEquals("There are only 7 columns in this set.", e.getMessage()); } assertColumn(rs, 28, "col_one", 1); assertColumn(rs, "I'll be twenty-eight.", "col_two", 2); assertDateColumn(rs, "20051005", "col_three", 3); assertTimeColumn(rs, "12:15:27.13", "col_four", 4); assertTimestampColumn(rs, "20051005T12:15:27.13", "col_five", 5); assertColumn(rs, true, "col_six", 6); assertColumn(rs, true, "col_seven", 7); assertTrue(rs.next()); assertColumn(rs, 10, "col_one", 1); assertColumn(rs, "Jennalynn will be ten.", "col_two", 2); assertDateColumn(rs, "20050710", "col_three", 3); assertTimeColumn(rs, "03:18:05", "col_four", 4); assertTimestampColumn(rs, "20050710T03:18:05", "col_five", 5); assertColumn(rs, false, "col_six", 6); assertFalse(rs.wasNull()); assertColumn(rs, false, "col_seven", 7); assertTrue(rs.next()); assertColumn(rs, -5, "col_one", 1); assertColumn(rs, "This has a\ttab and\nnewline and a \\N", "col_two", 2); assertDateColumn(rs, "19771005", "col_three", 3); assertTimeColumn(rs, "00:00:00", "col_four", 4); assertTimestampColumn(rs, "19771005T00:00:00", "col_five", 5); assertColumn(rs, false, "col_six", 6); assertTrue(rs.wasNull()); assertColumn(rs, true, "col_seven", 7); assertFalse(rs.next()); } public void testBadResultSet1() throws MalformedURLException { URL f = new URL("file:///tmp/nonExistentPath.txt"); try { FileResultSet rs = new FileResultSet(f, Integer.MAX_VALUE); fail("Got a result set from a non-existent file: " + rs); } catch(SQLException e) { assertEquals("Could not initialize results from " + f, e.getMessage()); } } }