Fix and fine-tune suppress_nulls.
[squelch.git] / src / test / java / net / jaekl / squelch / stmt / TabularTest.java
index f0e05bffd1f0e8500e96fc767f350dd257e84997..1dfe4dbcf3d8e1aec893b840a4f79f529fde88db 100644 (file)
@@ -10,6 +10,13 @@ import java.nio.charset.StandardCharsets;
 import java.sql.SQLException;
 import java.sql.Types;
 
+import javax.sql.rowset.serial.SerialBlob;
+import javax.sql.rowset.serial.SerialException;
+
+import junit.framework.Assert;
+
+import net.jaekl.squelch.db.DbDriver;
+import net.jaekl.squelch.db.DbDriverMock;
 import net.jaekl.squelch.sql.Column;
 import net.jaekl.squelch.sql.Row;
 
@@ -99,6 +106,7 @@ public class TabularTest {
        @Test
        public void test_printTable_empTable() throws IOException, SQLException
        {
+               DbDriverMock driver = new DbDriverMock();
                TabularMock tabular = createEmpTable();
                
                try (
@@ -106,21 +114,72 @@ public class TabularTest {
                                PrintWriter pw = new PrintWriter(new OutputStreamWriter(baos, StandardCharsets.UTF_8));
                        )
                {
-                       tabular.printTable(pw, "No rows returned.");
+                       tabular.printTable(driver, pw, "No rows returned.");
                        pw.close();
                        baos.close();
                        String actual = baos.toString();
-                       assertEquals(  "+-------+---------+----------+\n"
-                                            + "| EmpId |FirstName| LastName |\n"
-                                            + "+-------+---------+----------+\n"
-                                            + "|12345  |Fred     |Flintstone|\n"
-                                            + "|7654321|Barney   |Rubble    |\n"
-                                            + "+-------+---------+----------+\n"
+                       assertEquals(  "+---------+-----------+------------+\n"
+                                            + "|  EmpId  | FirstName |  LastName  |\n"
+                                            + "+---------+-----------+------------+\n"
+                                            + "| 12345   | Fred      | Flintstone |\n"
+                                            + "| 7654321 | Barney    | Rubble     |\n"
+                                            + "+---------+-----------+------------+\n"
                                             + "2 row(s) returned.\n",
                                             actual);
                }
        }
        
+       @Test
+       public void test_printTable_withNulls() throws IOException, SQLException
+       {
+               DbDriverMock driver = new DbDriverMock();
+
+               TabularMock tabular = createTableWithNulls();
+               driver.set(DbDriver.SUPPRESS_NULLS, true);
+               
+               try (
+                               ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                               PrintWriter pw = new PrintWriter(new OutputStreamWriter(baos, StandardCharsets.UTF_8));
+                       )
+               {
+                       tabular.printTable(driver, pw, "No rows returned.");
+                       pw.close();
+                       baos.close();
+                       String actual = baos.toString();
+                       assertEquals(  "+---------+--------+------------+\n"
+                                            + "|  EmpId  | Value1 |   Value3   |\n"
+                                            + "+---------+--------+------------+\n"
+                                            + "| 12345   | Fred   | Flintstone |\n"
+                                            + "| 7654321 | Barney | Rubble     |\n"
+                                            + "+---------+--------+------------+\n"
+                                            + "2 row(s) returned.\n",
+                                            actual);
+               }               
+               
+               tabular = createTableWithNulls();
+               driver.set(DbDriver.SUPPRESS_NULLS, false);
+               
+               try (
+                               ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                               PrintWriter pw = new PrintWriter(new OutputStreamWriter(baos, StandardCharsets.UTF_8));
+                       )
+               {
+                       tabular.printTable(driver, pw, "No rows returned.");
+                       pw.close();
+                       baos.close();
+                       String actual = baos.toString();
+                       assertEquals(  "+---------+--------+--------+------------+\n"
+                                            + "|  EmpId  | Value1 | Value2 |   Value3   |\n"
+                                            + "+---------+--------+--------+------------+\n"
+                                            + "| 12345   | Fred   | null   | Flintstone |\n"
+                                            + "| 7654321 | Barney | null   | Rubble     |\n"
+                                            + "+---------+--------+--------+------------+\n"
+                                            + "2 row(s) returned.\n",
+                                            actual);
+               }               
+               
+       }
+       
        @Test
        public void test_repChar() {
                Tabular tabular = new TabularMock();
@@ -131,6 +190,53 @@ public class TabularTest {
                assertEquals("------", tabular.repChar('-', 6));
        }
        
+       @Test
+       public void test_stringify() throws SerialException, SQLException {
+               Tabular tabular = new TabularMock();
+               
+               String[] data = {
+                       "This is the way the world ends, not with a bang but a whimper.",
+                       
+                       "To be, or not to be, that is the question:\n" +
+                       "Whether 'tis Nobler in the mind to suffer\n" +
+                       "The Slings and Arrows of outrageous Fortune,\n" +
+                       "Or to take Arms against a Sea of troubles,\n" +
+                       "And by opposing end them: to die, to sleep\n" +
+                       "No more; and by a sleep, to say we end\n" +
+                       "The Heart-ache, and the thousand Natural shocks\n" +
+                       "That Flesh is heir to? 'Tis a consummation\n" +
+                       "Devoutly to be wished. To die, to sleep,\n" +
+                       "To sleep, perchance to Dream; aye, there's the rub,\n" +
+                       "For in that sleep of death, what dreams may come,\n" +
+                       "When we have shuffled off this mortal coil,\n" +
+                       "Must give us pause. There's the respect\n" +
+                       "That makes Calamity of so long life:\n",
+                       
+                       "ἄνδρα μοι ἔννεπε, μοῦσα, πολύτροπον, ὃς μάλα πολλὰ\n" +
+                       "πλάγχθη, ἐπεὶ Τροίης ἱερὸν πτολίεθρον ἔπερσεν:\n" +
+                       "πολλῶν δ᾽ ἀνθρώπων ἴδεν ἄστεα καὶ νόον ἔγνω,\n" +
+                       "πολλὰ δ᾽ ὅ γ᾽ ἐν πόντῳ πάθεν ἄλγεα ὃν κατὰ θυμόν,\n" +
+                       "5ἀρνύμενος ἥν τε ψυχὴν καὶ νόστον ἑταίρων.\n" +
+                       "ἀλλ᾽ οὐδ᾽ ὣς ἑτάρους ἐρρύσατο, ἱέμενός περ:\n" +
+                       "αὐτῶν γὰρ σφετέρῃσιν ἀτασθαλίῃσιν ὄλοντο,\n" +
+                       "νήπιοι, οἳ κατὰ βοῦς Ὑπερίονος Ἠελίοιο\n" +
+                       "ἤσθιον: αὐτὰρ ὁ τοῖσιν ἀφείλετο νόστιμον ἦμαρ.\n" +
+                       "10τῶν ἁμόθεν γε, θεά, θύγατερ Διός, εἰπὲ καὶ ἡμῖν.\n"
+               };
+               
+               for (String datum : data) 
+               {
+                       byte[] content = datum.getBytes(StandardCharsets.UTF_8);
+                       SerialBlob sblob = new SerialBlob(content);
+                       
+                       String expected = datum;
+                       String actual = tabular.stringify(sblob);
+                       
+                       Assert.assertEquals(expected, actual);
+               }
+       }
+       
+       
        private TabularMock createEmpTable()
        {
                TabularMock tabular = new TabularMock();
@@ -156,4 +262,33 @@ public class TabularTest {
                
                return tabular;
        }
+       
+       private TabularMock createTableWithNulls()
+       {
+               TabularMock tabular = new TabularMock();
+               
+               Column[] cols = { 
+                               new Column("EmpId", Long.class, 10),
+                               new Column("Value1", String.class, 14),
+                               new Column("Value2", String.class, 14),
+                               new Column("Value3", String.class, 14)
+               };
+               tabular.mock_setCols(cols);
+               
+               Row row = new Row(cols.length);
+               row.setValue(1, Long.valueOf(12345));
+               row.setValue(2, "Fred");
+               row.setValue(3, null);
+               row.setValue(4, "Flintstone");
+               tabular.mock_addRow(row);
+               
+               row = new Row(cols.length);
+               row.setValue(1, Long.valueOf(7654321));
+               row.setValue(2, "Barney");
+               row.setValue(3, null);
+               row.setValue(4, "Rubble");
+               tabular.mock_addRow(row);
+               
+               return tabular;         
+       }
 }