package jp.sourceforge.cfneo.at4ie.api.impl;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import jp.sourceforge.cfneo.at4ie.api.ActionCommandEnum;
import jp.sourceforge.cfneo.at4ie.api.impl.ie.DefaultContext;

import org.junit.Test;

/**
 * DefaultTestCaseならびに、そのSuperClassであるTestCaseのテスト。
 * @author imaitakafumi
 *
 */
/**
 * @author imaitakafumi
 *
 */
public class DefaultTestCaseTest {

	/**
	 * コンストラクタのテスト。
	 * 生成できたらおｋ。
	 */
	@Test
	public void testDefaultTestCase_1() {
		try {
			new DefaultTestCase(
					new DefaultContext(),
					ActionCommandEnum.ACTION_ANSWER_ON_NEXT_PROMPT
					, "", "");
		} catch (Exception e) {
			e.printStackTrace();
			fail();
		}
	}
	/**
	 * コンストラクタのテスト。
	 * パラメータにnullを設定してみる。
	 */
	@Test
	public void testDefaultTestCase_2() {
		try {
			new DefaultTestCase(
					null, null, null, null);
		} catch (Exception e) {
			e.printStackTrace();
			fail();
		}
	}

	/**
	 * getElementValue()のテスト。
	 * きちんとパラメータを与えられたインスタンスで実行。
	 */
	@Test
	public void testGetElementValue_1() {
		try {
			DefaultTestCase testcase = new DefaultTestCase(
					new DefaultContext(),
					ActionCommandEnum.ACTION_ANSWER_ON_NEXT_PROMPT
					, "aaa", "bbb");
			assertEquals("aaa", testcase.getElementValue());
		} catch (Exception e) {
			e.printStackTrace();
			fail();
		}
	}

	/**
	 * getElementValue()のテスト。
	 * ダブル・クォーテーションに囲まれた文字がセットされたインスタンスで実行。
	 */
	@Test
	public void testGetElementValue_2() {
		try {
			DefaultTestCase testcase = new DefaultTestCase(
					new DefaultContext(),
					ActionCommandEnum.ACTION_ANSWER_ON_NEXT_PROMPT
					, "\"aaa\"", "\"bbb\"");
			assertEquals("aaa", testcase.getElementValue());
		} catch (Exception e) {
			e.printStackTrace();
			fail();
		}
	}

	/**
	 * getElementValue()のテスト。
	 * ElementLocatorで処理できないイコールとダブル・クォーテーションが使われた文字列で
	 * 作られたインスタンスで実行。
	 */
	@Test
	public void testGetElementValue_3() {
		try {
			DefaultTestCase testcase = new DefaultTestCase(
					new DefaultContext(),
					ActionCommandEnum.ACTION_ANSWER_ON_NEXT_PROMPT
					, "aaa=\"aaa\"", null);
			assertEquals("aaa=\"aaa\"", testcase.getElementValue());
		} catch (Exception e) {
			e.printStackTrace();
			fail();
		}
	}

	/**
	 * getElementValue()のテスト。
	 * ElementLocatorで処理可能な文字列で作られたインスタンスで実行。
	 */
	@Test
	public void testGetElementValue_4() {
		try {
			DefaultTestCase testcase = new DefaultTestCase(
					new DefaultContext(),
					ActionCommandEnum.ACTION_ANSWER_ON_NEXT_PROMPT
					, "id=\"aaa\"", null);
			assertEquals("aaa", testcase.getElementValue());
		} catch (Exception e) {
			e.printStackTrace();
			fail();
		}
	}

	/**
	 * getElementValue()のテスト。
	 * nullで生成されたインスタンスで実行する。
	 */
	@Test
	public void testGetElementValue_5() {
		try {
			DefaultTestCase testcase = new DefaultTestCase(
					new DefaultContext(),
					ActionCommandEnum.ACTION_ANSWER_ON_NEXT_PROMPT
					, null, null);
			assertEquals(null, testcase.getElementValue());
		} catch (Exception e) {
			e.printStackTrace();
			fail();
		}
	}


	/**
	 * getElementValue()のテスト。
	 * targetがnull、valueに文字列が指定されたインスタンスで実行する。
	 */
	@Test
	public void testGetElementValue_6() {
		try {
			DefaultTestCase testcase = new DefaultTestCase(
					new DefaultContext(),
					ActionCommandEnum.ACTION_ANSWER_ON_NEXT_PROMPT
					, null, "bbb");
			assertEquals(null, testcase.getElementValue());
		} catch (Exception e) {
			e.printStackTrace();
			fail();
		}
	}

	/**
	 * toString()のテスト。
	 * nullで生成したインスタンスで実行する。
	 */
	@Test
	public void testToString_1() {
		try {
			DefaultTestCase testcase = new DefaultTestCase(
					null, null , null, null);
			assertEquals(
					" command=[null] target=[null] value=[null] elementValue=[null]",
					testcase.toString());
		} catch (Exception e) {
			e.printStackTrace();
			fail();
		}
	}

	/**
	 * toString()のテスト。
	 * 通常のパラメータを与えられたインスタンスで実行する。
	 */
	public void testToString_2() {
		try {
			DefaultTestCase testcase = new DefaultTestCase(
					new DefaultContext(),
					ActionCommandEnum.ACTION_ANSWER_ON_NEXT_PROMPT
					, "aaa", "bbb");
			assertEquals(
					" command=[answerOnNextPrompt] target=[aaa] value=[bbb] elementValue=[aaa]",
					testcase.toString());
		} catch (Exception e) {
			e.printStackTrace();
			fail();
		}
	}

	/**
	 * toString()のテスト。
	 * ElementLocationを用いられたインスタンスで実行する。
	 */
	public void testToString_3() {
		try {
			DefaultTestCase testcase = new DefaultTestCase(
					new DefaultContext(),
					ActionCommandEnum.ACTION_ANSWER_ON_NEXT_PROMPT
					, "id=test", "123");
			assertEquals(
					" command=[answerOnNextPrompt] target=[id=test] value=[123] elementValue=[test]",
					testcase.toString());
		} catch (Exception e) {
			e.printStackTrace();
			fail();
		}
	}

	/**
	 * toString()のテスト。
	 * ElementLocatorで処理できない文字列を用いられたインスタンスで実行する。
	 */
	public void testToString_4() {
		try {
			DefaultTestCase testcase = new DefaultTestCase(
					new DefaultContext(),
					ActionCommandEnum.ACTION_ANSWER_ON_NEXT_PROMPT
					, "aaa=\"bbb\"", "test");
			assertEquals(
					" command=[] target=[] value=[] elementValue=[]",
					testcase.toString());
		} catch (Exception e) {
			e.printStackTrace();
			fail();
		}
	}

}
