Win32でテストがコケていたので再現して直した

Nobuo Danjou
2010-08-15T12:14:12+0900

App::Hacheroというモジュールでちょっと前からWin32でテストがコケていて、直せるもんなら直したいなぁ、と思っていたんですが、夏休みという事で(普段と何も変わらんのですが)思い切ってvmware fusionのWindows XPにActivePerlをインストールしてみました。

http://www.activestate.com/activeperl/downloads に行ってMSIをダウンロードしてインストーラを実行して、コマンドプロンプトを立ち上げてcpanって打ち込むとよしなにcpanが動くようにしてくれました。なんだ簡単じゃないですか。それであとは依存モジュールを普通にもりもり入れてテストするだけ。

一点困ったのが、cpan DateTime::TimeZoneを実行すると、MAXLINELENGTHが小さいと言われてエラーになる件。ググるとdmake -x MAXLINELENGTH=300000とかしろという話だったんですが、小文字の「-x」はInvalid argumentと言われ、試しに大文字の「-X」として実行したら通りました。

> cpan
cpan> look DateTime::TimeZone
> perl Makefile.PL
> dmake -X MAXLINELENGTH=300000
> dmake -X MAXLINELENGTH=300000 test
> dmake -X MAXLINELENGTH=300000 install

という感じです。

-x - export macro values to environment
-X - ignore #! lines at start of makefile

という事で、意味的には小文字の方がただしそうなんですが。あってんのかな。

で、App::Hacheroですが、何でテストがコケていたかというと、

このへんを見ると

  • ファイルパスを文字列として扱って、ファイル名を正規表現で取り出そうとしていた
  • ファイルコピーをsystem('cp')でやっていた
  • Templateで加工した結果を比較するときに改行コードを考慮しなかった

の3点くらいがありそう。いかにもwindowsでの実行を考えてなかったパターンですね。

という事で

http://github.com/lopnor/App-Hachero/commit/6e89659aa35902e04dad020173c5533628935a76

この変更をして手元のWindowsでテストを通して0.13としてリリースしました。

http://search.cpan.org/~danjou/App-Hachero-0.13/

ということで、Windowsでのテストを食わず嫌いしてましたが、意外に簡単だったので、これからはちゃんとWindowsでテストしてからリリースしようと思いました!