/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: DefaultSummaryGeneratorTest.java,v 1.2 2005/05/31 14:38:20 rampil Exp $
 */
package org.logical_paradox.koike.core.summary;

import junit.framework.TestCase;

/**
 * DefaultSummaryGeneratorのテストケース
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public class DefaultSummaryGeneratorTest extends TestCase {
	/** テスト用のテキスト */
	public static final String TARGET_DOCUMENT =
		"Open-SEDKは、ロボット型サーチエンジン開発のお手伝いをする他に、プログラミングを趣味とする人々に対して、楽しくて刺激的なオモチャを提供する目的もあります。\n" +
		"実際にどのようにして遊べばよいかについては、段階的に例示していきたいと考えています。\n" +
		"オープンソースのプロジェクトですので、そのまま実用したり、あるいは実用目的のサーチエンジンを開発するのは止めませんが、それよりも「楽しく」遊んでいただけると、開発者としては嬉しく思います。";

	/**
	 * Constructor for DefaultSummaryGeneratorTest.
	 * @param arg0
	 */
	public DefaultSummaryGeneratorTest(String arg0) {
		super(arg0);
	}
	/**
	 * 評価ポイント計測のテスト
	 */
	public void testEvaluationCalculation() {
		final String summary = "そのまま実用したり、あるいは実用目的のサーチエンジンを開発するのは止めませんが、";
		final String[] terms = new String[] {"その","実用","サーチエンジン","テキスト"};
		int summaryLength = summary.length();

		DefaultSummaryGenerator.EvaluationPoint evalp = new DefaultSummaryGenerator(summaryLength).eval(summary, 199, terms);
		// distance  = 13字 * 100 / 40 = 32.5
		// variation = 3 * 100 / 4 = 75
		// totalscore= 32+75*9 = 707
		assertEquals(707, evalp.getLocationScore());

		// 別のサマリーを同じ条件でテスト(より少ない情報) ※「サーチエンジン」→「検索エンジン」
		final String summary2 = "そのまま実用したり、あるいは実用目的の検索エンジンを開発するのは止めませんが、";

		DefaultSummaryGenerator.EvaluationPoint evalp2 = new DefaultSummaryGenerator(summaryLength).eval(summary2, 200, terms);
		// distance  = 6字 * 100 / 40 = 15
		// variation = 2 * 100 / 4 = 50
		// totalscore= 15+50*9 = 707
		assertEquals(465, evalp2.getLocationScore());

		// 最初のサマリーのほうが条件がよかったはず
		assertTrue(evalp2.getLocationScore() < evalp.getLocationScore());
	}
	/**
	 * サマリー作成のテスト001
	 * 本文の途中から選択される場合
	 */
	public void testSummaryCreation001() {
		final int summaryLength = 15;
		final String[] terms = new String[] {"その","実用","ロボット","ます"};

		// サマリー作成(サマリー長=15文字)
		String summary = new DefaultSummaryGenerator(summaryLength).createSummary(TARGET_DOCUMENT, terms);

		assertEquals("..そのまま実用したり、あるいは実..", summary);
	}
	/**
	 * サマリー作成のテスト002
	 * 本文の最初から選択される場合
	 */
	public void testSummaryCreation002() {
		final int summaryLength = 15;
		final String[] terms = new String[] {"Open-SEDK"};

		// サマリー作成(サマリー長=15文字)
		String summary = new DefaultSummaryGenerator(summaryLength).createSummary(TARGET_DOCUMENT, terms);

		assertEquals("Open-SEDKは、ロボット..", summary);
	}
	/**
	 * サマリー作成のテスト003
	 * 本文の最後が選択される場合
	 */
	public void testSummaryCreation003() {
		final int summaryLength = 15;
		final String[] terms = new String[] {"嬉しく思います。"};

		// サマリー作成(サマリー長=15文字)
		String summary = new DefaultSummaryGenerator(summaryLength).createSummary(TARGET_DOCUMENT, terms);

		assertEquals("..開発者としては嬉しく思います。", summary);
	}
}
