KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > scriptella > driver > csv > CsvConnectionTest


1 /*
2  * Copyright 2006-2007 The Scriptella Project Team.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

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 JavaDoc;
28 import java.io.ByteArrayOutputStream JavaDoc;
29 import java.io.InputStream JavaDoc;
30 import java.io.OutputStream JavaDoc;
31 import java.io.UnsupportedEncodingException JavaDoc;
32 import java.net.URL JavaDoc;
33 import java.util.HashMap JavaDoc;
34 import java.util.Map JavaDoc;
35
36 /**
37  * Tests for {@link CsvConnection}.
38  *
39  * @author Fyodor Kupolov
40  * @version 1.0
41  */

42 public class CsvConnectionTest extends AbstractTestCase {
43     private int rows;
44
45     private ByteArrayOutputStream JavaDoc out;
46
47     protected void setUp() throws Exception JavaDoc {
48         super.setUp();
49         testURLHandler = new TestURLHandler() {
50             public InputStream JavaDoc getInputStream(final URL JavaDoc u) {
51                 try {
52                     return new ByteArrayInputStream JavaDoc("c1;c2;c3\nc4;'c''5';c6\u0394".getBytes("UTF8"));
53                 } catch (UnsupportedEncodingException JavaDoc e) {
54                     throw new IllegalStateException JavaDoc(e.getMessage(), e);
55                 }
56             }
57
58             public OutputStream JavaDoc getOutputStream(final URL JavaDoc u) {
59                 out = new ByteArrayOutputStream JavaDoc();
60                 return out;
61             }
62
63             public int getContentLength(final URL JavaDoc u) {
64                 return -1;
65             }
66         };
67
68     }
69
70     public void testQuery() {
71         //Create a configuration with non default values
72
Map JavaDoc<String JavaDoc, String JavaDoc> props = new HashMap JavaDoc<String JavaDoc, String JavaDoc>();
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         //register handler for tst url
82
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 JavaDoc {
111         //Create a configuration with non default values
112
Map JavaDoc<String JavaDoc, String JavaDoc> props = new HashMap JavaDoc<String JavaDoc, String JavaDoc>();
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         //register handler for tst url
121
rows = 0;
122         con.executeScript(new StringResource(" $row1,\"value\",val${'ue'}\n$row2,,value\u0394"),
123                 MockParametersCallbacks.SIMPLE);
124         con.close();
125         String JavaDoc expected = "*row1*;value;value\r\n*row2*;;value\u0394\r\n";
126         String JavaDoc actual = out.toString("UTF8");
127         assertEquals(expected, actual);
128     }
129
130     /**
131      * Tests CSV processing with trim mode switched off.
132      */

133     public void testNoTrim() throws UnsupportedEncodingException JavaDoc {
134         //Create a configuration with non default values
135
Map JavaDoc<String JavaDoc, String JavaDoc> props = new HashMap JavaDoc<String JavaDoc, String JavaDoc>();
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.*"), //extra leading whitespace
143
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 JavaDoc expected = " *a*,*b* , *c* \r\n";
153         String JavaDoc actual = out.toString();
154         assertEquals(expected, actual);
155
156     }
157
158
159
160
161 }
162
Popular Tags