« 2009年5月 | トップページ | 2009年7月 »

2009年6月

2009年6月27日 (土)

iPhoneで拡張子がepubなのに、このファイルはダウンロードできませんが出力される

iPhoneを買ったので、さっそくThe Pragmatic Bookshelfで買った電子書籍を
iPhoneで読むぞとsafariから
epub (for iPhone, Sony, etc) (516.6 KB)
をクリックすると、このファイルはダウンロードできませんの表示が。
FAQを見ると、Stanzaという無料の電子書籍リーダを入れろとあるので、
入れてみたが、変わらない。
ネットで検索してもそれらしい記述がないので、ちょっと唸ったが、ようやく解かった。

1.Stanzaを立ち上げる
2.オンラインカタログを選ぶ。
3.右下のアイコンの+をクリック
4.Add Web Pageを選択
5.URLにhttp://www.pragprog.com/iphone/downloads/ebooksをセットし、保存

作成したカタログをクリックし、そこからだとdownloadできた。

| | コメント (0) | トラックバック (0)

2009年6月26日 (金)

vimで特定のファイルの特定行に飛ぶ

vimでノーマル・モードでカーソルの下にあるファイルのパスにジャンプするにはgfを入力するか、もしファイル名 行番号のようにファイル名の後に行番号がある場合はgFでそのファイルのその行に飛ぶことができる。
例えばLinuxで下記のようなエラー表示をファイルに保存すればgFでエラーの箇所に直接飛ぶことができる。
from /usr/lib/ruby/lib/ruby/1.8/optparse.rb:1443:in `catch'

ただ、windowsでは下記のような記述の上でgfもしくはgFを入力すると
from d:/Program Files/ruby-1.8/lib/ruby/1.8/optparse.rb:1443:in `catch'
E447: pathには "d:/Program" というファイルがありません
が表示される。
これは、vimの設定でファイル名として許される文字にwindowsの場合 (スペース)が含まれないためだ。また逆に:が含まれているため、 (スペース)をつけただけでは
E447: pathには "from d:/Program Files/ruby-1.8/lib/ruby/1.8/optparse.rb:1256:in
" というファイルがありません

となってしまう。なので、下記のようにファイル名として許される文字から:を抜きスペースを許す設定をする。
:set isfname=\ ,@,48-57,\\,/,.,-,_,+,,,#,$,%,{,},[,],@-@,!,~,=
これでgFでカーソル下のファイルの行番号に飛ぶことができる。

| | コメント (0) | トラックバック (0)

2009年6月19日 (金)

rake specが warning: useless use of == in void context

rspecのitの中で最後の文以外でsholud == を使うと 
warning: useless use of == in void context
のWarningが出力される。 

==が返すtrue,falseを使用していないよ、=と間違っている
んじゃない?というrubyの文法チェッカーの警告だと思われる。

別にWarningだけで、テストには影響ないのでいいのだが、ちょっと気持ち悪い。
気にしたいWarningを見落とすかもしれないし、できれば出力しないようにしたい。

should eqlだと上記warningがでないことを発見!
厳密に言うと==とeqlは再定義を行えば、違う可能性もあるけど、そうなることなんて
ほとんどないだろうから、これからは
should eql
で行こう!

| | コメント (2) | トラックバック (0)

2009年6月 6日 (土)

WindowsでSelenium RC + Rspec

Google App engineのPythonで作ったツールのテストをどうしようかなと思っていたら、業務でつかっているSeleniumがぴったりだと気づいた。
しかし、毎回ログインするのは面倒だったり、テストケースを日本語で表示したかったりということで、RSpec上にSeleniumを使った試験をWindows上に構築。
おまけに画面キャプチャもテスト中のプログラムからも行えるようにしてみた。
複雑そうに見えるこの作業も今や本当に簡単になったもんだと感動。

手順
1.下記のリンクからSelenium RCのダウンロードし、適当なディレクトリに展開
  http://seleniumhq.org/download/

2.RSpecのインストール

gem install rspec

3.SeleniumのRuby用アダプタ

gem install selenium-client

4.コンソールでRSpecの試験結果の色を表示するため。

gem install win32console

5.FireFoxのアドオンScreengrabを下記URLからインストール
 https://addons.mozilla.org/ja/firefox/addon/1146

6.下記の内容のRakefileを適当なディレクトリに作成

 # cofing: utf-8
require 'rubygems'
require 'spec/rake/spectask'

task :default => [:spec]

Spec::Rake::SpecTask.new do |t|
  t.warning = true
  t.rcov = false
  t.spec_opts << '--color' << '-fs'
end

7.6.で作ったRakefileのディレクトリの配下にspecという名前のディレクトリの作成

8.7.で作ったディレクトリに下記の内容のselenium_helper.rbを作成

 require 'date'
