/*
* 作成日: 2005/03/22
*
* FIXME この生成されたファイルのテンプレートを変更するには次へジャンプ:
* ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
*/
package com.wikiroom.tpircs.checkstyle.check;
import junit.framework.TestCase;
import com.puppycrawl.tools.checkstyle.TreeWalker;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import com.puppycrawl.tools.checkstyle.api.FileContents;
import com.puppycrawl.tools.checkstyle.api.LocalizedMessage;
import com.puppycrawl.tools.checkstyle.api.LocalizedMessages;
import com.puppycrawl.tools.checkstyle.api.TokenTypes;
import com.puppycrawl.tools.checkstyle.api.Utils;
/**
* メソッド部分だけでテストが書けなくて 寂しくもテスト対象はファイルです ふん、テストできてりゃいいんだよ。
*
* @author tpircs
*/
public class TestMain extends TestCase {
/** テスト対象ファイルディレクトリ */
private String root = "D:/eclipse-workspace/MethodPointCheck/testFile/";
/** テスト対象クラス */
private MethodPointCheck methodPointCheck = new MethodPointCheck();
/** メッセージ置き場 */
private LocalizedMessages messages = new LocalizedMessages();
/**
* @see junit.framework.TestCase#setUp()
*/
protected final void setUp() throws Exception {
methodPointCheck.setMessages(messages);
}
// /**
// * 簡単なファイルでテスト
// */
// public final void testSimpleFile() throws Exception {
// FileContents contents = createFileContents(root + "Test.java");
//
// methodPointCheck.setFileContents(contents);
// methodPointCheck.visitToken(getMethod_DEF(contents));
//
// assertEquals("メソッドが 24 ポイントです(最大 15 ポイントまで)。", getMessage(0));
// }
// /**
// * IFのテスト
// */
// public final void testIFFile() throws Exception {
// FileContents contents = createFileContents(root + "IF.java");
//
// methodPointCheck.setFileContents(contents);
// methodPointCheck.visitToken(getMethod_DEF(contents));
//
// assertEquals("メソッドが 20 ポイントです(最大 15 ポイントまで)。", getMessage(0));
// }
/**
* IFのテスト2
*/
public final void testIF2File() throws Exception {
FileContents contents = createFileContents(root + "IF2.java");
methodPointCheck.setFileContents(contents);
methodPointCheck.visitToken(getMethod_DEF(contents));
assertEquals("メソッドが 22 ポイントです(最大 15 ポイントまで)。", getMessage(0));
}
/**
* ためたメッセージを取得
* @param i i番目のメッセージ
* @return メッセージ
*/
private String getMessage(final int i) {
LocalizedMessage[] localizedMessages = messages.getMessages();
return localizedMessages[i].getMessage();
}
/**
* FileContentsを作成
* @param fileName ファイル名
* @return ファイルコンテンツ
* @throws Exception むし
*/
private FileContents createFileContents(final String fileName)
throws Exception {
final String[] lines = Utils.getLines(fileName, "Shift_JIS");
return new FileContents(fileName, lines);
}
/** FileContentsからメソッド部分を取得 */
private DetailAST getMethod_DEF(FileContents contents) throws Exception {
final DetailAST rootAST = TreeWalker.parse(contents);
return serchFirstMethod_def(rootAST);
}
/** 探す なんかこのロジックおかしい気が・・・ */
private DetailAST serchFirstMethod_def(DetailAST aAST) {
DetailAST target = aAST.findFirstToken(TokenTypes.METHOD_DEF);
if (target != null) {
return target;
} else {
final DetailAST child = (DetailAST) aAST.getFirstChild();
if (child != null) {
DetailAST temp = serchFirstMethod_def(child);
if (temp != null) {
return temp;
}
}
final DetailAST sibling = (DetailAST) aAST.getNextSibling();
if (sibling != null) {
DetailAST temp = serchFirstMethod_def(sibling);
if (temp != null) {
return temp;
}
}
return null;
}
}
/** 痛々しい・・・ いいんだよ、これでチキショウ */
private String 整形(String in) {
int start = in.indexOf("メソッドが ") + "メソッドが ".length();
int end = in.indexOf(" ポイントです");
return in.substring(start, end);
}
}