Created
December 10, 2008 04:13
-
-
Save takedasoft/34224 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* TmpFile.scala | |
* | |
* specsのためのバグを含んだ簡単な実装です。 | |
*/ | |
package takedasoft | |
import java.io._ | |
/** | |
* 一時ファイル操作のユーティリティ | |
*/ | |
class TmpFile { | |
/** | |
* 一時ファイル名 | |
*/ | |
lazy val name:String = "_ST_" + System.currentTimeMillis + ".tmp" | |
/** | |
* 一時ファイルのFileオブジェクト | |
*/ | |
lazy val file:File = new File( name ) | |
/** | |
* 一時ファイルからyourFileNameへ内容をコピーする。 | |
*/ | |
def sinkTo(yourFileName:String):Either[File, String] = { | |
yourFileName match { | |
case "" => Right("empty file name") | |
case _ => Left(new File(yourFileName)) | |
} | |
} | |
/** | |
* dataを一時ファイルに書き込む | |
*/ | |
def write(data:String):Unit = { | |
val writer:Writer = new FileWriter(file) | |
try{ | |
writer.write(data) | |
}catch{ | |
case e:Exception => throw e | |
}finally{ | |
writer.close | |
} | |
} | |
/** | |
* 一時ファイルからデータを読む | |
*/ | |
def read:String = "not implemented" | |
/** | |
* 一時ファイルを削除する | |
*/ | |
def destroy:Boolean = file.delete | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* TmpFileSpec.scala | |
* TmpFileの仕様 | |
*/ | |
package takedasoft | |
import org.specs._ | |
import java.io.File | |
object TmpFileSpec extends Specification("TmpFileの仕様") { | |
def cannot = "このルートはありえない" must_== "" | |
"TmpFile" should { | |
"一時ファイル名" in { | |
"接頭が _ST_ の21文字であること" in { | |
val tmp = new TmpFile | |
tmp.name must startWith("_ST_") | |
tmp.name.size must_==21 | |
tmp.destroy | |
} | |
"拡張子が .tmp であること" in { | |
val tmp = new TmpFile | |
tmp.name must endWith(".tmp") | |
tmp.destroy | |
} | |
} | |
"一時ファイルへの書き込みができること" >> { | |
val tmp = new TmpFile | |
val data = "some temporary data" | |
var road:String = "" | |
"書き込めること" >> { | |
tmp.write(data) | |
} | |
"読み込めること" >> { | |
road = tmp.read | |
} | |
"書き込んだ内容と読みこんだ内容が一致すること" >> { | |
data must_== road | |
} | |
tmp.destroy must_== true | |
} | |
"一時ファイルから任意のファイルに内容をコピーできること" >> { | |
val tmp = new TmpFile | |
"コピーできること" >> { | |
val data = "some temporary data" | |
val myFileName = "my-data.txt" | |
tmp.write(data) | |
tmp.sinkTo(myFileName) match{ | |
case Left(myFile) => myFile must exist | |
case Right(err) => cannot | |
} | |
} | |
"ファイル名を指定しない場合はエラーメッセージ" >> { | |
tmp.sinkTo("") match{ | |
case Left(myFile) => cannot | |
case Right(err) => err must_=="empty file name" | |
} | |
} | |
tmp.destroy must_== true | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment