sbtのscripted testを書いてpull req送りつけるおじさんだよー(sbt-lock編)

こんにちは、なぜか足を捻挫して、ゴールデンウィーク9連休なのにほぼ家に引きこもってるマンです。足はこんな状態です(グロ注意) http://f.hatena.ne.jp/xuwei/20140501181556

さて、そんなことはどうでもよくで、sbt-lockというsbt pluginのテストを書いたので、それの解説を書きます

とくかくまずeed3si9nさんの、これ
http://eed3si9n.com/ja/testing-sbt-plugins
を読みましょう。

さて、sbt-lockは、RubyでのGemfile.lockみたいなものを作るpluginらしいです
http://www.slideshare.net/TakashiKawachi/sbt-lock1
https://github.com/tkawachi/sbt-lock

これ書いてる時点の最新版は0.2.1です。

自分が書いたテストはこれです。
https://github.com/tkawachi/sbt-lock/blob/1f6543ff82ddaecccee120a69f69001ddf9db0fe/src/sbt-test/sbt-lock/simple/test
https://github.com/tkawachi/sbt-lock/pull/8/files

以下、細かい解説*1



1行目2行目
lockを実行したら、lock.sbtが存在しているかチェック

3行目
デバックのために、catで表示

4行目5行目
unlockしたら、ファイルが無くなってることを確認


7行目8行目
もう一度lockを実行して、play-jsonが依存してるjacksonの2.2.2が、dependencyOverridesに存在してるのを確認

12から15行目
play-jsonとは違うversionのjacksonに依存してる"json4s-jackson"をlibraryDependenciesに追加しても、(lockの実行をやりなおす前は)jacksonの"2.2.2"のほうがdependencyOverridesに存在し続けていることを確認

17から19行目
relockをすると、"json4s-jackson"が依存する新しいjackson2.3.1のほうでdependencyOverridesされていることを確認

23から29行目
sbtLockLockFileで明示的にファイル名を変えた場合に、正しくファイルが作成されたり消えたりすることの確認



これで最低限の動作はチェックできてますかね、たぶん。ホントはつい最近マルチプロジェクトに対応したらしい(?)ので、マルチプロジェクトでのテストもできれば書くべきでしょう。


sbt-plugin作るときは、こんな感じでscripted testをぜひ書きましょう。書き方が独自の内部DSLなので、最初はやり方覚えるのに少しだけ苦労しますが、一度覚えると、かなり実際にユーザーが使うのに近い形でテストが書けて、とても安心です。

*1:ところで、このblog書いた後に tkawachi さんがテスト追加したりしてるので、最新版では、ここに書いたものと若干変わってるはずです