<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
	<properties>
		<title>Unit Testing for an Annotation Processing Tools</title>
	</properties>
	<body>
		<section name="Aptina Unit">
			<p>
				<strong>Aptina Unit</strong>
				は，
				<a href="http://jcp.org/en/jsr/detail?id=269">
					Pluggable Annotation Processing API (JSR 269)
				</a>
				を利用した注釈処理ツールの単体テストを支援する
				<a href="http://www.junit.org/">JUnit</a>
				拡張を提供します．
			</p>
		</section>

		<section name="Usage">
			<p>
				Aptina Unit は，Aptina Unit の Jar ファイルをクラスパスに設定するだけで使うことができます．
			</p>
			<p>
				Aptina Unit の Jar ファイルは
				<a href="../downloads.html">こちら</a>
				からダウンロードしてください．
			</p>

			<subsection name="Maven での使い方">
				<p>
					Maven を Java6 以降で実行する必要があります．
			</p>
				<p>
					pom.xml に Seasar プロジェクトの Maven リポジトリを追加します．
			</p>
				<source><![CDATA[
<repositories>
  <repository>
    <id>maven.seasar.org</id>
    <name>The Seasar Foundation Maven2 Repository</name>
    <url>http://maven.seasar.org/maven2</url>
  </repository>
</repositories>
]]></source>
				<p>
					依存ライブラリに Aptina Unit を追加します．
			</p>
				<source><![CDATA[
<dependency>
  <groupId>org.seasar.aptina</groupId>
  <artifactId>aptina-unit</artifactId>
  <version>x.y.z</version>
  <scope>test</scope>
</dependency>
]]></source>
			</subsection>
		</section>

		<section name="AptinaTestCase">
			<p>
				<strong>
					<code>AptinaTestCase</code>
				</strong>
				は JUnit の
				<code>TestCase</code>
				を拡張したクラスで， テストメソッドの中で
				<a href="http://jcp.org/en/jsr/detail?id=199">
					Java Compiler API (JSR 199)
				</a>
				を使用して実際に Java コンパイラを起動し，
				注釈処理ツールの単体テストを可能にします．
			</p>
			<p>
				テストクラスを IDE で起動すれば， Annotation Processor のデバッグも容易にできます．
			</p>
			<p>
				注釈処理ツールのテストクラスを作成するには，
				<code>AptinaTestCase</code>
				のサブクラスを作成します．
			</p>
			<p>
				次のサンプルは，
				<code>src/test/java</code>
				フォルダにある
				<code>TestSource.java</code>
				をコンパイルすると，
				<code>foo.bar.Baz</code>
				クラスのソースを生成する注釈処理ツール (TestProcessor) のテストクラスです．
			</p>

			<source><![CDATA[
public class TestProcessorTest extends AptinaTestCase {

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        // ソースパスを追加
        addSourcePath("src/test/java");
    }

    public void test() throws Exception {
        // テスト対象の Annotation Processor を生成して追加
        TestProcessor processor = new TestProcessor();
        addProcessor(processor);

        // コンパイル対象を追加
        addCompilationUnit(TestSource.class);

        // コンパイル実行
        compile();

        // テスト対象の Annotation Processor が生成したソースを検証
        assertEqualsGeneratedSource("package foo.bar; public class Baz {}",
                "foo.bar.Baz");
    }

}
]]></source>
			<p>
				テスト対象の Annotation Processor が生成する Java ソースやリソースは，
				ファイルシステム上ではなくメモリ上に作成されます．
				<code>AptinaTestCase</code>
				は，生成された Java ソースやリソースの内容を取得するメソッドや，
				内容を検証する assert メソッドも提供します．
			</p>
			<p>
				詳細は
				<code>AptinaTestCase</code>
				の
				<a href="apidocs/index.html">Javadoc</a>
				を参照してください．
			</p>
		</section>
	</body>
</document>
