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

import jp.co.cybec.cb3.accessor.fileaccess.flat.fixed.FixedLengthRecordFieldConfig;
import jp.co.cybec.cb3.accessor.fileaccess.flat.fixed.FixedLengthRecordWriterConfig;
import junit.framework.Assert;

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

/**
 * {@link FixedLengthRecordWriterConfig} のテストケース。
 * @author Sufang Gou
 */

public class FixedLengthRecordWriterConfigTest {
	FixedLengthRecordWriterConfig writerConfig = null;
	/**
	 * @throws Exception
	 */
	@Before
	public void setUp() throws Exception {
		writerConfig = new FixedLengthRecordWriterConfig();
	}

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

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

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

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

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

	/**
	 * {@link FixedLengthRecordWriterConfig#getFieldList()} のためのテスト・メソッド。
	 * 正しくフィールド情報リストが取得できることを確認する。
	 */
	@Test
	public void testGetFieldList() {
		FixedLengthRecordFieldConfig field = new FixedLengthRecordFieldConfig();
		field.setAlign("left");
		writerConfig.addField(field);
		field.setName("name");
		writerConfig.addField(field);
		field.setPadding(" ");
		writerConfig.addField(field);
		field.setPattern("0");
		writerConfig.addField(field);
		field.setPatternClass("pattern_class");
		writerConfig.addField(field);
		field.setLength("10");
		writerConfig.addField(field);
		field.setType("type");
		writerConfig.addField(field);
		Assert.assertEquals(7, writerConfig.getFieldList().size());
		Assert.assertEquals("left", writerConfig.getFieldList().get(0).getAlign());
		Assert.assertEquals("name", writerConfig.getFieldList().get(1).getName());
		Assert.assertEquals(" ", writerConfig.getFieldList().get(2).getPadding());
		Assert.assertEquals("0", writerConfig.getFieldList().get(3).getPattern());
		Assert.assertEquals("pattern_class", writerConfig.getFieldList().get(4).getPatternClass());
		Assert.assertEquals("10", writerConfig.getFieldList().get(5).getLength());
		Assert.assertEquals("type", writerConfig.getFieldList().get(6).getType());

	}

	/**
	 * {@link FixedLengthRecordWriterConfig#addField(FixedLengthRecordFieldConfig)} のためのテスト・メソッド。
	 * 正しくフィールド情報リストが設定できることを確認する。
	 */
	@Test
	public void testAddField() {
		FixedLengthRecordFieldConfig field = new FixedLengthRecordFieldConfig();
		field.setAlign("left");
		writerConfig.addField(field);
		field.setName("name");
		writerConfig.addField(field);
		field.setPadding(" ");
		writerConfig.addField(field);
		field.setPattern("0");
		writerConfig.addField(field);
		field.setPatternClass("pattern_class");
		writerConfig.addField(field);
		field.setLength("10");
		writerConfig.addField(field);
		field.setType("type");
		writerConfig.addField(field);
		Assert.assertEquals(7, writerConfig.getFieldList().size());
		Assert.assertEquals("left", writerConfig.getFieldList().get(0).getAlign());
		Assert.assertEquals("name", writerConfig.getFieldList().get(1).getName());
		Assert.assertEquals(" ", writerConfig.getFieldList().get(2).getPadding());
		Assert.assertEquals("0", writerConfig.getFieldList().get(3).getPattern());
		Assert.assertEquals("pattern_class", writerConfig.getFieldList().get(4).getPatternClass());
		Assert.assertEquals("10", writerConfig.getFieldList().get(5).getLength());
		Assert.assertEquals("type", writerConfig.getFieldList().get(6).getType());

	}

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

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

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

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

}
