=begin

= WebUnit Tips

== ベースとなるURLを決める

テストはどこのマシンでも動作することができるように、例えば、テストしようとする
アプリケーションのURLが http://kona.xxx.jp/~yuichi/tmp/test/ の下にあるならば、
このURLを環境変数URLBASEへ設定する。

テストケースの中では @urlbase として参照する。

== レスポンスを受け取る

  !block example
  url = @urlbase + 'xxx/xxxx.html'
  response = Response::get( url )
  !endblock
  
== HtmlElem

tree に含めたくない場合は (({WebUnit::Parser::ignore}))
で不要なタグを指定しておくことが可能。

== フォームのテスト

=== テスト対象

  !block example
  <form action="xxxx" method="POST">
    <input type="text" name="login" value="x">
  <form>
  !endblock

=== テスト準備

  !block example
  response = Response::get( url )
  form = response.form
  parameters = form.parameters
  !endblock

=== テキストフィールドなどのテスト

テキストフィールドなど(hiddenやpassword)は以下のようにして、
それぞれの属性の値を取得することができる。

(1)から(4)は等価であるので、テスト仕様として見やすいものを採用する。

  !block example
  assert_input( 'login', 'text', 'x', parameters[0] )    # ---(1)
 
  spec = { 'name'=>'user', 'type'=>'text', 'value'='x' } # ---(2)
  assert_attrs( spec, parameters[0] )                    # ---(2)
  
  assert_equals( 'login', parameters[0].name )           # ---(3)
  assert_equals( 'text', parameters[0].type )            # ---(3)  
  assert_equals( 'x', parameters[0].value )              # ---(3)    

  assert_equals( 'login', parameters[0].attrs['name'] )  # ---(4)
  assert_equals( 'text', parameters[0].attrs['type'] )   # ---(4)  
  assert_equals( 'x', parameters[0].attrs['value'] )     # ---(4)    
  !endblock
  
== テーブルのテスト

=== テスト対象

  !block example
  <table>
    <tr bgcolor='white'>
      <td>EUC</td>
      <td><a href='sjis.html'>SJIS</a></td>
    </tr>
    <tr bgcolor='red'>
      <td><a href='jis.html'>JIS</a></td>
      <td>UTF-8</td>
    </tr>
  </table>
  !endblock

=== テスト準備

  !block example
  response = Response::get( url )
  table = response.tables[0]
  !endblock
  
=== テーブルセルのテスト

単純な文字列をテストする場合、以下の2つの方法で記述できる。

  assert_equals( "EUC", table.at(1,1).data ) # a.
  assert_include( "EUC", table.at(1,1) )     # b.

リンクが設定されている文字列をテストしたい場合は
リンク自体の data をテストする必要がある。
このため、c. はfailするので、d. か e. の形式で記述する必要がある。
e. の記述を行うとその他のタグで囲まれていても成功する。

  assert_equals( "SJIS", table.at(1,2).data )           # c.
  assert_equals( "SJIS", table.at(1,2).find("a").data ) # d.
  assert_include( "SJIS", table.at(1,2) )               # e.
  
また、特定の HtmlElem が特定のセルに含まれている必要がある場合、
f. のように記述することができる。

  assert( table.at(2,1).has?( response.links[1] ) )  # f.

=== テーブル行のテスト

行の属性をテストする。

  assert_equals( 'red', table.at(2).attrs['bgcolor'] )

行に含まれるデータをテストする

  assert_include( "SJIS", table.at(1) )

== リダイレクト

=== HTTPリダイレクト

レスポンスがHTTPリダイレクトだと分かっている場合は以下のように記述する
ことができる。HTTPリダイレクト(コード:302)でない場合は、例外が発生する。

  response = Response::get( url ).redirect

=== JavaScriptによるリダイレクト(open)

  response = Response::get( url ).open.read
  response = Response::get( url ).opens[0].read

== パラメータの数

: Form#params
  これは Hash。ユニークな名前を持つ Param。
: Form#parameters
  これは Array。Paramの数。

name属性に同じものが無ければ、この二つは同じ値となる。

== 省略形

* Response#form → Response#forms[0]
* Response#link → Response#links[0]
* Response#open → Response#opens[0]
* Response#table → Response#tables[0]
* Response#frame → Response#frames[0]
* Response#params → Response#forms[0].params

# $Id: TIPS-ja.rd,v 1.1.1.1 2003/01/21 11:50:39 yuichi Exp $

=end