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

import jp.co.cybec.cb3.mock.util.MockApplicationExiter;
import jp.co.cybec.cb3.util.ApplicationExiterDelegater;
import junit.framework.Assert;

import org.junit.Test;

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

	/**
	 * {@link jp.co.cybec.cb3.util.ApplicationExiterDelegater#getInstance()} のためのテスト・メソッド。
	 * シングルトンになっていることを確認する。
	 */
	@Test
	public void testApplicationExiterDelegater() {

		ApplicationExiterDelegater delegater1 = ApplicationExiterDelegater.getInstance();
		ApplicationExiterDelegater delegater2 = ApplicationExiterDelegater.getInstance();
		Assert.assertSame(delegater1, delegater2);
	}

	/**
	 * {@link jp.co.cybec.cb3.util.ApplicationExiterDelegater#exit(int)} のためのテスト・メソッド。
	 * exit()を実行し、処理結果コードをセットできていることを確認する。
	 */
	@Test
	public void testExit() {

		ApplicationExiterDelegater delegater = ApplicationExiterDelegater.getInstance();
		/*
		 * ApplicationExiterとしてMockApplicationExiterを使用する。
		 * デフォルトのApplicationExiterImplでは、システムが終了してしまいテストができないため。
		 */
		delegater.setApplicationExiter(new MockApplicationExiter());
		// 処理結果コードをセット。
		delegater.exit(0);
		// セットした処理結果コードを取得できることを確認。
		Assert.assertEquals(0, delegater.getReturnCode());
		// 処理結果コードをセット。
		delegater.exit(-9);
		// セットした処理結果コードを取得できることを確認。
		Assert.assertEquals(-9, delegater.getReturnCode());
	}
}
