/*
 * DelimitedLineRecordWriterConfigTest.java
 * Copyright (C) 2008 Cyber Beans Corporation. All rights reserved.
 */
package jp.co.cybec.cb3.accessor.fileaccess.flat.delimited;

import jp.co.cybec.cb3.accessor.fileaccess.flat.delimited.DelimitedLineRecordFieldConfig;
import jp.co.cybec.cb3.accessor.fileaccess.flat.delimited.DelimitedLineRecordWriterConfig;
import junit.framework.Assert;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * {@link DelimitedLineRecordWriterConfig} のテストケース。
 * @author Juanjuan Wang
 */
public class DelimitedLineRecordWriterConfigTest {
	private DelimitedLineRecordWriterConfig target = null;

	/**
	 * @throws Exception
	 */
	@Before
	public void setUp() throws Exception {
		target = new DelimitedLineRecordWriterConfig();
	}

	/**
	 * @throws Exception
	 */
	@After
	public void tearDown() throws Exception {
	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#getFilepath()} のためのテスト・メソッド。
	 * 正しいファイルパスが取得できることを確認する。
	 */
	@Test
	public void testGetFilepath() {
		target.setFilepath("c:\test.csv");
		Assert.assertEquals("c:\test.csv",target.getFilepath());
	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#setFilepath(String)} のためのテスト・メソッド。
	 * 正しいファイルパスが設定できることを確認する。
	 */
	@Test
	public void testSetFilepath() {
		target.setFilepath("c:\test.csv");
		Assert.assertEquals("c:\test.csv",target.getFilepath());
	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#getAppend()} のためのテスト・メソッド。
	 * 正しいファイルオープンモードが取得できることを確認する。
	 */
	@Test
	public void testGetAppend() {
		target.setAppend("true");
		Assert.assertEquals("true",target.getAppend());
	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#setAppend(String)} のためのテスト・メソッド。
	 * 正しいファイルオープンモードが設定できることを確認する。
	 */
	@Test
	public void testSetAppend() {
		target.setAppend("true");
		Assert.assertEquals("true",target.getAppend());
	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#getFieldList()} のためのテスト・メソッド。
	 * 正しいフィールド情報リストが取得できることを確認する。
	 */
	@Test
	public void testGetFieldList() {
		// 結果データ
		DelimitedLineRecordFieldConfig field = new DelimitedLineRecordFieldConfig();
		field.setAlign("left");
		target.addField(field);
		field.setName("name");
		target.addField(field);
		field.setPadding(" ");
		target.addField(field);
		field.setPattern("0");
		target.addField(field);
		field.setPatternClass("pattern_class");
		target.addField(field);
		field.setLength("10");
		target.addField(field);
		field.setType("type");
		target.addField(field);

		Assert.assertEquals(7, target.getFieldList().size());
		Assert.assertEquals("left", target.getFieldList().get(0).getAlign());
		Assert.assertEquals("name", target.getFieldList().get(1).getName());
		Assert.assertEquals(" ", target.getFieldList().get(2).getPadding());
		Assert.assertEquals("0", target.getFieldList().get(3).getPattern());
		Assert.assertEquals("pattern_class", target.getFieldList().get(4).getPatternClass());
		Assert.assertEquals("10", target.getFieldList().get(5).getLength());
		Assert.assertEquals("type", target.getFieldList().get(6).getType());

	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#addField(DelimitedLineRecordFieldConfig)} のためのテスト・メソッド。
	 * 正しいフィールド情報リストに追加することを確認する。
	 *
	 */
	@Test
	public void testAddField() {
		// 結果データ
		DelimitedLineRecordFieldConfig field = new DelimitedLineRecordFieldConfig();
		field.setAlign("left");
		target.addField(field);
		field.setName("name");
		target.addField(field);
		field.setPadding(" ");
		target.addField(field);
		field.setPattern("0");
		target.addField(field);
		field.setPatternClass("pattern_class");
		target.addField(field);
		field.setLength("10");
		target.addField(field);
		field.setType("type");
		target.addField(field);

		Assert.assertEquals(7, target.getFieldList().size());
		Assert.assertEquals("left", target.getFieldList().get(0).getAlign());
		Assert.assertEquals("name", target.getFieldList().get(1).getName());
		Assert.assertEquals(" ", target.getFieldList().get(2).getPadding());
		Assert.assertEquals("0", target.getFieldList().get(3).getPattern());
		Assert.assertEquals("pattern_class", target.getFieldList().get(4).getPatternClass());
		Assert.assertEquals("10", target.getFieldList().get(5).getLength());
		Assert.assertEquals("type", target.getFieldList().get(6).getType());

	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#getSeparator()} のためのテスト・メソッド。
	 * 正しいセパレータが取得できることを確認する。
	 */
	@Test
	public void testGetSeparator() {
		target.setSeparator(",");
		Assert.assertEquals(",",target.getSeparator());
	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#setSeparator(String)} のためのテスト・メソッド。
	 * 正しいセパレータが設定できることを確認する。
	 */
	@Test
	public void testSetSeparator() {
		target.setSeparator(",");
		Assert.assertEquals(",",target.getSeparator());
	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#getQuotechar()} のためのテスト・メソッド。
	 * 正しいクォート文字が取得できることを確認する。
	 */
	@Test
	public void testGetQuotechar() {
		target.setQuotechar("\"");
		Assert.assertEquals("\"",target.getQuotechar());
	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#setQuotechar(String)} のためのテスト・メソッド。
	 * 正しくクォート文字が設定できることを確認する。
	 */
	@Test
	public void testSetQuotechar() {
		target.setQuotechar("\"");
		Assert.assertEquals("\"",target.getQuotechar());
	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#getEncode()} のためのテスト・メソッド。
	 * 正しくエンコードが取得できることを確認する。
	 */
	@Test
	public void testGetEncode() {
		target.setEncode("Shift_JIS");
		Assert.assertEquals("Shift_JIS",target.getEncode());
	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#setEncode(String)} のためのテスト・メソッド。
	 * 正しくエンコードが設定できることを確認する。
	 */
	@Test
	public void testSetEncode() {
		target.setEncode("Shift_JIS");
		Assert.assertEquals("Shift_JIS",target.getEncode());
	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#getLineSeparator()} のためのテスト・メソッド。
	 * 正しく改行コードが取得できることを確認する。
	 */
	@Test
	public void testGetLineSeparator() {
		target.setLineSeparator("\r\n");
		Assert.assertEquals("\r\n",target.getLineSeparator());
	}

	/**
	 * {@link DelimitedLineRecordWriterConfig#setLineSeparator(String)} のためのテスト・メソッド。
	 * 正しく改行コードが設定できることを確認する。
	 */
	@Test
	public void testSetLineSeparator() {
		target.setLineSeparator("\r\n");
		Assert.assertEquals("\r\n",target.getLineSeparator());
	}

}