module SeleniumHelperMethods
  def startup
    @captures = {}
    i=1
    date_str=Date.today.to_s.gsub("-","")
    while File.exist?(File.dirname(__FILE__) + "/capture/" + date_str + "/" + i.to_s) do
      i+=1
    end
    @dir_name = File.dirname(__FILE__) + "/capture/" + date_str + "/" + i.to_s
    FileUtils.mkdir_p(@dir_name)
    @selenium_driver = Selenium::Client::Driver.new(
        :host => "localhost",
        :port => 4444,
        :browser => "*firefox",
        :url => "http://localhost:8080",
        :timeout_in_second => 80,
        :javascript_framework => :prototype)

    @selenium_driver.start_new_browser_session
    @selenium_driver.open "/"
    @selenium_driver.type "email", "test@example.com"
    @selenium_driver.click "//input[@value='Login']", :wait_for => :page
  end
  def capture
    @captures[self.description] = 0 unless @captures[self.description]
    @captures[self.description]+=1
    capture_name = NKF.nkf("-Sw",self.description) + "_" + @captures[self.description].to_s + ".png"
    @selenium_driver.capture_entire_page_screenshot(@dir_name + "/" + capture_name, "");
  end
end

Selenium::Client::Driver.newの内容は各自のアプリケーションに合わせて適宜修正してください。ここでは、GAEのローカルのテストを想定しています。

9.7.で作ったディレクトリ配下にRSpecのテストを適当_spec.rbの名前でutf-8の文字コードで作成(下記は私のアプリの例)

 #!/usr/bin/env ruby
#
# Sample Ruby script using the Selenium client API
#
$:.unshift File.expand_path(File.dirname(__FILE__))
require "rubygems"
require "spec"
require "nkf"
require "selenium/client"
require "selenium/rspec/spec_helper"
require "selenium_helper"

describe NKF.nkf("-Ws",%q|帳簿登録|) do
  attr_reader :selenium_driver
  alias :page :selenium_driver
  include SeleniumHelperMethods
  before(:all) do
    startup
  end
 
  after(:each) do
    capture
  end
  after(:all) do
    @selenium_driver.stop
  end
  it NKF.nkf("-Ws",%q|登録ボタンで一覧に表示|) do
    page.type 'category','food'
    page.type 'account_price','200'
    page.type 'account_content','パン'
    page.click '//input[@value="登録"]', :wait_for => :ajax
    page.table_cell_text('//table[@class="account_list"].1.1').should == '200円'
  end
end

上記のNKF.nkf("-Ws",%q|帳簿登録|)のくだりは、rspec実行時にコマンドプロンプト上ではUTF-8は文字化けしてしまうため、sjisに変換している。 またcaptureメソッド呼び出しにより、その時点の画面のキャプチャがitに指定した文言+連番で取得できる。一応各テスト終了ごとに自動的に画面キャプチャを呼び出すようにしている。

10.1.で展開したディレクトリの配下のselenium-server-1.0に移動し、下記のコマンド実行により、Selenium RCサーバの起動

java -jar selenium-server.jar

11. 6.で作ったRakefileがあるディレクトリに移動し、下記のコマンドでRSpecの実行

rake spec

以上

うまくいけば、下記のような快適な環境ができる。

コマンドプロンプト

D:\test>rake spec
(in D:/test)

帳簿登録
- 登録ボタンで一覧に表示

Finished in 15.891 second

1 example, 0 failures

登録ボタンで一覧に表示_1.png _1
登録ボタンで一覧に表示_2.png _2

| | コメント (0) | トラックバック (0)

2009年6月 4日 (木)

windowsでるりまのrefeをrefe.vimで使う

windowsでるりまの最新のrefeを使おうと
するとまず、unknown database scheme: cのエラーがでる。
滝谷日記さんのおかげで-dの後にfile://をつけることで解決する。だが、まだ難所が続く。コマンドプロンプト上でのrefeはおかげで動くようになったのだが、vim上の:Refe実行では、`fork': fork() function is unimplemented on this machine (NotImplementedError)
のエラー。
refe.vimの91行目
let option = '-s'

   ↓

let option = ''

にすることで一応解決
ちなみにlookupfileも無効にしたほうがいいため、
refe.vimの45行目

let g:RefeUseLookupFile = 1

   ↓

let g:RefeUseLookupFile = 0

にするほうが断然おすすめ。
-sがないせいか、ちょっと遅く感じるが、仕方ないか。

| | コメント (0) | トラックバック (0)

vimの矩形選択を便利にする

vimでカーソルを現在表示しているバッファの一番下にするにはどうするんだっけと:help motion.txt
で調べたところLであることを発見。それとは別にめっちゃ便利な設定を発見。
set virtualedit=block
これでCtrl+vによる矩形選択時に文末までではなく、無限にカーソルを進めることができる。
よくrspecで期待した結果と実際の結果を比較する際に矩形選択で横に並べたりするのだが、
その際一番下の行より長い行がある際はわざわざ一番下の行にスペースを付加することで
矩形選択できるようにしていたが、その必要がなくなった。

| | コメント (0) | トラックバック (0)

« 2009年5月 | トップページ | 2009年7月 »