[Openlaszlo-i18n 60] Re: 実装後のテストについて

Back to archive index

Yoshihiro ICHIYANAGI ichan****@im*****
2005年 10月 4日 (火) 10:45:44 JST


ichanです。

> それぞれクラスのメッセージの置き換えの際には必ず以下のようにコーディング
> することにしましょう。
> 
> > // @laszlo-18n.test.begin
> > // org-mes: "LPS requires a servlet container" +" that can implements ServletContent.getRealPath()"
> > 		respondWithInitError(req, res, LaszloMessages.getMessage(PREFIX_NAME, 
> > 									"must_upper_ver2.3"));
> > // @laszlo-i18n.test.end

generatorを修正した結果、コメント文も簡潔で済むようになりました。
# @i18n.test.endがいらないくらいですが...

/**
 * @18n.test
 * @org-mes="LPS requires a servlet container"+" that can implements ServletContent.getRealPath()"
 */
          respondWithInitError(req, res, LaszloMessages.getMessage(PREFIX_NAME, 
                                                                  "1"));

以下のコーディング規約に従えばJUnit用クラスが、
manual修正なしにでき上がる(予定です)。

###########################################################################
Coding Policy for OpenLaszlo i18n

1.修正される対象クラスに、クラス変数PREFIX_NAMEを以下のように追加。

    private static String PREFIX_NAME = [Class name].class.getName();

2.LaszloMessagesクラス.メソッドに置き換わるソースコードの
  直前に以下のようなコメント行を追加。

    // @i18n.test
    // @org-mes=...
or
    /**
     * @i18n.test
     * @org-mes=...
     */

3.[@org-mes=] 行には、一行でオリジナルのメッセージを記述(改行をいれない)。
メッセージは文字列で、ダブルクオート(")、プラス(+)及び変数(p0,p1...)を含むことができます。
ここで、メッセージの引数となる変数はp0,p1,..に置き換えます。
# p0,p1の順でお願いします。そうしないとJUnitテストに失敗します。

4.Resourceファイルのフォーマット

 [package name].[class name].[unique id]=[メッセージ with {0} {1}...]

ここで、
 [unique id] は、Eclipse ResourceBundle Editorによって自動生成されます
############################################################################

Resourceファイルの例:

laszlomessages.properties
 org.openlaszlo.servlets.LZServlet.12=\
         Server configuration error: can't parse lps.properties entry '{0}'

laszlomessages_ja.properties
 org.openlaszlo.servlets.LZServlet.12=\
         サーバ設定エラー: lps.propertiesのエントリ名'{0}'が構文解析できません。

# Henryからの意見では、[unique id]はhuman readableなものがいいのでは
# ということでしたが、source codeにはかならずコメント文としてoriginal messages
# が存在するのと、keyの命名に悩んだり他のkeyとの重複による不具合を
# 避けるために、やはりEclipseのplug-in Editorで自動生成されるindex
# をそのまま使っていいような気がします。


ソースの修正例:

package org.openlaszlo.servlets;
public class LZDummy {
      ....

--> private static String PREFIX_NAME = LZDummy.class.getName();
      ....

    public static int getKrankPort () {
        String portStr = LPS.getProperties().getProperty(KRANK_PORT_PROPERTY);
        int portnum = DEFAULT_KRANK_PORT;
        if (portStr == null) {
            return portnum;
        }
        try {
            portnum = Integer.parseInt(portStr);
        } catch (NumberFormatException e) {
-->        /**
-->         * @i18n.test
-->         * @org-mes="Server configuration error: can't parse lps.properties entry '"+ p0 +"'"
-->         */
            throw new RuntimeException(
-->             LaszloMessages.getMessage(PREFIX_NAME,"1",
                                          new Object[]{ KRANK_PORT_PROPERTY }));
        }
        return portnum;
    }
}


generatorによって生成されるクラスは、以下のようになります:

package org.openlaszlo.i18n.test;

import junit.framework.TestCase;

public class LaszloMessagesTester extends TestCase {
   private String p0 = "dummy0";
   private String p1 = "dummy1";
   private String p2 = "dummy2";
   private String p3 = "dummy3";
   private String p4 = "dummy4";
   private String p5 = "dummy5";

   public LaszloMessagesTester() {
      super(LaszloMessagesTester.class.toString());
      // TODO Auto-generated constructor stub
   }

   public LaszloMessagesTester(String name) {
      super(name);
      // TODO Auto-generated constructor stub
   }

// protected void setUp() throws Exception {
// }

   public void testLaszloMessages(){
      asserts("LZTest-1", 
         "Must be at least " + "Version 2.3 Servlet Container!", 
          LaszloMessages,getMessage("org.openlaszlo.servlets.LZTest", "1")
      );
      sserts("LZTest-2", 
         "LPS requires a servlet "+p0+" that can implements ServletContent."+p1+"()", 
          LaszloMessages,getMessage("org.openlaszlo.servlets.LZTest", 
                                   "2", new Object[] {p0,p1})
      );
      asserts("LZTest-3", 
         "LPS running against JRE version < 1.4; this is *not* supported!", 
          LaszloMessages,getMessage("org.openlaszlo.servlets.LZTest", "3")
      );
      asserts("LZTest-4", 
         "Can't parse JRE specification version: " + p0, 
          LaszloMessages,getMessage("org.openlaszlo.servlets.LZTest",
                                    "4",new Object[]{p0})
      );
      asserts("LZDummy-1", 
         "Server configuration error: can't find LPS_HOME.", 
          LaszloMessages,getMessage("org.openlaszlo.servlets.LZDummy","1")
      );
      asserts("LZDummy-2", 
          "Server configuration error: can't parse lps.properties entry '"+ p0 +"'", 
          LaszloMessages,getMessage("org.openlaszlo.servlets.LZDummy",
                                    "2",new Object[]{p0})
      );
   }
}

だた、現在rubyだけでなくjavaのソースファイルをrecursiveにfindするのに
bash系も利用しています。したがって、WinXP環境で利用する場合には
cygwinが必要になります。_no

不明瞭な箇所やこうした方がよいなど、御意見お聞かせください。

ichan



Openlaszlo-i18n メーリングリストの案内
Back to archive index