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

import jp.co.cybec.cb3.exception.ConfigFileDefinitionException;
import jp.co.cybec.cb3.util.ValidationEntityResolver;
import junit.framework.Assert;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.xml.sax.InputSource;

/**
 * ValidationEntityResolverのテストケース。
 * @author Juanjuan Wang
 */
public class ValidationEntityResolverTest {

	/** システム識別ID */
	private static final String SYSTEM_ID = "file:/D:/eclipse/workspace/CB3_Core/src/test/config/schema/XMLFileReaderConfig.xsd";

	/** パブリック識別ID */
	private static final String PUBLIC_ID = "XMLFileReaderConfig22.xsd";

	/** 設定ファイル */
	private static final String CONFIG_FILE = "jp/co/cybec/cb3/accessor/fileaccess/xml/reader1Config.xml";

	private ValidationEntityResolver target = null;

	/**
	 * @throws Exception
	 */
	@Before
	public void setUp() throws Exception {
		target = new ValidationEntityResolver();
	}

	/**
	 * @throws Exception
	 */
	@After
	public void tearDown() throws Exception {
	}

	/**
	 * {@link ValidationEntityResolver#resolveEntity(String, String)} のためのテスト・メソッド。
	 * XMLスキーマファイルエンティティが正しく取得できることを確認する。
	 */
	@Test
	public void testResolveEntity() throws Exception{
		InputSource actual = target.resolveEntity(null, SYSTEM_ID);
		String expected = "XMLFileReaderConfig.xsd";
		Assert.assertEquals(expected, actual.getSystemId().substring(
				actual.getSystemId().length() - expected.length()));
	}

	/**
	 * {@link ValidationEntityResolver#resolveEntity(String, String)} のためのテスト・メソッド。
	 * ファイル名(entityURL)がNULLの場合、例外が発生することを確認する。
	 */
	@Test(expected = ConfigFileDefinitionException.class)
	public void testResolveEntityConfigFileDefinitionException01() throws Exception {
		target.resolveEntity(null, null);
	}

	/**
	 * {@link ValidationEntityResolver#resolveEntity(String, String)} のためのテスト・メソッド。
	 * XMLスキーマファイルが存在しない場合、例外が発生することを確認する。
	 */
	@Test(expected = ConfigFileDefinitionException.class)
	public void testResolveEntityConfigFileDefinitionException02() throws Exception {
		target.resolveEntity(PUBLIC_ID, null);
	}

	/**
	 * {@link ValidationEntityResolver#setXmlFile(java.net.URL)} のためのテスト・メソッド。
	 * XMLファイル名を設定したときに例外が発生しないことを確認する。
	 */
	@Test
	public void testSetXmlFile() {
		target.setXmlFile(ConfigurationLoader.
				class.getClassLoader().getResource(CONFIG_FILE));
	}

}
