- PR -

antのjunitタスクのprintsummary属性で出力されるSystem.Outの日本語化

1
投稿者投稿内容
tomo
常連さん
会議室デビュー日: 2004/07/31
投稿数: 20
投稿日時: 2006-08-18 11:22
【相談内容概要】
antのjunitタスクのprintsummary属性を使ってテスト結果を作成しています。
その際にSystem.outのファイルが出力されるのですが、
HTML用のUnicodeが出力されており、ブラウザで表示できず困っています。
解決方法をご存知の方、いらっしゃいましたらアドバイスをお願いします。

【相談内容詳細】
【ビルドファイルの内容】
(注:junitではなくdjunitタスクになっていますが、動きはほとんどjunitと同じです)
<djunit printsummary="yes" targetSrcDir="${src.main}">
<classpath refid="run.classpath"/>
<formatter type="xml"/>
<batchtest todir="${junit.report.unit-test}">
<fileset dir="${target.test-classes}">
<include name="${func-test.includes}.class"/>
<include name="coverage/**UnitTest.class"/>
</fileset>
</batchtest>
</djunit>

【出力されるファイル】
以下の2種類のファイルが出力されます。
(他にも色々出力されますが今回問題になっているのはこの2種類)
1. (通し番号)_(テストクラス名).html
2. (通し番号)_(テストクラス名)-out.txt

1.のファイルをブラウザに表示した際に、画面下部分に
「System.Out」というリンクが表示され、リンクから
2.のファイルが表示されるようになっています。
2.のファイルは以下のような文字が出力されています。
(例)
「&#12488;&#12521;&#12531;&#12470;&#12463;&#12471;&#12519;&#12531;&#12434;&#38283;&#22987;&#12375;&#12414;&#12375;&#12383;」

ファイルの形式を.txt→.htmlに修正してブラウザに表示させると
上の(例)の場合「トランザクションを開始しました」
と日本語で表示されます。
このことから、「〜-out.txt」の中身はHTMLで表示できるUnicode
に変換されていることはわかるのですが、このファイルだけテキスト形式の
ファイルを直接リンク表示させているためブラウザでは正しく表示できません。

解決方法として、
@「〜-out.txt」の形式をhtmlにし、リンク元のhtmlの内容も
 「〜-out.txt」から「〜-out.html」に記述を修正する
Ajunitタスクを拡張してファイル出力時にJIS等にする

があると思うのですが、何かいい方法がありましたらご教授お願いいたします。
tomo
常連さん
会議室デビュー日: 2004/07/31
投稿数: 20
投稿日時: 2006-08-18 17:01
自己レスです。

【解決方法】
まず、そもそもテスト結果を出力しているのがjunitタスクのprintsummaryではなく
junitreportタスクでした。
そこで、
1.antのapache-ant-1.6.5/src/etcの下にある、junit-frames.xsl
 (junit・junitreportタスクの出力フォーマットの設定をしているファイル)で
「〜-out.txt」の出力フォーマットをしているところがあるので、そこに
「disable-output-escaping="yes"」という設定を追加

修正前:<xsl:if test="string-length(./system-out)!=0">
<redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-out.txt">
<xsl:value-of select="./system-out"/>
</redirect:write>
</xsl:if>
<xsl:if test="string-length(./system-err)!=0">
<redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-err.txt">
<xsl:value-of select="./system-err"/>
</redirect:write>
</xsl:if>
修正後:<xsl:if test="string-length(./system-out)!=0">
<redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-out.txt">
<xsl:value-of select="./system-out" disable-output-escaping="yes"/>
</redirect:write>
</xsl:if>
<xsl:if test="string-length(./system-err)!=0">
<redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-err.txt">
<xsl:value-of select="./system-err" disable-output-escaping="yes"/>
</redirect:write>
</xsl:if>
<redirect:write

2.junitreportタスクの属性reportで、1で修正したファイルを参照するように
設定を追加
 修正前: <report format="frames" todir="${junit.report.func-test}"/>
 修正後: <report format="frames" todir="${junit.report.func-test}"
styledir="etc"/>

以上を行うことにより、文字化けしないファイルが作成できました。
お騒がせいたしました。

[ メッセージ編集済み 編集者: tomo 編集日時 2006-08-18 17:02 ]
1

スキルアップ/キャリアアップ(JOB@IT)