矢崎です。続きです。
(太郎さん)
今コーヒー飲みながら次郎君から聞いたんだけれど、
Configファイルにある頭が「X-」で始まるものは、RFC
で決まっていないものということで、まあ、設定者が
好きに決めれるみたい。だから、これは自由設定OKと
いうことで、それ専用のアクセサを作らないで、Config
に書いてある順番で取り出せるようにしよう(あくまでも
頭が「X-」で始まるものだけ)。でも、MLの名前だけは、
これは仮の宛先に使われるんだよね。きっと。だから
こいつは特別扱いする必要あり。ということで、getName
はそのままっと。
えーとtestConstructor1と3を書きなおせばいいかな?
あ、それと、Configファイルの中身もテストメソッド自身に
書かせちゃおう。testConstructor1と3に必要だから、
こんな感じ?
・・・・
/*
* @(#)ConfigTest.java
*/
package XP.jp.co.esm.wiki.extremedomo;
import junit.framework.*;
import java.io.*;
import java.util.*;
public class ConfigTest extends TestCase {
public ConfigTest(String name) {
super(name);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(ConfigTest.class);
}
public void testConstructor1(){
FileOutputStream fo;
try{
fo = new FileOutputStream("config");
}catch(FileNotFoundException e){
throw new RuntimeException("unable to open config file");
}
PrintWriter pw = new PrintWriter(fo);
pw.println("X-ML-Name: extremeprogramming-jp");
pw.println("Y-ML-Name: extremeprogramming-false");
pw.println("X-Mail-Count: 00796");
pw.println("Y-Mail-Count: 00888");
pw.println("X-MLServer: fml [fml 2.1_GAMMA#185](distribute only
mode)");
pw.println("Y-MLServer: fml [fml 2.1_GAMMA#185](not distribute
only mode)");
pw.println("X-ML-Info: If you have a question, contact with me");
pw.println("Y-ML-Info: If you have a question, do not contact with
me");
pw.close();
try{
fo.close();
}catch(IOException e){
throw new RuntimeException("error on closing config file");
}
Config aConfig = new Config("config");
assertEquals("test1", "extremeprogramming-jp", aConfig.getName());
Iterator iterator = aConfig.getXInfo();
assertEquals("test2", "X-ML-Name: extremeprogramming-jp",
iterator.next( ));
assertEquals("test3", "X-Mail-Count: 00796", iterator.next( ));
assertEquals("test4", "X-MLServer: fml [fml
2.1_GAMMA#185](distribute only mode)", iterator.next());
assertEquals("test5", "X-ML-Info: If you have a question, contact
with me", iterator.next());
assert("test6", ! iterator.hasNext());
}
public void testConstructor2(){
try{
Config aConfig = new Config("nonconfig");
fail("Should raise an IllegalArgumentException");
}catch(IllegalArgumentException e){
assert(true);
}
}
public void testConstructor3(){
FileOutputStream fo;
try{
fo = new FileOutputStream("badconfig");
}catch(FileNotFoundException e){
throw new RuntimeException("unable to open badconfig file");
}
PrintWriter pw = new PrintWriter(fo);
pw.println("Y-ML-Name: extremeprogramming-false");
pw.println("X-Mail-Count: 00796");
pw.println("Y-Mail-Count: 00888");
pw.println("X-MLServer: fml [fml 2.1_GAMMA#185](distribute only
mode)");
pw.println("Y-MLServer: fml [fml 2.1_GAMMA#185](not distribute
only mode)");
pw.println("X-ML-Info: If you have a question, contact with me");
pw.println("Y-ML-Info: If you have a question, do not contact with
me");
pw.close();
try{
fo.close();
}catch(IOException e){
throw new RuntimeException("error on closing badconfig file");
}
Config aConfig = new Config("badconfig");
try{
aConfig.getName();
fail("Should raise an IllegalArgumentException1");
}catch(IllegalArgumentException e){
assert(true);
}
}
protected void setUp() {
}
protected void tearDown(){
}
}
・・・・
(太郎さん)
コンパイルしてっと、、、ConfigにgetXInfoってのを追加すること
にしたからコンパイルは当然今は通りません。
では、次はConfigの修正。
getName以外は全ていらなくなったから削除。それとgetXInfoを
追加っと。
・・・・
/*
* @(#)Config.java
*/
package XP.jp.co.esm.wiki.extremedomo;
import java.util.*;
public class Config {
public Config(String nameOfConfigFile) {
}
public String getName() {
return null;
}
public Iterator getXInfo() {
return null;
}
}
・・・・
(太郎さん)
これでConfigとConfigTestをコンパイル。
コンパイルはOK.。じゃ、次はテスト
Runが3でFailuresも3、よしと。
では、Configの中身を埋めていこう。
・・・・
/*
* @(#)Config.java
*/
package XP.jp.co.esm.wiki.extremedomo;
import java.util.*;
import java.io.*;
public class Config {
public Config(String nameOfConfigFile) {
FileReader fileIn;
BufferedReader bufIn;
String fileLine;
try{
fileIn = new FileReader(nameOfConfigFile);
bufIn = new BufferedReader(fileIn);
}catch(FileNotFoundException e){
throw new IllegalArgumentException();
}
xList = new ArrayList();
while(true){
try{
fileLine = bufIn.readLine();
}catch(IOException e){
break;
}
if (fileLine == null) break;
if (fileLine.startsWith("X-ML-Name:"))
name = fileLine.substring("X-ML-Name:".length()).trim();
if (fileLine.startsWith("X-")) xList.add(fileLine.trim());
}
try{
bufIn.close();
fileIn.close();
}catch(IOException e){
}
}
public String getName() {
return name;
}
public Iterator getXInfo() {
return xList.iterator();
}
String name;
List xList;
}
・・・・
(太郎さん)
コンパイルはOK。でもコンストラクタがだらだらっと
なっちゃってるな。smellだよね。後でリファクタリング
しなくちゃ。花子さん、やってくんないかな?
それとExceptionのところも、見なおししなきゃ。これも
後から、、、
じゃ、とりあえずテストをしよう。。
testConstructor1と2は通ったけど、3が通んなかった。
ちょっと、休憩。花子さん、どこで油売ってんのかな?
--
矢崎博英 firo@....jp