/*
 * XMLElementTest.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 java.util.Date;

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

import org.junit.Test;

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

	XMLElement target = null;

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

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

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

		target = new XMLElement(expected1);
		Assert.assertEquals(expected1, target.getName());

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	/**
	 * {@link XMLElement#setDate(Date)} のためのテスト・メソッド。<br>
	 * 例外が発生しないことを確認する。
	 */
	@Test
	public void testSetDate() throws Exception {
		target = new XMLElement("test1");
		target.setDate(DateFormat.getDateInstance().parse("2008/07/03"));
	}

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

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

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

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

	/**
	 * {@link XMLElement#getAttributes()} のためのテスト・メソッド。<br>
	 * 正しい値が取得できることを確認する。
	 */
	@Test
	public void testGetAttributes() {
		XMLAttributes expected = new XMLAttributes();
		XMLAttribute attribute1 = new XMLAttribute("test1", "aaa1");
		XMLAttribute attribute2 = new XMLAttribute("test2", "aaa2");
		expected.putAttribute(attribute1);
		expected.putAttribute(attribute2);

		target = new XMLElement("test1");
		target.setAttributes(expected);
		Assert.assertEquals(expected, target.getAttributes());
	}

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

	/**
	 * {@link XMLElement#putAttribute(XMLAttribute)} のためのテスト・メソッド。<br>
	 * 追加した{@link XMLAttribute}が正しく取得できることを確認する。
	 */
	@Test
	public void testPutAttribute() {
		String key1 = "test1";
		String key2 = "test2";
		XMLAttribute expected1 = new XMLAttribute(key1, "aaa1");
		XMLAttribute expected2 = new XMLAttribute(key2, "aaa2");

		target = new XMLElement("test1");
		target.putAttribute(expected1);
		target.putAttribute(expected2);
		Assert.assertEquals(expected1, target.getAttributes().getAttribute(key1));
		Assert.assertEquals(expected2, target.getAttributes().getAttribute(key2));
	}

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

}
