/*
 * blanco Framework
 * Copyright (C) 2004-2005 IGA Tosiki
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 */
package blanco.bcel;

import java.io.File;

import junit.framework.TestCase;

/**
 * BlancoBcelJavaClass2XmlのJUnitクラス。
 * 
 * このクラス自身が BlancoJUnitのサンプルにもなっています。
 * 
 * @author IGA Tosiki
 */
public class BlancoBcelJavaClass2XmlTest extends TestCase {
    /**
     * 試験対象となっている振るパッケージ名をともなったクラス名を示します。
     */
    private static final String TARGET_NAME = "blanco.bcel.BlancoBcelJavaClass2Xml";

    /**
     * 解析を行いたいクラスファイル名を指定します。<br>
     * なお、この例では自分自身を指定しています。
     */
    private static final String TARGET_CLASS_JUNIT = "./bin/blanco/bcel/BlancoBcelJavaClass2XmlTest.class";

    protected void setUp() throws Exception {
        super.setUp();
        // ディレクトリを準備します。
        new File("./tmp").mkdirs();
    }

    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public void testProcess01() throws Exception {
        // メソッドの最初の箇所において、試験対象に関する内容を示します。
        // コンスタントで [試験対象]から開始される場合に、ドキュメントへの連動が行われます。
        final String TARGET = "[試験対象]BlancoBcelの正常系の挙動についての確認。";

        new BlancoBcelJavaClass2Xml().process(TARGET_CLASS_JUNIT, new File(
                "./tmp/aaa.xml"));
        // コンスタントで [試験]から開始される場合に、ドキュメントへの連動が行われます。
        assertTrue("[試験][正常系]BlancoBcelの正常系が適切に動作することを確認。", true);
    }

    public void testProcess02() throws Exception {
        // メソッドの最初の箇所において、試験対象に関する内容を示します。
        // コンスタントで [試験対象]から開始される場合に、ドキュメントへの連動が行われます。
        final String TARGET = "[試験対象]BlancoBcelの異常系の挙動についての確認。";

        try {
            new BlancoBcelJavaClass2Xml().process(null, new File(
                    "./tmp/aaa.xml"));
            fail("例外が発生しませんでした。処理中断します。");
        } catch (IllegalArgumentException ex) {
            // コンスタントで [試験]から開始される場合に、ドキュメントへの連動が行われます。
            assertTrue(
                    "[試験][異常系]BlancoBcelの入力クラスにnullを渡した場合に、IllegalArgumentException例外をともなって異常終了することを確認。",
                    true);
        }

        try {
            new BlancoBcelJavaClass2Xml().process(TARGET_CLASS_JUNIT, null);
            fail("例外が発生しませんでした。処理中断します。");
        } catch (IllegalArgumentException ex) {
            // コンスタントで [試験]から開始される場合に、ドキュメントへの連動が行われます。
            assertTrue(
                    "[試験][異常系]BlancoBcelの出力先にnullを渡した場合に、IllegalArgumentException例外をともなって異常終了することを確認。",
                    true);
        }
    }

    public void testProcess03() throws Exception {
        // メソッドの最初の箇所において、試験対象に関する内容を示します。
        // コンスタントで [試験対象]から開始される場合に、ドキュメントへの連動が行われます。
        final String TARGET = "[試験対象]BlancoBcelを用いた文字列解析の挙動についての確認。";

        String value = "期待";
        value += "値";

        // コンスタントで [試験]から開始される場合に、ドキュメントへの連動が行われます。
        assertEquals(
                "[試験][正常系]文字列 \"期待\" と \"値\" とを結合した結果、コンスタントを結合した結果が 値\"期待値\" になることを確認。",
                "期待値", value);
    }
}
