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

import java.math.BigDecimal;
import java.text.DateFormat;

import jp.co.cybec.cb3.accessor.fileaccess.xml.XMLAttribute;
import jp.co.cybec.cb3.exception.DataFormatException;
import junit.framework.Assert;

import org.junit.Test;

/**
 * {@link XMLAttribute} のテストケース。
 * @author Daisuke Suga
 */
public class XMLAttributeTest {

	XMLAttribute target = null;

	/**
	 * {@link XMLAttribute#XMLAttribute(String, Object)} のためのテスト・メソッド。<br>
	 * 例外が発生しないことを確認する。
	 */
	@Test
	public void testXMLAttributeStringObject() {
		target = new XMLAttribute("test1", "aaa1");
	}

	/**
	 * {@link XMLAttribute#XMLAttribute(String, Object, String, String, String)} のためのテスト・メソッド。<br>
	 * 例外が発生しないことを確認する。
	 */
	@Test
	public void testXMLAttributeStringObjectStringStringString() {
		target = new XMLAttribute("test2", "aaa2", "bbb2", "ccc2", "ddd2");
	}

	/**
	 * {@link XMLAttribute#getName()} のためのテスト・メソッド。<br>
	 * 正しい値が取得できることを確認する。
	 */
	@Test
	public void testGetName() {

		String expected1 = "test1";
		String expected2 = "test2";

		target = new XMLAttribute(expected1, "aaa1");
		Assert.assertEquals(expected1, target.getName());

		target = new XMLAttribute(expected2, "aaa2", "bbb2", "ccc2", "ddd2");
		Assert.assertEquals(expected2, target.getName());
	}

	/**
	 * {@link XMLAttribute#getString()} のためのテスト・メソッド。<br>
	 * 正しい値が取得できることを確認する。
	 */
	@Test
	public void testGetString() {

		String expected1 = "aaa1";
		String expected2 = "aaa2";

		target = new XMLAttribute("test1", expected1);
		Assert.assertEquals(expected1, target.getString());

		target = new XMLAttribute("test2", expected2, "bbb2", "ccc2", "ddd2");
		Assert.assertEquals(expected2, target.getString());
	}

	/**
	 * {@link XMLAttribute#getInteger()} のためのテスト・メソッド。<br>
	 * 正しい値が取得できることを確認する。
	 */
	@Test
	public void testGetInteger() {
		String expected = "10";
		target = new XMLAttribute("test1", expected);
		Assert.assertEquals(new Integer(expected), target.getInteger());
	}

	/**
	 * {@link XMLAttribute#getInteger()} のためのテスト・メソッド。<br>
	 * 値の変換が失敗したときに例外が発生することを確認する。
	 */
	@Test(expected = DataFormatException.class)
	public void testGetIntegerDataFormatException() {
		target = new XMLAttribute("test1", "aaa1");
		target.getInteger();
	}

	/**
	 * {@link XMLAttribute#getInteger()} のためのテスト・メソッド。<br>
	 * 値の変換が失敗したときに例外が発生することを確認する。
	 */
	@Test(expected = DataFormatException.class)
	public void testGetIntegerDataFormatException2() {
		target = new XMLAttribute("test1", "aaa1", "bbb1", "ccc1", "ddd1");
		target.getInteger();
	}

	/**
	 * {@link XMLAttribute#getLong()} のためのテスト・メソッド。<br>
	 * 正しい値が取得できることを確認する。
	 */
	@Test
	public void testGetLong() {
		String expected = "10";
		target = new XMLAttribute("test1", expected);
		Assert.assertEquals(new Long(expected), target.getLong());
	}

	/**
	 * {@link XMLAttribute#getInteger()} のためのテスト・メソッド。<br>
	 * 値の変換が失敗したときに例外が発生することを確認する。
	 */
	@Test(expected = DataFormatException.class)
	public void testGetLongDataFormatException() {
		target = new XMLAttribute("test1", "aaa1");
		target.getLong();
	}

	/**
	 * {@link XMLAttribute#getInteger()} のためのテスト・メソッド。<br>
	 * 値の変換が失敗したときに例外が発生することを確認する。
	 */
	@Test(expected = DataFormatException.class)
	public void testGetLongDataFormatException2() {
		target = new XMLAttribute("test1", "aaa1", "bbb1", "ccc1", "ddd1");
		target.getLong();
	}

	/**
	 * {@link XMLAttribute#getFloat()} のためのテスト・メソッド。<br>
	 * 正しい値が取得できることを確認する。
	 */
	@Test
	public void testGetFloat() {
		String expected = "1.1";
		target = new XMLAttribute("test1", expected);
		Assert.assertEquals(new Float(expected), target.getFloat());
	}

	/**
	 * {@link XMLAttribute#getFloat()} のためのテスト・メソッド。<br>
	 * 値の変換が失敗したときに例外が発生することを確認する。
	 */
	@Test(expected = DataFormatException.class)
	public void testGetFloatDataFormatException() {
		target = new XMLAttribute("test1", "aaa1");
		target.getFloat();
	}

	/**
	 * {@link XMLAttribute#getFloat()} のためのテスト・メソッド。<br>
	 * 値の変換が失敗したときに例外が発生することを確認する。
	 */
	@Test(expected = DataFormatException.class)
	public void testGetFloatDataFormatException2() {
		target = new XMLAttribute("test1", "aaa1", "bbb1", "ccc1", "ddd1");
		target.getFloat();
	}

