/*
* Copyright 2009-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.orangesignal.csv;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import com.orangesignal.csv.entryfilters.RegexEntryNameFilter;
import com.orangesignal.csv.filters.SimpleBeanFilter;
import com.orangesignal.csv.filters.SimpleCsvValueFilter;
import com.orangesignal.csv.handlers.BeanOrder;
import com.orangesignal.csv.handlers.CsvEntityListHandler;
import com.orangesignal.csv.handlers.StringArrayListHandler;
import com.orangesignal.csv.model.Sample;
import com.orangesignal.jlha.LhaFile;
import com.orangesignal.jlha.LhaInputStream;
import com.orangesignal.jlha.LhaOutputStream;
/**
* {@link Csv} クラスの単体テストです。
*
* @author Koji Sugisawa
*/
public class CsvTest {
private static final String path = "src/test/resources/";
private static final String encoding = "Windows-31J";
private static CsvConfig cfg;
private static List<String[]> data;
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();
@BeforeClass
public static void setUpBeforeClass() throws Exception {
cfg = new CsvConfig(',');
cfg.setIgnoreTrailingWhitespaces(true);
cfg.setIgnoreLeadingWhitespaces(true);
cfg.setIgnoreEmptyLines(true);
cfg.setSkipLines(1);
cfg.setUtf8bomPolicy(true);
final List<String[]> list = new ArrayList<String[]>(2);
list.add(new String[]{ "aaa", "b\nb\\\\b", "c\"cc" });
list.add(new String[]{ "zzz", "yyy", null });
data = Collections.unmodifiableList(list);
}
@Test
public void testLoadCsvReaderCsvHandlerOfT() throws IOException {
final CsvReader reader = new CsvReader(new InputStreamReader(new FileInputStream(new File(path, "n225.csv")), encoding), cfg);
try {
final List<String[]> list = Csv.load(reader, new StringArrayListHandler());
assertThat(list.size(), is(2694));
} finally {
Csv.closeQuietly(reader);
}
}
@Test
public void testLoadReaderCsvConfigCsvHandlerOfT() throws IOException {
final Reader reader = new InputStreamReader(new FileInputStream(new File(path, "n225.csv")), encoding);
try {
final List<String[]> list = Csv.load(reader, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
} finally {
Csv.closeQuietly(reader);
}
}
@Test
public void testLoadInputStreamStringCsvConfigCsvHandlerOfT() throws IOException {
final InputStream in = new FileInputStream(new File (path, "n225.csv"));
try {
final List<String[]> list = Csv.load(in, encoding, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
} finally {
Csv.closeQuietly(in);
}
}
@Test
public void testLoadInputStreamCsvConfigCsvHandlerOfT() throws IOException {
final InputStream in = new FileInputStream(new File(path, "n225.csv"));
try {
final List<String[]> list = Csv.load(in, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
} finally {
Csv.closeQuietly(in);
}
}
@Test
public void testLoadFileStringCsvConfigCsvHandlerOfT() throws IOException {
final List<String[]> list = Csv.load(new File(path, "n225.csv"), encoding, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
}
@Test
public void testLoadFileCsvConfigCsvHandlerOfT() throws IOException {
final List<String[]> list = Csv.load(new File(path, "n225.csv"), cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
}
@Test
public void testLoadLhaInputStreamStringCsvConfigCsvListHandlerOfTLhaEntryFilter() throws IOException {
final LhaInputStream lha = new LhaInputStream(new FileInputStream(new File(path, "n225.lzh")));
try {
final List<String[]> list = Csv.load(lha, encoding, cfg, new StringArrayListHandler(), new RegexEntryNameFilter("^.+\\.csv$"));
assertThat(list.size(), is(2694));
} finally {
Csv.closeQuietly(lha);
}
}
@Test
public void testLoadLhaInputStreamStringCsvConfigCsvListHandlerOfT() throws IOException {
final LhaInputStream lha = new LhaInputStream(new FileInputStream(new File(path, "n225.lzh")));
try {
final List<String[]> list = Csv.load(lha, encoding, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
} finally {
Csv.closeQuietly(lha);
}
}
@Test
public void testLoadLhaInputStreamCsvConfigCsvListHandlerOfTLhaEntryFilter() throws IOException {
final LhaInputStream lha = new LhaInputStream(new FileInputStream(new File(path, "n225.lzh")));
try {
final List<String[]> list = Csv.load(lha, cfg, new StringArrayListHandler(), new RegexEntryNameFilter("^.+\\.csv$"));
assertThat(list.size(), is(2694));
} finally {
Csv.closeQuietly(lha);
}
}
@Test
public void testLoadLhaInputStreamCsvConfigCsvListHandlerOfT() throws IOException {
final LhaInputStream lha = new LhaInputStream(new FileInputStream(new File(path, "n225.lzh")));
try {
final List<String[]> list = Csv.load(lha, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
} finally {
Csv.closeQuietly(lha);
}
}
@Test
public void testLoadLhaFileStringCsvConfigCsvListHandlerOfTLhaEntryFilter() throws IOException {
final LhaFile lha = new LhaFile(new File(path, "n225.lzh"));
try {
final List<String[]> list = Csv.load(lha, encoding, cfg, new StringArrayListHandler(), new RegexEntryNameFilter("^.+\\.csv$"));
assertThat(list.size(), is(2694));
} finally {
lha.close();
}
}
@Test
public void testLoadLhaFileStringCsvConfigCsvListHandlerOfT() throws IOException {
final LhaFile lha = new LhaFile(new File(path, "n225.lzh"));
try {
final List<String[]> list = Csv.load(lha, encoding, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
} finally {
lha.close();
}
}
@Test
public void testLoadLhaFileCsvConfigCsvListHandlerOfTLhaEntryFilter() throws IOException {
final LhaFile lha = new LhaFile(new File(path, "n225.lzh"));
try {
final List<String[]> list = Csv.load(lha, cfg, new StringArrayListHandler(), new RegexEntryNameFilter("^.+\\.csv$"));
assertThat(list.size(), is(2694));
} finally {
lha.close();
}
}
@Test
public void testLoadLhaFileCsvConfigCsvListHandlerOfT() throws IOException {
final LhaFile lha = new LhaFile(new File(path, "n225.lzh"));
try {
final List<String[]> list = Csv.load(lha, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
} finally {
lha.close();
}
}
@Test
public void testLoadZipInputStreamStringCsvConfigCsvListHandlerOfTZipEntryFilter() throws IOException {
final ZipInputStream zip = new ZipInputStream(new FileInputStream(new File(path, "sample.zip")));
try {
final List<String[]> list =
Csv.load(zip, "utf-8", cfg,
new StringArrayListHandler()
.filter(new SimpleCsvValueFilter().in(1, "あ","い","う","か","き","く"))
.offset(1)
.limit(3),
new RegexEntryNameFilter("^.+\\.csv$")
);
assertThat(list.size(), is(3));
assertThat(list.get(0)[1], is("い"));
assertThat(list.get(1)[1], is("う"));
assertThat(list.get(2)[1], is("く"));
} finally {
Csv.closeQuietly(zip);
}
}
@Test
public void testLoadZipInputStreamStringCsvConfigCsvListHandlerOfT() throws IOException {
final ZipInputStream zip = new ZipInputStream(new FileInputStream(new File(path, "n225.zip")));
try {
final List<String[]> list = Csv.load(zip, encoding, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
} finally {
Csv.closeQuietly(zip);
}
}
@Test
public void testLoadZipInputStreamCsvConfigCsvListHandlerOfTZipEntryFilter() throws IOException {
final ZipInputStream zip = new ZipInputStream(new FileInputStream(new File(path, "n225.zip")));
try {
final List<String[]> list = Csv.load(zip, cfg, new StringArrayListHandler(), new RegexEntryNameFilter("^.+\\.csv$"));
assertThat(list.size(), is(2694));
} finally {
Csv.closeQuietly(zip);
}
}
@Test
public void testLoadZipInputStreamCsvConfigCsvListHandlerOfT() throws IOException {
final ZipInputStream zip = new ZipInputStream(new FileInputStream(new File(path, "n225.zip")));
try {
final List<String[]> list = Csv.load(zip, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
} finally {
Csv.closeQuietly(zip);
}
}
@Test
public void testLoadZipFileStringCsvConfigCsvListHandlerOfTZipEntryFilter() throws IOException {
final ZipFile zip = new ZipFile(new File(path, "sample.zip"));
try {
final List<Sample> list = Csv.load(zip, "utf-8", cfg,
new CsvEntityListHandler<Sample>(Sample.class)
.filter(new SimpleBeanFilter().in("label", "あ","い","う","か","き","く"))
.order(BeanOrder.asc("no"))
.offset(1)
.limit(3),
new RegexEntryNameFilter("^.+\\.csv$")
);
assertThat(list.size(), is(3));
assertThat(list.get(0).label, is("き"));
assertThat(list.get(1).label, is("か"));
assertThat(list.get(2).label, is("う"));
} finally {
zip.close();
}
}
@Test
public void testLoadZipFileStringCsvConfigCsvListHandlerOfT() throws IOException {
final ZipFile zip = new ZipFile(new File(path, "n225.zip"));
try {
final List<String[]> list = Csv.load(zip, encoding, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
} finally {
zip.close();
}
}
@Test
public void testLoadZipFileCsvConfigCsvListHandlerOfTZipEntryFilter() throws IOException {
final ZipFile zip = new ZipFile(new File(path, "n225.zip"));
try {
final List<String[]> list = Csv.load(zip, cfg, new StringArrayListHandler(), new RegexEntryNameFilter("^.+\\.csv$"));
assertThat(list.size(), is(2694));
} finally {
zip.close();
}
}
@Test
public void testLoadZipFileCsvConfigCsvListHandlerOfT() throws IOException {
final ZipFile zip = new ZipFile(new File(path, "n225.zip"));
try {
final List<String[]> list = Csv.load(zip, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2694));
} finally {
zip.close();
}
}
@Test
public void testSaveTCsvWriterCsvHandlerOfT() throws IOException {
final File file = tempFolder.newFile("test.csv");
final CsvWriter writer = new CsvWriter(new OutputStreamWriter(new FileOutputStream(file), encoding), cfg);
try {
Csv.save(data, writer, new StringArrayListHandler());
} finally {
Csv.closeQuietly(writer);
}
final List<String[]> list = Csv.load(file, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2));
}
@Test
public void testSaveTWriterCsvConfigCsvHandlerOfT() throws IOException {
final File file = tempFolder.newFile("test.csv");
final Writer writer = new OutputStreamWriter(new FileOutputStream(file), encoding);
try {
Csv.save(data, writer, cfg, new StringArrayListHandler());
} finally {
Csv.closeQuietly(writer);
}
final List<String[]> list = Csv.load(file, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2));
}
@Test
public void testSaveTOutputStreamStringCsvConfigCsvHandlerOfT() throws IOException {
final File file = tempFolder.newFile("test.csv");
final OutputStream out = new FileOutputStream(file);
try {
Csv.save(data, out, encoding, cfg, new StringArrayListHandler());
} finally {
Csv.closeQuietly(out);
}
final List<String[]> list = Csv.load(file, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2));
}
@Test
public void testSaveTOutputStreamCsvConfigCsvHandlerOfT() throws IOException {
final File file = tempFolder.newFile("test.csv");
final OutputStream out = new FileOutputStream(file);
try {
Csv.save(data, out, cfg, new StringArrayListHandler());
} finally {
Csv.closeQuietly(out);
}
final List<String[]> list = Csv.load(file, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2));
}
@Test
public void testSaveTFileStringCsvConfigCsvHandlerOfT() throws IOException {
final File file = tempFolder.newFile("test.csv");
Csv.save(data, file, encoding, cfg, new StringArrayListHandler());
final List<String[]> list = Csv.load(file, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2));
}
@Test
public void testSaveTFileCsvConfigCsvHandlerOfT() throws IOException {
final File file = tempFolder.newFile("test.csv");
Csv.save(data, file, cfg, new StringArrayListHandler());
final List<String[]> list = Csv.load(file, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2));
}
@Test
public void testSaveListOfTLhaOutputStreamStringCsvConfigCsvListHandlerOfTString() throws IOException {
final File file = tempFolder.newFile("test.lzh");
final LhaOutputStream lha = new LhaOutputStream(new FileOutputStream(file));
try {
Csv.save(data, lha, encoding, cfg, new StringArrayListHandler(), "test.csv");
} finally {
Csv.closeQuietly(lha);
}
final LhaFile lhaFile = new LhaFile(file);
try {
final List<String[]> list = Csv.load(lhaFile, encoding, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2));
} finally {
lhaFile.close();
}
}
@Test
public void testSaveListOfTLhaOutputStreamCsvConfigCsvListHandlerOfTString() throws IOException {
final File file = tempFolder.newFile("test.lzh");
final LhaOutputStream lha = new LhaOutputStream(new FileOutputStream(file));
try {
Csv.save(data, lha, cfg, new StringArrayListHandler(), "test.csv");
} finally {
Csv.closeQuietly(lha);
}
final LhaFile lhaFile = new LhaFile(file);
try {
final List<String[]> list = Csv.load(lhaFile, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2));
} finally {
lhaFile.close();
}
}
@Test
public void testSaveListOfTZipOutputStreamStringCsvConfigCsvListHandlerOfTString() throws IOException {
final File file = tempFolder.newFile("test.zip");
final ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(file));
try {
Csv.save(data, zip, encoding, cfg, new StringArrayListHandler(), "test.csv");
} finally {
Csv.closeQuietly(zip);
}
final ZipFile zipFile = new ZipFile(file);
try {
final List<String[]> list = Csv.load(zipFile, encoding, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2));
} finally {
zipFile.close();
}
}
@Test
public void testSaveListOfTZipOutputStreamCsvConfigCsvListHandlerOfTString() throws IOException {
final File file = tempFolder.newFile("test.zip");
final ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(file));
try {
Csv.save(data, zip, cfg, new StringArrayListHandler(), "test.csv");
} finally {
Csv.closeQuietly(zip);
}
final ZipFile zipFile = new ZipFile(file);
try {
final List<String[]> list = Csv.load(zipFile, cfg, new StringArrayListHandler());
assertThat(list.size(), is(2));
} finally {
zipFile.close();
}
}
}