package jp.terasoluna.fw.file.dao.standard;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import jp.terasoluna.fw.file.annotation.NullStringConverter;
import jp.terasoluna.fw.file.annotation.PaddingType;
import jp.terasoluna.fw.file.dao.FileException;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;
import org.mockito.Mockito;
/**
* {@link jp.terasoluna.fw.file.dao.standard.VariableFileLineWriter} クラスのテスト。
* <p>
* <h4>【クラスの概要】</h4> ファイル行オブジェクトからデータを読み込み、1行分のデータを可変長形式で ファイルに書き込む。<br>
* AbstractFileLineWriterのサブクラス。
* <p>
* @see jp.terasoluna.fw.file.dao.standard.VariableFileLineWriter
*/
public class VariableFileLineWriterTest {
private static final String TEMP_FILE_NAME = VariableFileLineWriterTest.class
.getResource("VariableFileLineWriterTest_tmp.txt").getPath();
@Before
public void setUp() throws Exception {
// ファイルの初期化
File file = new File(TEMP_FILE_NAME);
file.delete();
file.createNewFile();
}
@AfterClass
public static void afterClass() throws Exception {
// ファイルの初期化
File file = new File(TEMP_FILE_NAME);
file.delete();
file.createNewFile();
}
/**
* testVariableFileLineWriter01() <br>
* <br>
* (正常系) <br>
* 観点:E, F <br>
* <br>
* 入力値:(引数) fileName:"(パス)VariableFileLineWriter_testVariableFileLineWriter01.txt"<br>
* (引数) clazz:FileFormatアノテーションを持ち、delimiter、encloseCharが初期値<br>
* (引数) columnFormatterMap:以下の要素を持つMap<String, ColumnFormatter>インスタンス<br>
* ・"java.lang.String"=NullColumnFormatter.java<br>
* <br>
* 期待値:(状態変化) AbstractFileLineWriter#init():1回呼ばれること<br>
* (状態変化) AbstractFileLineWriter#AbstractFileLineWriter():1回呼ばれること。<br>
* 引数が渡ってくることを確認する。<br>
* (状態変化) this.encloseChar:parameterClassのアノテーションFileFormatのencloseChar()の値。<br>
* (状態変化) this.delimiter:parameterClassのアノテーションFileFormatのdelimiter()の値。<br>
* <br>
* 正常パターン<br>
* @FileFormatがすべてデフォルト値の場合に、コンストラクタの呼出が正常に行われることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testVariableFileLineWriter01() throws Exception {
// テスト対象のインスタンス化
// コンストラクタなので不要
// 引数の設定
String fileName = TEMP_FILE_NAME;
Class<VariableFileLineWriter_Stub01> clazz = VariableFileLineWriter_Stub01.class;
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
// 前提条件の設定
// なし
// テスト実施
VariableFileLineWriter<VariableFileLineWriter_Stub01> result = null;
try {
result = new VariableFileLineWriter<VariableFileLineWriter_Stub01>(fileName, clazz, columnFormatterMap);
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(Character.MIN_VALUE, ReflectionTestUtils.getField(
result, "encloseChar"));
assertEquals(',', ReflectionTestUtils.getField(result,
"delimiter"));
} finally {
// テスト対象のクローズ処理
if (result != null) {
result.closeFile();
}
}
}
/**
* testVariableFileLineWriter02() <br>
* <br>
* (異常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) fileName:"(パス)VariableFileLineWriter_testVariableFileLineWriter02.txt"<br>
* (引数) clazz:FileFormatアノテーションを持ち、delimiterが'\u0000'、encloseCharが'\"'<br>
* (引数) columnFormatterMap:以下の要素を持つMap<String, ColumnFormatter>インスタンス<br>
* ・"java.lang.String"=NullColumnFormatter.java<br>
* <br>
* 期待値:(状態変化) AbstractFileLineWriter#init():呼ばれないこと。<br>
* (状態変化) AbstractFileLineWriter#AbstractFileLineWriter():1回呼ばれること。<br>
* 引数が渡ってくることを確認する。<br>
* (状態変化) 例外:"Delimiter can not use '\u0000'."のメッセージ、IllegalStateException、ファイル名を持つFileExceptionが発生する。<br>
* <br>
* 例外。@FileFormatのdelimiterに'\u0000'を設定した場合、例外が発生することを確認する。<br>
* ファイル名が入力値のfileNameに一致することを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testVariableFileLineWriter02() throws Exception {
// テスト対象のインスタンス化
// コンストラクタなので不要
// 引数の設定
String fileName = TEMP_FILE_NAME;
Class<VariableFileLineWriter_Stub04> clazz = VariableFileLineWriter_Stub04.class;
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
// 前提条件の設定
// なし
try {
// テスト実施
new VariableFileLineWriter<VariableFileLineWriter_Stub04>(fileName, clazz, columnFormatterMap);
fail("FileExceptionがスローされませんでした。");
} catch (FileException e) {
// 返却値の確認
// なし
// 状態変化の確認
assertEquals(FileException.class, e.getClass());
assertEquals("Delimiter can not use '\\u0000'.", e.getMessage());
assertEquals(IllegalStateException.class, e.getCause().getClass());
assertEquals(fileName, e.getFileName());
}
}
/**
* testVariableFileLineWriter03() <br>
* <br>
* (正常系) <br>
* 観点:E, F <br>
* <br>
* 入力値:(引数) fileName:"(パス)VariableFileLineWriter_testVariableFileLineWriter03.txt"<br>
* (引数) clazz:FileFormatアノテーションを持ち、delimiterが'#'<br>
* (引数) columnFormatterMap:以下の要素を持つMap<String, ColumnFormatter>インスタンス<br>
* ・"java.lang.String"=NullColumnFormatter.java<br>
* <br>
* 期待値:(状態変化) AbstractFileLineWriter#init():呼ばれること<br>
* (状態変化) AbstractFileLineWriter#AbstractFileLineWriter():1回呼ばれること。<br>
* 引数が渡ってくることを確認する。<br>
* (状態変化) this.encloseChar:parameterClassのアノテーションFileFormatのencloseChar()の値。<br>
* (状態変化) this.delimiter:parameterClassのアノテーションFileFormatのdelimiter()の値。<br>
* <br>
* @FileFormatのdelimiterに'#'を設定、encloseCharに'"'を設定した場合、コンストラクタの呼出が正常に行われることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testVariableFileLineWriter03() throws Exception {
// テスト対象のインスタンス化
// コンストラクタなので不要
// 引数の設定
String fileName = TEMP_FILE_NAME;
Class<VariableFileLineWriter_Stub07> clazz = VariableFileLineWriter_Stub07.class;
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
// 前提条件の設定
// なし
VariableFileLineWriter<VariableFileLineWriter_Stub07> result = null;
try {
// テスト実施
result = new VariableFileLineWriter<VariableFileLineWriter_Stub07>(fileName, clazz, columnFormatterMap);
// 返却値の確認
// なし
// 状態変化の確認
assertEquals('"', ReflectionTestUtils.getField(result,
"encloseChar"));
assertEquals('#', ReflectionTestUtils.getField(result,
"delimiter"));
} finally {
// テスト対象のクローズ処理
if (result != null) {
result.closeFile();
}
}
}
/**
* 異常系<br>
* 改行文字に区切り文字が含まれる
*/
@Test
public void testVariableFileLineWriter04() throws Exception {
// 引数の設定
String fileName = TEMP_FILE_NAME;
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
// テスト実施
try {
new VariableFileLineWriter<VariableFileLine_Stub01>(fileName, VariableFileLine_Stub01.class, columnFormatterMap);
fail();
} catch (FileException e) {
assertEquals("delimiter is the same as lineFeedChar and is no use.",
e.getMessage());
assertEquals(fileName, e.getFileName());
assertSame(IllegalStateException.class, e.getCause().getClass());
}
}
/**
* 異常系<br>
* 改行文字と区切り文字が同一
*/
@Test
public void testVariableFileLineWriter05() throws Exception {
// 引数の設定
String fileName = TEMP_FILE_NAME;
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
// テスト実施
try {
new VariableFileLineWriter<VariableFileLine_Stub02>(fileName, VariableFileLine_Stub02.class, columnFormatterMap);
fail();
} catch (FileException e) {
assertEquals("delimiter is the same as lineFeedChar and is no use.",
e.getMessage());
assertEquals(fileName, e.getFileName());
assertSame(IllegalStateException.class, e.getCause().getClass());
}
}
/**
* 異常系<br>
* ファイル行オブジェクトにOutputFileColumnアノテーションが無し
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testVariableFileLineWriter06() throws Exception {
// 引数の設定
String fileName = TEMP_FILE_NAME;
Class<FileLineObject_Empty> clazz = FileLineObject_Empty.class;
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
// テスト実施
try {
new VariableFileLineWriter<FileLineObject_Empty>(fileName, clazz, columnFormatterMap);
fail("FileExceptionがスローされませんでした。");
} catch (FileException e) {
// 返却値なし
// 状態変化の確認
assertEquals("OutputFileColumn is not found.", e.getMessage());
assertEquals(fileName, e.getFileName());
assertEquals(IllegalStateException.class, e.getCause().getClass());
}
}
/**
* testGetColumn01() <br>
* <br>
* (正常系) <br>
* 観点:E, F <br>
* <br>
* 入力値:(引数) t:以下のカラムを一つ持つVariableFileLineWriterスタブ<br>
* "abcdef"<br>
* (引数) index:0<br>
* (状態) this.encloseChar:Charcator.MIN_VALUE<br>
* <br>
* 期待値:(戻り値) String:abcdef<br>
* <br>
* 正しく値を取得することを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testGetColumn01() throws Exception {
// テスト対象のインスタンス化
String fileName = TEMP_FILE_NAME;
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
VariableFileLineWriter<VariableFileLineWriter_Stub05> lineWriter = Mockito
.spy(new VariableFileLineWriter<VariableFileLineWriter_Stub05>(fileName, VariableFileLineWriter_Stub05.class, columnFormatterMap));
// 引数の設定
VariableFileLineWriter_Stub05 t = new VariableFileLineWriter_Stub05();
t.setColumn01("abcdef");
int index = 0;
// 前提条件の設定
// テスト対象のインスタンス化時に設定されている。
try {
// テスト実施
String result = lineWriter.getColumn(t, index);
// 返却値の確認
assertEquals("abcdef", result);
} finally {
// テスト対象のクローズ処理
lineWriter.closeFile();
}
}
/**
* testGetColumn02() <br>
* <br>
* (正常系 <br>
* 観点:E, F <br>
* <br>
* 入力値:(引数) t:以下のカラムを一つ持つVariableFileLineWriterスタブ<br>
* "abcdef"<br>
* (引数) index:0<br>
* (状態) this.encloseChar:'\"'<br>
* <br>
* 期待値:(戻り値) String:abcdef<br>
* <br>
* 正しく値を取得することを確認する。<br>
* 出力対象にエスケープ対象の文字(囲み文字)が無い場合は通常の文字 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testGetColumn02() throws Exception {
// テスト対象のインスタンス化
String fileName = TEMP_FILE_NAME;
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
VariableFileLineWriter<VariableFileLineWriter_Stub06> lineWriter = new VariableFileLineWriter<VariableFileLineWriter_Stub06>(fileName, VariableFileLineWriter_Stub06.class, columnFormatterMap);
// 引数の設定
VariableFileLineWriter_Stub06 t = new VariableFileLineWriter_Stub06();
t.setColumn01("abcdef");
int index = 0;
// 前提条件の設定
// テスト対象のインスタンス化時に設定されている。
try {
// テスト実施
String result = lineWriter.getColumn(t, index);
// 返却値の確認
assertEquals("abcdef", result);
} finally {
// テスト対象のクローズ処理
lineWriter.closeFile();
}
}
/**
* testGetColumn03() <br>
* <br>
* (正常系) <br>
* 観点:E, F <br>
* <br>
* 入力値:(引数) t:以下のカラムを一つ持つVariableFileLineWriterスタブ<br>
* "ab\"cdef"<br>
* (引数) index:0<br>
* (状態) this.encloseChar:'\"'<br>
* <br>
* 期待値:(戻り値) String:"ab\"\"cdef"<br>
* <br>
* 正しく値を取得することを確認する。<br>
* 出力対象にエスケープ対象の文字(囲み文字)がある場合に、エスケープされる <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testGetColumn03() throws Exception {
// テスト対象のインスタンス化
String fileName = TEMP_FILE_NAME;
Map<String, ColumnFormatter> textGetterMap = new HashMap<String, ColumnFormatter>();
textGetterMap.put("java.lang.String", new NullColumnFormatter());
VariableFileLineWriter<VariableFileLineWriter_Stub06> lineWriter = new VariableFileLineWriter<VariableFileLineWriter_Stub06>(fileName, VariableFileLineWriter_Stub06.class, textGetterMap);
// 引数の設定
VariableFileLineWriter_Stub06 t = new VariableFileLineWriter_Stub06();
t.setColumn01("ab\"cdef");
int index = 0;
// 前提条件の設定
// テスト対象のインスタンス化時に設定されている。
try {
// テスト実施
String result = lineWriter.getColumn(t, index);
// 返却値の確認
assertEquals("ab\"\"cdef", result);
} finally {
// テスト対象のクローズ処理
lineWriter.closeFile();
}
}
/**
* testGetColumn04() <br>
* <br>
* (正常系) <br>
* 観点:G <br>
* <br>
* 入力値:(引数) t:null<br>
* (引数) index:0<br>
* (状態) this.encloseChar:'\"'<br>
* <br>
* 期待値:(状態変化) 例外:NullPointerException<br>
* <br>
* 引数tをnullにすると、NullPointerExceptionがスローされることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testGetColumn04() throws Exception {
// テスト対象のインスタンス化
String fileName = TEMP_FILE_NAME;
Map<String, ColumnFormatter> textGetterMap = new HashMap<String, ColumnFormatter>();
textGetterMap.put("java.lang.String", new NullColumnFormatter());
VariableFileLineWriter<VariableFileLineWriter_Stub06> lineWriter = new VariableFileLineWriter<VariableFileLineWriter_Stub06>(fileName, VariableFileLineWriter_Stub06.class, textGetterMap);
// 引数の設定
VariableFileLineWriter_Stub06 t = null;
int index = 0;
// 前提条件の設定
// テスト対象のインスタンス化時に設定されている。
// テスト実施
try {
lineWriter.getColumn(t, index);
fail("NullPointerExceptionがスローされませんでした。");
} catch (NullPointerException e) {
assertEquals(NullPointerException.class, e.getClass());
} finally {
// テスト対象のクローズ処理
lineWriter.closeFile();
}
}
/**
* testGetColumn05() <br>
* <br>
* (正常系) <br>
* 観点:E, F <br>
* <br>
* 入力値:(引数) t:以下のカラムを持つVariableFileLineWriterスタブ<br>
* "abcdef"<br>
* "aaabbb"<br>
* (引数) index:1<br>
* (状態) this.encloseChar:'\"'<br>
* <br>
* 期待値:(戻り値) String:aaabbb<br>
* <br>
* indexの値に紐づくカラムの値(囲み文字なしの場合)が取得できることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testGetColumn05() throws Exception {
// テスト対象のインスタンス化
String fileName = TEMP_FILE_NAME;
Map<String, ColumnFormatter> textGetterMap = new HashMap<String, ColumnFormatter>();
textGetterMap.put("java.lang.String", new NullColumnFormatter());
VariableFileLineWriter<VariableFileLineWriter_Stub08> lineWriter = new VariableFileLineWriter<VariableFileLineWriter_Stub08>(fileName, VariableFileLineWriter_Stub08.class, textGetterMap);
// 引数の設定
VariableFileLineWriter_Stub08 t = new VariableFileLineWriter_Stub08();
t.setColumn01("abcdef");
t.setColumn02("aaabbb");
int index = 1;
// 前提条件の設定
// テスト対象のインスタンス化時に設定されている。
try {
// テスト実施
String result = lineWriter.getColumn(t, index);
// 返却値の確認
assertEquals("aaabbb", result);
} finally {
// テスト対象のクローズ処理
lineWriter.closeFile();
}
}
/**
* testGetDelimiter01() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(状態) this.delimiter:not null<br>
* ','<br>
* <br>
* 期待値:(戻り値) delimiter:not null<br>
* ','<br>
* <br>
* delimiterのgetterメソッドが正しく値を取得することを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testGetDelimiter01() throws Exception {
// テスト対象のインスタンス化
String fileName = TEMP_FILE_NAME;
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
VariableFileLineWriter<VariableFileLineWriter_Stub01> lineWriter = new VariableFileLineWriter<VariableFileLineWriter_Stub01>(fileName, VariableFileLineWriter_Stub01.class, columnFormatterMap);
// 引数の設定
// なし
// 前提条件の設定
ReflectionTestUtils.setField(lineWriter, "delimiter", ',');
try {
// テスト実施
char result = lineWriter.getDelimiter();
// 返却値の確認
assertEquals(',', result);
// 状態変化の確認
// なし
} finally {
// テスト対象のクローズ処理
lineWriter.closeFile();
}
}
/**
* testGetEncloseChar01() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(状態) this.encloseChar:not null<br>
* '\u0000'<br>
* <br>
* 期待値:(戻り値) encloseChar:not null<br>
* '\u0000'<br>
* <br>
* encloseCharのgetterメソッドが正しく値を取得することを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testGetEncloseChar01() throws Exception {
// テスト対象のインスタンス化
String fileName = TEMP_FILE_NAME;
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
VariableFileLineWriter<VariableFileLineWriter_Stub01> lineWriter = new VariableFileLineWriter<VariableFileLineWriter_Stub01>(fileName, VariableFileLineWriter_Stub01.class, columnFormatterMap);
// 引数の設定
// なし
// 前提条件の設定
ReflectionTestUtils.setField(lineWriter, "encloseChar", '\u0000');
try {
// テスト実施
char result = lineWriter.getEncloseChar();
// 返却値の確認
assertEquals('\u0000', result);
// 状態変化の確認
// なし
} finally {
// テスト対象のクローズ処理
lineWriter.closeFile();
}
}
/**
* 正常系<br>
* FileFormatのencloseCharとOutputFileColumnのcolumnEncloseCharによって、個々のカラムに囲み文字を設定
* @throws Exception
*/
@Test
public void testPrintDataLine01() throws Exception {
// 前処理(ファイル)
String fileName = TEMP_FILE_NAME;
// 前処理(試験対象)
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("int", new IntColumnFormatter());
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
VariableFileLineWriter<CSVFileLine_Stub01> fileLineWriter = new VariableFileLineWriter<CSVFileLine_Stub01>(fileName, CSVFileLine_Stub01.class, columnFormatterMap);
// 前処理(引数)
CSVFileLine_Stub01 t1 = new CSVFileLine_Stub01();
CSVFileLine_Stub01 t2 = new CSVFileLine_Stub01();
CSVFileLine_Stub01 t3 = new CSVFileLine_Stub01();
t1.setColumn1("1");
t1.setColumn2("22");
t1.setColumn3("333");
t1.setColumn4("4444");
t2.setColumn1("5");
t2.setColumn2("66");
t2.setColumn3("777");
t2.setColumn4("8888");
t3.setColumn1("9");
t3.setColumn2("AA");
t3.setColumn3("BBB");
t3.setColumn4("CCCC");
// テスト実施
fileLineWriter.printDataLine(t1);
fileLineWriter.printDataLine(t2);
fileLineWriter.printDataLine(t3);
fileLineWriter.closeFile();
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), System
.getProperty("file.encoding")));
assertEquals("\"1\",22,333,|4444|", reader.readLine());
assertEquals("\"5\",66,777,|8888|", reader.readLine());
assertEquals("\"9\",AA,BBB,|CCCC|", reader.readLine());
} finally {
reader.close();
}
}
/**
* 正常系<br>
* FileFormatのencloseCharとOutputFileColumnのcolumnEncloseCharによって、個々のカラムに囲み文字を設定
* @throws Exception
*/
@Test
public void testPrintDataLine02() throws Exception {
// 前処理(ファイル)
String fileName = TEMP_FILE_NAME;
// 前処理(試験対象)
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("int", new IntColumnFormatter());
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
VariableFileLineWriter<CSVFileLine_Stub02> fileLineWriter = new VariableFileLineWriter<CSVFileLine_Stub02>(fileName, CSVFileLine_Stub02.class, columnFormatterMap);
// 前処理(引数)
CSVFileLine_Stub02 t1 = new CSVFileLine_Stub02();
CSVFileLine_Stub02 t2 = new CSVFileLine_Stub02();
CSVFileLine_Stub02 t3 = new CSVFileLine_Stub02();
t1.setColumn1("1");
t1.setColumn2("22");
t1.setColumn3("333");
t1.setColumn4("4444");
t2.setColumn1("5");
t2.setColumn2("66");
t2.setColumn3("777");
t2.setColumn4("8888");
t3.setColumn1("9");
t3.setColumn2("AA");
t3.setColumn3("BBB");
t3.setColumn4("CCCC");
// テスト実施
fileLineWriter.printDataLine(t1);
fileLineWriter.printDataLine(t2);
fileLineWriter.printDataLine(t3);
fileLineWriter.closeFile();
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), System
.getProperty("file.encoding")));
assertEquals("\"1\",'22',\"333\",|4444|", reader.readLine());
assertEquals("\"5\",'66',\"777\",|8888|", reader.readLine());
assertEquals("\"9\",'AA',\"BBB\",|CCCC|", reader.readLine());
} finally {
reader.close();
}
}
/**
* 正常系<br>
* キャッシュしているアノテーションの情報を利用している事を確認する。<br>
* @throws Exception
*/
@Test
public void testPrintDataLine03() throws Exception {
// 前処理(ファイル)
String fileName = TEMP_FILE_NAME;
// 前処理(試験対象)
Map<String, ColumnFormatter> columnFormatterMap = new HashMap<String, ColumnFormatter>();
columnFormatterMap.put("java.lang.String", new NullColumnFormatter());
VariableFileLineWriter<CSVFileLine_Stub03> fileLineWriter = new VariableFileLineWriter<CSVFileLine_Stub03>(fileName, CSVFileLine_Stub03.class, columnFormatterMap);
// 前処理(引数)
CSVFileLine_Stub03 t1 = new CSVFileLine_Stub03();
t1.setColumn1("1");
t1.setColumn2("22");
t1.setColumn3("333");
t1.setColumn4("4444");
// ファイル行オブジェクトに設定してあった値を全て上書き
// 以下の設定が適用されれば、ファイル行オブジェクトの
// アノテーションにアクセスしていないことになる。
char[] charArray = new char[] { 0, 0, 0, 0 };
// 前提条件
ReflectionTestUtils.setField(fileLineWriter, "lineFeedChar", "\r\n");
ReflectionTestUtils.setField(fileLineWriter, "delimiter", '_');
ReflectionTestUtils.setField(fileLineWriter, "outputFileColumns", null);
ReflectionTestUtils.setField(fileLineWriter, "columnFormats",
new String[] { "", "", "", "" });
ReflectionTestUtils.setField(fileLineWriter, "columnBytes", new int[] {
-1, -1, -1, -1 });
// ReflectionTestUtils.setField(fileLineWriter, "totalBytes", 0);
ReflectionTestUtils.setField(fileLineWriter, "paddingTypes",
new PaddingType[] { PaddingType.NONE, PaddingType.NONE,
PaddingType.NONE, PaddingType.NONE });
ReflectionTestUtils.setField(fileLineWriter, "paddingChars", charArray);
ReflectionTestUtils.setField(fileLineWriter, "trimChars", charArray);
ReflectionTestUtils.setField(fileLineWriter, "columnEncloseChar",
charArray);
ReflectionTestUtils.setField(fileLineWriter, "stringConverters",
new NullStringConverter[] { new NullStringConverter(),
new NullStringConverter(), new NullStringConverter(),
new NullStringConverter() });
// テスト実施
fileLineWriter.printDataLine(t1);
fileLineWriter.closeFile();
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), System
.getProperty("file.encoding")));
assertEquals("1_22_333_4444", reader.readLine());
} finally {
reader.close();
}
}
}