Skip to content

Commit 278b79d

Browse files
author
Yoshito Umaoka
committed
Test cases for CSV filter example
Some minor bug fixes in the CSV filter example
1 parent 9ace52d commit 278b79d

5 files changed

Lines changed: 224 additions & 3 deletions

File tree

examples/custom-res-filter/src/main/java/com/ibm/g11n/pipeline/example/CSVFilter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ public void merge(InputStream baseStream, OutputStream outStream, LanguageBundle
8989
}
9090
printer.printRecord(key, value);
9191
}
92-
93-
write(outStream,languageBundle,options);
92+
printer.flush();
9493
}
9594
}

examples/custom-res-filter/src/main/java/com/ibm/g11n/pipeline/example/MultiBundleCSVFilter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,10 @@ public void write(OutputStream outStream, Map<String, LanguageBundle> languageBu
8080
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outStream, StandardCharsets.UTF_8));
8181
CSVPrinter printer = CSVFormat.RFC4180.withHeader("module", "key", "value").print(writer);
8282

83-
for (Entry<String, LanguageBundle> bundleEntry: languageBundles.entrySet()) {
83+
// Sort by bundle
84+
TreeMap<String, LanguageBundle> sortedBundles = new TreeMap<>(languageBundles);
85+
86+
for (Entry<String, LanguageBundle> bundleEntry: sortedBundles.entrySet()) {
8487
String module = bundleEntry.getKey();
8588
LanguageBundle languageBundle = bundleEntry.getValue();
8689
for (ResourceString resString : languageBundle.getSortedResourceStrings()) {

examples/custom-res-filter/src/test/java/com/ibm/g11n/pipeline/example/TestCSVFilter.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static org.junit.Assert.assertTrue;
2222
import static org.junit.Assert.fail;
2323

24+
import java.io.ByteArrayOutputStream;
2425
import java.io.IOException;
2526
import java.io.InputStream;
2627
import java.util.List;
@@ -83,4 +84,67 @@ public void testParse() {
8384
fail(e.getMessage());
8485
}
8586
}
87+
88+
@Test
89+
public void testWrite() {
90+
TestResourceStringData[] testData = {
91+
new TestResourceStringData("minestrone", "Minestrone", 2),
92+
new TestResourceStringData("pizza", "Pizza", 3),
93+
new TestResourceStringData("spaghetti", "Spaghetti", 1)
94+
};
95+
96+
String[] expectedLines = {
97+
"key,value",
98+
"spaghetti,Spaghetti",
99+
"minestrone,Minestrone",
100+
"pizza,Pizza"
101+
};
102+
103+
LanguageBundle bundle = TestUtils.createLanguageBundle(testData);
104+
ResourceFilter filter = ResourceFilterFactory.getResourceFilter(CSVFilter.ID);
105+
try (ByteArrayOutputStream outStream = new ByteArrayOutputStream()) {
106+
filter.write(outStream, bundle, new FilterOptions(Locale.ENGLISH));
107+
TestUtils.compareLines(expectedLines, outStream.toByteArray());
108+
} catch (IOException e) {
109+
fail(e.getMessage());
110+
} catch (ResourceFilterException e) {
111+
fail(e.getMessage());
112+
}
113+
}
114+
115+
@Test
116+
public void testMerge() {
117+
String[] baseLines = {
118+
"key,value",
119+
"spaghetti,Spaghetti",
120+
"minestrone,Minestrone",
121+
"pizza,Pizza"
122+
};
123+
124+
TestResourceStringData[] testData = {
125+
new TestResourceStringData("pizza", "ピザ", 1),
126+
new TestResourceStringData("spaghetti", "スパゲッティ", 2),
127+
new TestResourceStringData("calzone", "カルゾーン", 3)
128+
};
129+
130+
String[] expectedLines = {
131+
"key,value",
132+
"spaghetti,スパゲッティ",
133+
"minestrone,Minestrone",
134+
"pizza,ピザ"
135+
};
136+
137+
LanguageBundle bundle = TestUtils.createLanguageBundle(testData);
138+
ResourceFilter filter = ResourceFilterFactory.getResourceFilter(CSVFilter.ID);
139+
try (InputStream baseStream = TestUtils.creteInputStream(baseLines);
140+
ByteArrayOutputStream outStream = new ByteArrayOutputStream()) {
141+
filter.merge(baseStream, outStream, bundle, new FilterOptions(Locale.JAPANESE));
142+
TestUtils.compareLines(expectedLines, outStream.toByteArray());
143+
} catch (IOException e) {
144+
fail(e.getMessage());
145+
} catch (ResourceFilterException e) {
146+
fail(e.getMessage());
147+
}
148+
}
149+
86150
}

examples/custom-res-filter/src/test/java/com/ibm/g11n/pipeline/example/TestMultiBundleCSVFilter.java

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@
2121
import static org.junit.Assert.assertTrue;
2222
import static org.junit.Assert.fail;
2323

24+
import java.io.ByteArrayOutputStream;
2425
import java.io.IOException;
2526
import java.io.InputStream;
2627
import java.util.HashMap;
28+
import java.util.LinkedHashMap;
2729
import java.util.List;
2830
import java.util.Locale;
2931
import java.util.Map;
@@ -105,4 +107,86 @@ public void testParse() {
105107
fail(e.getMessage());
106108
}
107109
}
110+
111+
@Test
112+
public void testWrite() {
113+
TestResourceStringData[] testDataJapanese = {
114+
new TestResourceStringData("sushi", "Sushi", 1),
115+
new TestResourceStringData("ramen", "Ramen", 2)
116+
};
117+
TestResourceStringData[] testDataItalian = {
118+
new TestResourceStringData("minestrone", "Minestrone", 2),
119+
new TestResourceStringData("pizza", "Pizza", 3),
120+
new TestResourceStringData("spaghetti", "Spaghetti", 1)
121+
};
122+
123+
String[] expectedLines = {
124+
"module,key,value",
125+
"Italian Foods,spaghetti,Spaghetti",
126+
"Italian Foods,minestrone,Minestrone",
127+
"Italian Foods,pizza,Pizza",
128+
"Japanese Foods,sushi,Sushi",
129+
"Japanese Foods,ramen,Ramen"
130+
};
131+
132+
Map<String, LanguageBundle> testDataMap = new LinkedHashMap<>();
133+
testDataMap.put("Japanese Foods", TestUtils.createLanguageBundle(testDataJapanese));
134+
testDataMap.put("Italian Foods", TestUtils.createLanguageBundle(testDataItalian));
135+
136+
MultiBundleResourceFilter filter = ResourceFilterFactory.getMultiBundleResourceFilter(MultiBundleCSVFilter.ID);
137+
try (ByteArrayOutputStream outStream = new ByteArrayOutputStream()) {
138+
filter.write(outStream, testDataMap, new FilterOptions(Locale.ENGLISH));
139+
TestUtils.compareLines(expectedLines, outStream.toByteArray());
140+
} catch (IOException e) {
141+
fail(e.getMessage());
142+
} catch (ResourceFilterException e) {
143+
fail(e.getMessage());
144+
}
145+
}
146+
147+
@Test
148+
public void testMerge() {
149+
String[] baseLines = {
150+
"module,key,value",
151+
"Japanese Foods,ramen,Ramen",
152+
"Italian Foods,minestrone,Minestrone",
153+
"Japanese Foods,sushi,Sushi",
154+
"Italian Foods,pizza,Pizza",
155+
"Italian Foods,spaghetti,Spaghetti"
156+
};
157+
158+
TestResourceStringData[] testDataJapanese = {
159+
new TestResourceStringData("sushi", "寿司", 1),
160+
new TestResourceStringData("ramen", "ラーメン", 2),
161+
new TestResourceStringData("tempura", "天ぷら", 3)
162+
};
163+
TestResourceStringData[] testDataItalian = {
164+
new TestResourceStringData("spaghetti", "スパゲッティ", 1),
165+
new TestResourceStringData("pizza", "ピザ", 2)
166+
};
167+
168+
String[] expectedLines = {
169+
"module,key,value",
170+
"Japanese Foods,ramen,ラーメン",
171+
"Italian Foods,minestrone,Minestrone",
172+
"Japanese Foods,sushi,寿司",
173+
"Italian Foods,pizza,ピザ",
174+
"Italian Foods,spaghetti,スパゲッティ"
175+
};
176+
177+
Map<String, LanguageBundle> testDataMap = new LinkedHashMap<>();
178+
testDataMap.put("Japanese Foods", TestUtils.createLanguageBundle(testDataJapanese));
179+
testDataMap.put("Italian Foods", TestUtils.createLanguageBundle(testDataItalian));
180+
181+
MultiBundleResourceFilter filter = ResourceFilterFactory.getMultiBundleResourceFilter(MultiBundleCSVFilter.ID);
182+
try (InputStream baseStream = TestUtils.creteInputStream(baseLines);
183+
ByteArrayOutputStream outStream = new ByteArrayOutputStream()) {
184+
filter.merge(baseStream, outStream, testDataMap, new FilterOptions(Locale.JAPANESE));
185+
TestUtils.compareLines(expectedLines, outStream.toByteArray());
186+
} catch (IOException e) {
187+
fail(e.getMessage());
188+
} catch (ResourceFilterException e) {
189+
fail(e.getMessage());
190+
}
191+
}
108192
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Copyright IBM Corp. 2018
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 com.ibm.g11n.pipeline.example;
17+
18+
import static org.junit.Assert.assertEquals;
19+
import static org.junit.Assert.fail;
20+
21+
import java.io.BufferedReader;
22+
import java.io.BufferedWriter;
23+
import java.io.ByteArrayInputStream;
24+
import java.io.ByteArrayOutputStream;
25+
import java.io.IOException;
26+
import java.io.InputStream;
27+
import java.io.InputStreamReader;
28+
import java.io.OutputStreamWriter;
29+
import java.io.PrintWriter;
30+
import java.nio.charset.StandardCharsets;
31+
32+
import com.ibm.g11n.pipeline.resfilter.LanguageBundle;
33+
import com.ibm.g11n.pipeline.resfilter.LanguageBundleBuilder;
34+
35+
class TestUtils {
36+
static LanguageBundle createLanguageBundle(TestResourceStringData[] entries) {
37+
LanguageBundleBuilder lbb = new LanguageBundleBuilder(false);
38+
for (TestResourceStringData entry : entries) {
39+
lbb.addResourceString(entry.key, entry.value, entry.seq);
40+
}
41+
return lbb.build();
42+
}
43+
44+
static InputStream creteInputStream(String[] lines) throws IOException {
45+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
46+
try (PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(baos, StandardCharsets.UTF_8)))) {
47+
for (String line : lines) {
48+
pw.println(line);
49+
}
50+
}
51+
return new ByteArrayInputStream(baos.toByteArray());
52+
}
53+
54+
static void compareLines(String[] expectedLines, byte[] actual) {
55+
try (BufferedReader reader = new BufferedReader(
56+
new InputStreamReader(new ByteArrayInputStream(actual), StandardCharsets.UTF_8))) {
57+
int idx = 0;
58+
String line;
59+
while ((line = reader.readLine()) != null) {
60+
if (idx >= expectedLines.length) {
61+
break;
62+
}
63+
String expected = expectedLines[idx++];
64+
assertEquals("Output line " + idx, expected, line);
65+
}
66+
assertEquals("Number of output lines", expectedLines.length, idx);
67+
} catch (IOException e) {
68+
fail(e.getMessage());
69+
}
70+
}
71+
}

0 commit comments

Comments
 (0)