package jp.sourceforge.cfneo.at4ie.utils;

import static org.junit.Assert.assertEquals;
import jp.sourceforge.cfneo.at4ie.api.ElementLocatorEnum;

import org.junit.Test;

/**
 * LocatorUtilTestのテスト。
 * @author imaitakafumi
 *
 */
public class LocatorUtilTest {

	/**
	 * getLocatorValueのテスト。
	 * otherの場合。
	 */
	@Test
	public void testGetElementLocatorEnum_1_other() {
		ElementLocatorEnum en = LocatorUtil.getElementLocatorEnum("aaaaa");
		assertEquals(ElementLocatorEnum.OTHER, en);
	}
	/**
	 * getLocatorValueのテスト。
	 * idの選定。
	 */
	@Test
	public void testGetElementLocatorEnum_2_id() {
		ElementLocatorEnum en = LocatorUtil.getElementLocatorEnum("id=\"aaa\"");
		assertEquals(ElementLocatorEnum.ID, en);
	}
	/**
	 * getLocatorValueのテスト。
	 * nameの選定。
	 */
	@Test
	public void testGetElementLocatorEnum_3_name() {
		ElementLocatorEnum en = LocatorUtil.getElementLocatorEnum("name=\"aaa\"");
		assertEquals(ElementLocatorEnum.NAME, en);
	}
	/**
	 * getLocatorValueのテスト。
	 * valueの場合。
	 */
	@Test
	public void testGetElementLocatorEnum_4_value() {
		ElementLocatorEnum en = LocatorUtil.getElementLocatorEnum("value=\"aaa\"");
		assertEquals(ElementLocatorEnum.VALUE, en);
	}
	/**
	 * getLocatorValueのテスト。
	 * domの場合。
	 */
	@Test
	public void testGetElementLocatorEnum_5_dom() {
		ElementLocatorEnum en = LocatorUtil.getElementLocatorEnum("dom=\"aaa\"");
		assertEquals(ElementLocatorEnum.DOM, en);
	}
	/**
	 * getLocatorValueのテスト。
	 * xpathの場合。
	 */
	@Test
	public void testGetElementLocatorEnum_6_xpath() {
		ElementLocatorEnum en = LocatorUtil.getElementLocatorEnum("xpath=\"aaa\"");
		assertEquals(ElementLocatorEnum.XPATH, en);
	}
	/**
	 * getLocatorValueのテスト。
	 * linkの場合。
	 */
	@Test
	public void testGetElementLocatorEnum_7_link() {
		ElementLocatorEnum en = LocatorUtil.getElementLocatorEnum("link=../");
		assertEquals(ElementLocatorEnum.LINK, en);
	}
	/**
	 * getLocatorValueのテスト。
	 * 異常系:null
	 */
	@Test
	public void testGetElementLocatorEnum_8_null() {
		ElementLocatorEnum en = LocatorUtil.getElementLocatorEnum(null);
		assertEquals(null, en);
	}
	/**
	 * getLocatorValueのテスト。
	 * 異常系:""
	 */
	@Test
	public void testGetElementLocatorEnum_9_zerostring() {
		ElementLocatorEnum en = LocatorUtil.getElementLocatorEnum("");
		assertEquals(ElementLocatorEnum.OTHER, en);
	}

	/**
	 * getLocatorValueのテスト。
	 * otherの場合。
	 */
	@Test
	public void testGetLocatorValue_1_other() {
		assertEquals("aaaaa",
				LocatorUtil.getLocatorValue("aaaaa"));
	}
	/**
	 * getLocatorValueのテスト。
	 * idの場合。
	 */
	@Test
	public void testGetLocatorValue_2_id() {
		assertEquals("aaa",
				LocatorUtil.getLocatorValue("id=\"aaa\""));
	}
	/**
	 * getLocatorValueのテスト。
	 * nameの場合。
	 */
	@Test
	public void testGetLocatorValue_3_name() {
		assertEquals("aaa",
				LocatorUtil.getLocatorValue("name=\"aaa\""));
	}
	/**
	 * getLocatorValueのテスト。
	 * valueの場合。
	 */
	@Test
	public void testGetLocatorValue_4_value() {
		assertEquals("aaa",
				LocatorUtil.getLocatorValue("value=\"aaa\""));
	}
	/**
	 * getLocatorValueのテスト。
	 * domの場合。
	 */
	@Test
	public void testGetLocatorValue_5_dom() {
		assertEquals("aaa",
				LocatorUtil.getLocatorValue("dom=\"aaa\""));
	}
	/**
	 * getLocatorValueのテスト。
	 * xpathの場合。
	 */
	@Test
	public void testGetLocatorValue_6_xpath() {
		assertEquals("aaa",
				LocatorUtil.getLocatorValue("xpath=\"aaa\""));
	}
	/**
	 * getLocatorValueのテスト。
	 * linkの場合。
	 */
	@Test
	public void testGetLocatorValue_7_link() {
		assertEquals("aaa",
				LocatorUtil.getLocatorValue("link=\"aaa\""));
	}
	/**
	 * getLocatorValueのテスト。
	 * 異常系:null
	 */
	@Test
	public void testGetLocatorValue_8_null() {
		assertEquals(null,
				LocatorUtil.getLocatorValue(null));
	}
	/**
	 * getLocatorValueのテスト。
	 * 異常系:""
	 */
	@Test
	public void testGetLocatorValue_9_zerostring() {
		assertEquals("",
				LocatorUtil.getLocatorValue(""));
	}

