Friday, November 23, 2007

Testing ANY helper in a functional test

Recipe #44 - "Write Tests for Your Helpers" in the book "Rails recipes" instructs us doing this by including helper modules in subclasses of Test::Unit::TestCase. However it wouldn't work if a helper you want to test is implemented with _erbout for example. I have just faced this issue last week, then my colleague suggested me like that "Don't you render it in a view?" (in Japanese). Yes, in a view biding, every helpers must be work correctly.

The solution is like following code:

test/units/foo_helper_test.rb:
...

class FooTestController < ActionController::Base
...
def index
render :inline => <<-INLINE
<% foo do %>
<%= ... %>
<% end %>
INLINE
end

end

class FooHelperTest < Test::Unit::TestCase
def setup
@controller = FooTestController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
end

def test_foo
get :index
# do assert_select or whatever you like, to check rendering result of the helper.
end
end

Subversion Precomposed UTF-8 patch

(2013-02-18: 現在のおすすめは `brew install subversion --unicode-path` (OS X10.8.2, svn 1.7.8 で動作確認))
(2009-08-17: 気がついたら MacPorts にパッチが取り込まれてます。)

前回 Rails on Leopard で紹介したノートの一部でもパッチをあてた Subversion のビルド方法を書いたけど、もう少し詳しく解説します。

簡単に言うと、 Windows を使っている人と Mac を使っている人が Subversion のリポジトリを共有している場合に、 Windows からリポジトリに追加した日本語ファイル名のファイルを Mac で checkout すると svn status などを実行したときにファイルがダブっているように見えて正常に扱えないことがあります。(Mac -> Win の場合でも同様の問題が発生する)

Mac OS X ではファイル名を UTF-8 で保存するときに濁点、半濁点などを decompose (分解) してから保存してしまうために、リポジトリ内のファイル名の文字列と一致しなくなってしまうのが原因。

例えば、「ステージングテスト.xls」という Windows からリポジトリに追加されたファイルを Mac で checkout すると、「ジ」と「グ」は濁点が別の文字として切り離されてファイルシステムに保存されてしまい、リポジトリとワーキングコピーを比較するようなコマンドを実行すると、別々のファイルとして扱われてしまう。

ちょっと話は変わりますが、
僕は仕事で rails のアプリケーションを開発していまして、Tiger のときは VMWare に CentOS(Linux) を入れて、ターミナルから全ての作業をやってましたけど、 Leopard には最初から Rails がインストールされていたりするので、 Mac をネイティブに rails の開発環境として使おうと決心しました。
この Subversion の問題は致命的でした。

Subversion のバグトラッキングシステムには、すでにこの問題(issue - 2464)が2005年12月の段階で指摘されているのにまだ修正(改善?)されていないので、他力本願ではダメだと思い、解決方法を調べてみました。

なんとか到達した僕の解決方法は、svn コマンドが Mac 上でファイル名を扱う時には、ファイルシステムから得られたファイル名の分解された濁点を合成してから行うという方法です。

Apple が配布するバージョンの Subversion へのパッチを当てたバイナリのビルド方法は ココ に書いあります。

手前味噌ですが、Mac から日本語ファイル名を含む Subversion リポジトリにアクセスする必要のある人にとっては必須だと思うので使ってください。

Sunday, November 11, 2007

Rails on Leopard

I had little trouble when I got Leopard ready for my daily task, coding rails applications. I share my notes with hope you think them useful.

Leopard で rails の開発作業ができるまでに多少トラブったので、そのメモを公開します。