package com.gh.mygreen.xlsmapper.fieldprocessor;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import static com.gh.mygreen.xlsmapper.TestUtils.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.junit.BeforeClass;
import org.junit.Test;
import com.gh.mygreen.xlsmapper.XlsMapper;
import com.gh.mygreen.xlsmapper.annotation.XlsSheet;
import com.gh.mygreen.xlsmapper.annotation.XlsSheetName;
import com.gh.mygreen.xlsmapper.fieldprocessor.processor.SheetNameProcessor;
import com.gh.mygreen.xlsmapper.validation.SheetBindingErrors;
/**
* {@link SheetNameProcessor}のテスタ
* アノテーション{@link XlsSheetName}のテスタ。
*
* @version 1.0
* @since 0.5
* @author T.TSUCHIE
*
*/
public class AnnoSheetNameTest {
/**
* テスト結果ファイルの出力ディレクトリ
*/
private static File OUT_DIR;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
OUT_DIR = createOutDir();
}
/**
* 読み込み時のテスト
* @since 1.0
*/
@Test
public void test_load_sheetName_name() throws Exception {
XlsMapper mapper = new XlsMapper();
mapper.getConig().setContinueTypeBindFailure(true);
try(InputStream in = new FileInputStream("src/test/data/anno_SheetName.xlsx")) {
SheetBindingErrors errors = new SheetBindingErrors(NormalSheet.class);
NormalSheet sheet = mapper.load(in, NormalSheet.class, errors);
assertThat(sheet.sheetName, is("シート名(1)"));
}
}
/**
* 読み込み時のテスト - メソッドに付与したアノテーション
* @since 1.0
*/
@Test
public void test_load_sheetName_methodAnno() throws Exception {
XlsMapper mapper = new XlsMapper();
mapper.getConig().setContinueTypeBindFailure(true);
try(InputStream in = new FileInputStream("src/test/data/anno_SheetName.xlsx")) {
SheetBindingErrors errors = new SheetBindingErrors(MethodAnnoSheet.class);
MethodAnnoSheet sheet = mapper.load(in, MethodAnnoSheet.class, errors);
assertThat(sheet.sheetName, is("メソッドに付与したアノテーション"));
}
}
/**
* 書き込みのテスト - 通常のデータ
*/
@Test
public void test_save_sheetName_name() throws Exception {
// テストデータの作成
final NormalSheet outSheet = new NormalSheet();
// ファイルへの書き込み
XlsMapper mapper = new XlsMapper();
mapper.getConig().setContinueTypeBindFailure(true);
File outFile = new File(OUT_DIR, "anno_SheetName_out.xlsx");
try(InputStream template = new FileInputStream("src/test/data/anno_SheetName_template.xlsx");
OutputStream out = new FileOutputStream(outFile)) {
mapper.save(template, out, outSheet);
}
// 書き込んだファイルを読み込み値の検証を行う。
try(InputStream in = new FileInputStream(outFile)) {
SheetBindingErrors errors = new SheetBindingErrors(NormalSheet.class);
NormalSheet sheet = mapper.load(in, NormalSheet.class, errors);
assertThat(outSheet.sheetName, is("シート名(1)"));
assertThat(sheet.sheetName, is(outSheet.sheetName));
}
}
/**
* 書き込みのテスト - メソッドに付与したアノテーション
* @since 1.0
*/
@Test
public void test_save_sheetName_methodAnno() throws Exception {
// テストデータの作成
final MethodAnnoSheet outSheet = new MethodAnnoSheet();
// ファイルへの書き込み
XlsMapper mapper = new XlsMapper();
mapper.getConig().setContinueTypeBindFailure(true);
File outFile = new File(OUT_DIR, "anno_SheetName_out.xlsx");
try(InputStream template = new FileInputStream("src/test/data/anno_SheetName_template.xlsx");
OutputStream out = new FileOutputStream(outFile)) {
mapper.save(template, out, outSheet);
}
// 書き込んだファイルを読み込み値の検証を行う。
try(InputStream in = new FileInputStream(outFile)) {
SheetBindingErrors errors = new SheetBindingErrors(MethodAnnoSheet.class);
MethodAnnoSheet sheet = mapper.load(in, MethodAnnoSheet.class, errors);
assertThat(outSheet.sheetName, is("メソッドに付与したアノテーション"));
assertThat(sheet.sheetName, is(outSheet.sheetName));
}
}
/**
* 名前によるシート指定
*
*/
@XlsSheet(name="シート名(1)")
private static class NormalSheet {
@XlsSheetName
private String sheetName;
}
/**
* メソッドにアノテーションを付与。
* @since 1.0
*
*/
@XlsSheet(name="メソッドに付与したアノテーション")
private static class MethodAnnoSheet {
private String sheetName;
@XlsSheetName
public String getSheetName() {
return sheetName;
}
@XlsSheetName
public void setSheetName(String sheetName) {
this.sheetName = sheetName;
}
}
}