1+ /*
2+ * Copyright 2018 Deutsche Nationalbibliothek
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 org .metafacture .csv ;
17+
18+ import org .junit .Before ;
19+ import org .junit .Test ;
20+ import org .metafacture .framework .ObjectReceiver ;
21+ import org .mockito .InOrder ;
22+ import org .mockito .Mock ;
23+ import org .mockito .MockitoAnnotations ;
24+
25+ import static org .mockito .Mockito .inOrder ;
26+
27+ public class SimpleCsvEncoderTest {
28+
29+ private SimpleCsvEncoder encoder ;
30+
31+ @ Mock
32+ private ObjectReceiver <String > receiver ;
33+
34+ @ Before
35+ public void setUp () {
36+ MockitoAnnotations .initMocks (this );
37+ encoder = new SimpleCsvEncoder (' ' );
38+ encoder .setReceiver (receiver );
39+ }
40+
41+ @ Test
42+ public void shouldReceiveSingleRecord () {
43+ encoder .startRecord ("1" );
44+ encoder .literal ("column 1" , "a" );
45+ encoder .literal ("column 2" , "b" );
46+ encoder .endRecord ();
47+ encoder .closeStream ();
48+
49+ final InOrder ordered = inOrder (receiver );
50+ ordered .verify (receiver ).process (ticksToQuotes ("'a' 'b'" ));
51+ }
52+
53+ @ Test
54+ public void shouldReceiveSingleRecordWithHeader () {
55+ encoder .setIncludeHeader (true );
56+
57+ encoder .startRecord ("1" );
58+ encoder .literal ("column 1" , "a" );
59+ encoder .literal ("column 2" , "b" );
60+ encoder .endRecord ();
61+ encoder .closeStream ();
62+
63+ final InOrder ordered = inOrder (receiver );
64+ ordered .verify (receiver ).process (ticksToQuotes ("'column 1' 'column 2'" ));
65+ ordered .verify (receiver ).process (ticksToQuotes ("'a' 'b'" ));
66+ }
67+
68+ @ Test
69+ public void shouldReceiveSingleRecordWithRecordId () {
70+ encoder .setIncludeRecordId (true );
71+
72+ encoder .startRecord ("1" );
73+ encoder .literal ("column 1" , "a" );
74+ encoder .literal ("column 2" , "b" );
75+ encoder .endRecord ();
76+ encoder .closeStream ();
77+
78+ final InOrder ordered = inOrder (receiver );
79+ ordered .verify (receiver ).process (ticksToQuotes ("'1' 'a' 'b'" ));
80+ }
81+
82+ @ Test
83+ public void shouldReceiveSingleRecordWithRecordIdAndHeader () {
84+ encoder .setIncludeRecordId (true );
85+ encoder .setIncludeHeader (true );
86+
87+ encoder .startRecord ("1" );
88+ encoder .literal ("column 1" , "a" );
89+ encoder .literal ("column 2" , "b" );
90+ encoder .endRecord ();
91+ encoder .closeStream ();
92+
93+ final InOrder ordered = inOrder (receiver );
94+ ordered .verify (receiver ).process (ticksToQuotes ("'record id' 'column 1' 'column 2'" ));
95+ ordered .verify (receiver ).process (ticksToQuotes ("'1' 'a' 'b'" ));
96+ }
97+
98+
99+ @ Test
100+ public void shouldReceiveThreeRows () {
101+ encoder .startRecord ("1" );
102+ encoder .literal ("column 1" , "a" );
103+ encoder .literal ("column 2" , "b" );
104+ encoder .endRecord ();
105+ encoder .startRecord ("2" );
106+ encoder .literal ("column 1" , "c" );
107+ encoder .literal ("column 2" , "d" );
108+ encoder .endRecord ();
109+ encoder .startRecord ("3" );
110+ encoder .literal ("column 1" , "e" );
111+ encoder .literal ("column 2" , "f" );
112+ encoder .endRecord ();
113+ encoder .closeStream ();
114+
115+ final InOrder ordered = inOrder (receiver );
116+ ordered .verify (receiver ).process (ticksToQuotes ("'a' 'b'" ));
117+ ordered .verify (receiver ).process (ticksToQuotes ("'c' 'd'" ));
118+ ordered .verify (receiver ).process (ticksToQuotes ("'e' 'f'" ));
119+ }
120+
121+ @ Test
122+ public void shouldUseCommaAsSeparator () {
123+ encoder .setSeparator (',' );
124+
125+ encoder .startRecord ("1" );
126+ encoder .literal ("column 1" , "a" );
127+ encoder .literal ("column 2" , "b" );
128+ encoder .endRecord ();
129+ encoder .startRecord ("1" );
130+ encoder .literal ("column 1" , "c" );
131+ encoder .literal ("column 2" , "d" );
132+ encoder .endRecord ();
133+ encoder .closeStream ();
134+
135+ final InOrder ordered = inOrder (receiver );
136+ ordered .verify (receiver ).process (ticksToQuotes ("'a','b'" ));
137+ ordered .verify (receiver ).process (ticksToQuotes ("'c','d'" ));
138+ }
139+
140+ @ Test
141+ public void shouldCreateNestedCsvInColumn () {
142+ encoder .startRecord ("1" );
143+ encoder .literal ("name" , "a" );
144+ encoder .literal ("alias" , "a1" );
145+ encoder .literal ("alias" , "a2" );
146+ encoder .literal ("alias" , "a3" );
147+ encoder .endRecord ();
148+ encoder .closeStream ();
149+
150+ final InOrder ordered = inOrder (receiver );
151+ ordered .verify (receiver ).process (ticksToQuotes ("'a' '''a1'' ''a2'' ''a3'''" ));
152+ }
153+
154+ private String ticksToQuotes (String s ) {
155+ return s .replace ("'" , "\" " );
156+ }
157+ }
0 commit comments