	/**
	 * deleteDoubleQuotationのテスト。
	 * ダブル・クォーテーションなし。
	 */
	@Test
	public void testDeleteDoubleQuotation_1() {
		assertEquals("aaa",
				LocatorUtil.deleteDoubleQuotation("aaa"));
	}
	/**
	 * deleteDoubleQuotationのテスト。
	 * ダブル・クォーテーションあり。
	 */
	@Test
	public void testDeleteDoubleQuotation_2() {
		assertEquals("aaa",
				LocatorUtil.deleteDoubleQuotation("\"aaa\""));
	}
	/**
	 * deleteDoubleQuotationのテスト。
	 * ダブル・クォーテーション2つ目。
	 */
	@Test
	public void testDeleteDoubleQuotation_3() {
		assertEquals("\"aaa\"",
				LocatorUtil.deleteDoubleQuotation("\"\"aaa\"\""));
	}
	/**
	 * deleteDoubleQuotationのテスト。
	 * ダブル・クォーテーションいっぱい。
	 */
	@Test
	public void testDeleteDoubleQuotation_4() {
		assertEquals("\"\"\"\"\"\"aaa\"\"\"\"\"\"",
				LocatorUtil.deleteDoubleQuotation("\"\"\"\"\"\"\"aaa\"\"\"\"\"\"\""));
	}
	/**
	 * deleteDoubleQuotationのテスト。
	 * 異常系:null
	 */
	@Test
	public void testDeleteDoubleQuotation_5() {
		assertEquals(null,
				LocatorUtil.deleteDoubleQuotation(null));
	}
	/**
	 * deleteDoubleQuotationのテスト。
	 * 異常系:""
	 */
	@Test
	public void testDeleteDoubleQuotation_6() {
		assertEquals("",
				LocatorUtil.deleteDoubleQuotation(""));
	}

}
/*
Element Locators

Element Locator とは、Selenium において、コマンドが参照するhtml 要素を特定するものです。Selenium ではElementLocator として以下の方法を提供しています。これはhtml の要素全般に対して使える方法です。
    * id
      書式 	id=id 属性値
      id 属性で指定された要素を選択します。
    * name
      書式 	name=name 属性値
      name 属性で指定された要素のうち、最初に合致したものを選択します。
    * identifier
      書式 	identifier=id 属性値またはname 属性値
      id 属性で指定された要素を選択し、id 属性で合致するものがなければname 属性で指定された要素のうち最初に合致したものを選択します。
    * dom
      書式 	dom=javascript 表現法
      HTML DocumentObjectModel(DOM)のJavascript Traversal モジュールを使って要素を見つけます。javascript 表現法で指定するDOM のロケータは"document."で始まらなければなりません。
      (例)
      dom=document.forms['myForm'].myDropdown
      dom=document.images[56]
    * xpath
      書式 	xpath=xpath 表現
      XPath 表現を使用して要素の場所を特定します。XPath 表現は"//"で始まらなければなりません。
      (例)
      xpath=//img[@alt='The image alt text']
      xpath=//table[@id='table1']//tr[4]/td[2]
    * link
      書式 	link=リンクの文字列pattern
      指定された文字列pattern と合致するテキストを含むリンク(anchor)要素を選択します。
      (例)
      link=The link text
ElementLocator のprefix("xxx=")が無い場合、Selenium は以下のものと解釈して動作します。
"document."から始まっている場合 	dom=と解釈して動作
"//"から始まっている場合 	xpath=と解釈して動作
それ以外 	identifier=と解釈して動作 

via http://wiki.openqa.org/display/SEL/Command%20Reference%20ja
 */
