/*
 * RuntimeParametersTest.java
 * Copyright (C) 2008 Cyber Beans Corporation. All rights reserved.
 */
package jp.co.cybec.cb3.session;


import java.util.HashMap;
import java.util.LinkedHashMap;

import jp.co.cybec.cb3.session.RuntimeParameters;
import junit.framework.Assert;
import org.junit.Test;

/**
 * RuntimeParametersのテストケース。
 * @author Naoko Sugimoto
 */
public class RuntimeParametersTest {

	/**
	 * {@link jp.co.cybec.cb3.session.RuntimeParameters} のためのテスト・メソッド。
	 * コンストラクタで設定したパラメータが、{@link jp.co.cybec.cb3.session.RuntimeParameters#get(String)}で
	 * 取得できることを確認する。
	 */
	@Test
	public void testNomalParameters() {

		HashMap<String, String> parameterMap = new HashMap<String, String>();
		parameterMap.put("key1", "value1");
		parameterMap.put("key2", null);

		// RuntimeParametersを生成。
		RuntimeParameters runtimeParameters = new RuntimeParameters(parameterMap);

		// RuntimeParametersに起動パラメータが正しくセットされていることを確認。
		Assert.assertEquals("value1", runtimeParameters.get("key1"));
		Assert.assertNull(runtimeParameters.get("key2"));
	}

	/**
	 * {@link jp.co.cybec.cb3.session.RuntimeParameters} のためのテスト・メソッド。
	 * コンストラクタにnullが指定された場合、エラーにならないことを確認する。
	 */
	@Test
	public void testNullParameters() {

		// RuntimeParametersを生成。エラーにならない。
		RuntimeParameters runtimeParameters = new RuntimeParameters(null);

		// 空のRuntimeParametersが生成されている。
		Assert.assertNull(runtimeParameters.get("dummy"));
	}

	/**
	 * {@link jp.co.cybec.cb3.session.RuntimeParameters#containsKey(String)} のためのテスト・メソッド。
	 * パラメータが保持しているキーを指定したとき、trueが返されることを確認する。
	 */
	@Test
	public void testContainsKey() {
		HashMap<String, String> parameterMap = new HashMap<String, String>();
		parameterMap.put("key1", "value1");
		parameterMap.put("key2", null);

		// RuntimeParametersを生成。
		RuntimeParameters runtimeParameters = new RuntimeParameters(parameterMap);

		// RuntimeParametersに起動パラメータが正しくセットされていることを確認。
		Assert.assertTrue(runtimeParameters.containsKey("key1"));
		Assert.assertTrue(runtimeParameters.containsKey("key2"));
	}

	/**
	 * {@link jp.co.cybec.cb3.session.RuntimeParameters#containsKey(String)} のためのテスト・メソッド。
	 * パラメータが保持していないキーを指定したとき、fakseが返されることを確認する。
	 */
	@Test
	public void testContainsKeyNothing() {
		HashMap<String, String> parameterMap = new HashMap<String, String>();
		parameterMap.put("key1", "value1");

		// RuntimeParametersを生成。
		RuntimeParameters runtimeParameters = new RuntimeParameters(parameterMap);

		// RuntimeParametersに起動パラメータが正しくセットされていることを確認。
		Assert.assertFalse(runtimeParameters.containsKey("dummy"));
	}

	/**
	 * {@link jp.co.cybec.cb3.session.RuntimeParameters#toString()} のためのテスト・メソッド。
	 * toString()でパラメータの中身が表示されることを確認する。
	 */
	@Test
	public void testToString() {
		HashMap<String, String> parameterMap = new LinkedHashMap<String, String>();
		parameterMap.put("key1", "value1");
		parameterMap.put("key2", null);

		// RuntimeParametersを生成。
		RuntimeParameters runtimeParameters = new RuntimeParameters(parameterMap);

		String expected = "RuntimeParameters{key1=value1, key2=null}";
		// toString()の結果を確認。
		Assert.assertEquals(expected, runtimeParameters.toString());
	}
}
