1 16 package scriptella.driver.csv; 17 18 import scriptella.AbstractTestCase; 19 import scriptella.configuration.MockConnectionEl; 20 import scriptella.configuration.StringResource; 21 import scriptella.spi.ConnectionParameters; 22 import scriptella.spi.MockDriverContext; 23 import scriptella.spi.MockParametersCallbacks; 24 import scriptella.spi.ParametersCallback; 25 import scriptella.spi.QueryCallback; 26 27 import java.io.ByteArrayInputStream ; 28 import java.io.ByteArrayOutputStream ; 29 import java.io.InputStream ; 30 import java.io.OutputStream ; 31 import java.io.UnsupportedEncodingException ; 32 import java.net.URL ; 33 import java.util.HashMap ; 34 import java.util.Map ; 35 36 42 public class CsvConnectionTest extends AbstractTestCase { 43 private int rows; 44 45 private ByteArrayOutputStream out; 46 47 protected void setUp() throws Exception { 48 super.setUp(); 49 testURLHandler = new TestURLHandler() { 50 public InputStream getInputStream(final URL u) { 51 try { 52 return new ByteArrayInputStream ("c1;c2;c3\nc4;'c''5';c6\u0394".getBytes("UTF8")); 53 } catch (UnsupportedEncodingException e) { 54 throw new IllegalStateException (e.getMessage(), e); 55 } 56 } 57 58 public OutputStream getOutputStream(final URL u) { 59 out = new ByteArrayOutputStream (); 60 return out; 61 } 62 63 public int getContentLength(final URL u) { 64 return -1; 65 } 66 }; 67 68 } 69 70 public void testQuery() { 71 Map <String , String > props = new HashMap <String , String >(); 73 props.put(CsvConnection.ENCODING, "UTF8"); 74 props.put(CsvConnection.EOL, "\r\n"); 75 props.put(CsvConnection.HEADERS, "false"); 76 props.put(CsvConnection.QUOTE, "'"); 77 props.put(CsvConnection.SEPARATOR, ";"); 78 ConnectionParameters cp = new ConnectionParameters(new MockConnectionEl(props, "tst://file"), MockDriverContext.INSTANCE); 79 80 CsvConnection con = new CsvConnection(cp); 81 rows = 0; 83 con.executeQuery(new StringResource(""), MockParametersCallbacks.UNSUPPORTED, new QueryCallback() { 84 public void processRow(final ParametersCallback parameters) { 85 rows++; 86 switch (rows) { 87 case 1: 88 assertEquals("c1", parameters.getParameter("1")); 89 assertEquals("c2", parameters.getParameter("2")); 90 assertEquals("c3", parameters.getParameter("3")); 91 break; 92 case 2: 93 assertEquals("c4", parameters.getParameter("1")); 94 assertEquals("c'5", parameters.getParameter("2")); 95 assertEquals("c6\u0394", parameters.getParameter("3")); 96 break; 97 98 default: 99 fail("unexpected row " + rows); 100 } 101 102 } 103 }); 104 assertEquals(2, rows); 105 assertNull("No output should be produced by a query", out); 106 107 108 } 109 110 public void testScript() throws UnsupportedEncodingException { 111 Map <String , String > props = new HashMap <String , String >(); 113 props.put(CsvConnection.ENCODING, "UTF8"); 114 props.put(CsvConnection.EOL, "\r\n"); 115 props.put(CsvConnection.QUOTE, ""); 116 props.put(CsvConnection.SEPARATOR, ";"); 117 ConnectionParameters cp = new ConnectionParameters(new MockConnectionEl(props, "tst://file"), MockDriverContext.INSTANCE); 118 119 CsvConnection con = new CsvConnection(cp); 120 rows = 0; 122 con.executeScript(new StringResource(" $row1,\"value\",val${'ue'}\n$row2,,value\u0394"), 123 MockParametersCallbacks.SIMPLE); 124 con.close(); 125 String expected = "*row1*;value;value\r\n*row2*;;value\u0394\r\n"; 126 String actual = out.toString("UTF8"); 127 assertEquals(expected, actual); 128 } 129 130 133 public void testNoTrim() throws UnsupportedEncodingException { 134 Map <String , String > props = new HashMap <String , String >(); 136 props.put(CsvConnection.TRIM, "no"); 137 props.put(CsvConnection.QUOTE, ""); 138 props.put(CsvConnection.EOL, "\r\n"); 139 ConnectionParameters cp = new ConnectionParameters(new MockConnectionEl(props, "tst://file"), MockDriverContext.INSTANCE); 140 141 CsvConnection con = new CsvConnection(cp); 142 con.executeQuery(new StringResource(" c4.*"), MockParametersCallbacks.SIMPLE, new QueryCallback() { 144 public void processRow(final ParametersCallback parameters) { 145 fail("Whitespace trimming should be suppressed."); 146 } 147 }); 148 con.executeScript(new StringResource(" $a,$b , $c "), 149 MockParametersCallbacks.SIMPLE); 150 151 con.close(); 152 String expected = " *a*,*b* , *c* \r\n"; 153 String actual = out.toString(); 154 assertEquals(expected, actual); 155 156 } 157 158 159 160 161 } 162 | Popular Tags |