	/**
	 * {@link XMLAttribute#getShort()} のためのテスト・メソッド。<br>
	 * 正しい値が取得できることを確認する。
	 */
	@Test
	public void testGetShort() {
		String expected = "10";
		target = new XMLAttribute("test1", expected);
		Assert.assertEquals(new Short(expected), target.getShort());
	}

	/**
	 * {@link XMLAttribute#getShort()} のためのテスト・メソッド。<br>
	 * 値の変換が失敗したときに例外が発生することを確認する。
	 */
	@Test(expected = DataFormatException.class)
	public void testGetShortDataFormatException() {
		target = new XMLAttribute("test1", "aaa1");
		target.getShort();
	}

	/**
	 * {@link XMLAttribute#getShort()} のためのテスト・メソッド。<br>
	 * 値の変換が失敗したときに例外が発生することを確認する。
	 */
	@Test(expected = DataFormatException.class)
	public void testGetShortDataFormatException2() {
		target = new XMLAttribute("test1", "aaa1", "bbb1", "ccc1", "ddd1");
		target.getShort();
	}

	/**
	 * {@link XMLAttribute#getBigDecimal()} のためのテスト・メソッド。<br>
	 * 正しい値が取得できることを確認する。
	 */
	@Test
	public void testGetBigDecimal() {
		String expected = "10";
		target = new XMLAttribute("test1", expected);
		Assert.assertEquals(new BigDecimal(expected), target.getBigDecimal());
	}

	/**
	 * {@link XMLAttribute#getBigDecimal()} のためのテスト・メソッド。<br>
	 * 値の変換が失敗したときに例外が発生することを確認する。
	 */
	@Test(expected = DataFormatException.class)
	public void testGetBigDecimalDataFormatException() {
		target = new XMLAttribute("test1", "aaa1");
		target.getBigDecimal();
	}

	/**
	 * {@link XMLAttribute#getBigDecimal()} のためのテスト・メソッド。<br>
	 * 値の変換が失敗したときに例外が発生することを確認する。
	 */
	@Test(expected = DataFormatException.class)
	public void testGetBigDecimalDataFormatException2() {
		target = new XMLAttribute("test1", "aaa1", "bbb1", "ccc1", "ddd1");
		target.getBigDecimal();
	}

	/**
	 * {@link XMLAttribute#getDate()} のためのテスト・メソッド。<br>
	 * 正しい値が取得できることを確認する。
	 */
	@Test
	public void testGetDate() throws Exception {
		String expected = "2008/07/03";
		target = new XMLAttribute("test1", expected);
		Assert.assertEquals(DateFormat.getDateInstance().parse(expected), target.getDate());
	}

	/**
	 * {@link XMLAttribute#getDate()} のためのテスト・メソッド。<br>
	 * 値の変換が失敗したときに例外が発生することを確認する。
	 */
	@Test(expected = DataFormatException.class)
	public void testGetDateDataFormatException() {
		target = new XMLAttribute("test1", "aaa1");
		target.getDate();
	}

	/**
	 * {@link XMLAttribute#getDate()} のためのテスト・メソッド。<br>
	 * 値の変換が失敗したときに例外が発生することを確認する。
	 */
	@Test(expected = DataFormatException.class)
	public void testGetDateDataFormatException2() {
		target = new XMLAttribute("test1", "aaa1", "bbb1", "ccc1", "ddd1");
		target.getDate();
	}

	/**
	 * {@link XMLAttribute#getURI()} のためのテスト・メソッド。<br>
	 * 正しい値が取得できることを確認する。
	 */
	@Test
	public void testGetURI() {
		String expected = "test uri";
		target = new XMLAttribute("test1", "aaa1");
		target.setURI(expected);
		Assert.assertEquals(expected, target.getURI());
	}

	/**
	 * {@link XMLAttribute#setURI(String)} のためのテスト・メソッド。<br>
	 * 例外が発生しないことを確認する。
	 */
	@Test
	public void testSetURI() {
		String expected = "test uri";
		target = new XMLAttribute("test1", "aaa1");
		target.setURI(expected);
	}

	/**
	 * {@link XMLAttribute#getQName()} のためのテスト・メソッド。<br>
	 * 正しい値が取得できることを確認する。
	 */
	@Test
	public void testGetQName() {
		String expected = "test qname";
		target = new XMLAttribute("test1", "aaa1");
		target.setQName(expected);
		Assert.assertEquals(expected, target.getQName());
	}

	/**
	 * {@link XMLAttribute#setQName(String)} のためのテスト・メソッド。<br>
	 * 例外が発生しないことを確認する。
	 */
	@Test
	public void testSetQName() {
		String expected = "test:qname";
		target = new XMLAttribute("test1", "aaa1");
		target.setQName(expected);
	}

	/**
	 * {@link XMLAttribute#toString()} のためのテスト・メソッド。<br>
	 * 正しい値が取得できることを確認する。
	 */
	@Test
	public void testToString() {
		String expected = "aaa1";
		target = new XMLAttribute("test1", expected);
		Assert.assertEquals(expected, target.toString());
	}

}
