|
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
WebUnit is Ruby API for testing html/cgi without browser,
and is idealy suited for automated unit testing of web sites when combined
with a Ruby unit test framework such as RubyUnit.
It was designed and implemented by Masaki Suketa.
I used HttpUnit with JUnit, however, I didn't like writing test in Java,
when I write program in Ruby. Then, I made it.
WebUnit uses these software follow.
Now, these files of htmlrepair/htmlsplit and html-parser are included
in WebUnit package, so, you don't have to install them.
You have to install RubyUnit and NQXML, before using WebUnit.
Download webunit-20YYMMDD-*.tar.gz from
<URL:http://xpenguin.biz/download/webunit/>,
and, extract it to some directory, then, do ruby install.rb .
Execute test/test_*.rb with test runner like runtest.rb,
after make symbolic link cgi directory to accessable directory via httpd,
with name "webunit".
% ln -s webunit/cgi $DOCUMENT_ROOT/tmp/webunit
% cp webunit/cgi/auth/.htpasswd /tmp
% URLBASE=http://localhost/tmp/ runtest.rb test_link.rb
require 'webunit/webunit'
# get start HTML page
url = 'test-1.html'
response = WebUnit::Response::get( url )
# test HTML page contents
assert_title( 'test-1', response )
assert_equals( 1, response.forms.size )
form = response.form
# test form of HTML page contents
assert_equals( 'ntext', form.parameters[0].name )
assert_equals( 'npassword', form.parameters[1].name )
# execute CGI script, after setting parameters
form.parameters[0].value = "this is test"
form.parameters[1].value = '!@#$%'
response = form.submit
# test output from CGI script
assert_equals( 'result', response.title )
assert_equals( 1, response.links.size )
assert_equals( 'http://....', response.links[0] )
# read link
response = response.links[0].read
This Program is copyrighted free software by yuichi TAKAHASHI.
You can redistribute it and/or modify it under either the terms of the GPL
(see COPYING file), or same as Ruby.
<URL:mailto:yt@xpenguin.biz>
- enable using "Test::Unit" for Testing Framework. (by Kouhei Sutou)
- appends XML Parser support "REXML". (by Kouhei Sutou)
- supports multipart formdata. ready file transfer test. (by Narushima Hironori)
- changes document type sdf to rd. (by Narushima Hironori)
- changes installer to setup.rb. (by Narushima Hironori)
- fix Textarea#query_data and Parser#feed. (Thanks to Torsten Rueger)
- XmlDocument -> DomWalker : rename
- fix for 1.7 parser.(Thanks to Kazuhiro NISHIYAMA)
- fix install.rb for "--program-suffix".(Thanks to Kazuhiro NISHIYAMA)
- XmlDocument#size : new.
- mail addres of author is changed.
- XmlDocument#change_node : bug fix.
- Parser#do_input : support input tag without form tag. (Thanks to IKAGAWA, Kauztomo)
- Response#init_http : append header(Content-Type) for POST method.
- Response#init_http : catch IOError of HTTP::finish (for ruby 1.6.5)
- Response#get,post,init_http : to use BasicAuth.
- sample/cgi : remove space charactor between '#!' and '/usr/bin/env'
- Responss : use Net::HTTP::new_implementation.
- HtmlElem : fix inspect output when @tag is nil.( as toplevel )
- sgml-parser.rb(line:257) : bug fix, fail when nested tags.
- html-parser/install.rb : fix.
- Parser : add link tag to SingleTags.
- Parser#start_a : execute complete_url, unless the href begins '#'.
- Link : append onClick attribute, and reader.
- Response#init_http : retry, when Errno::EPIPE
- Response::html : append <html> tag, when there is no <html> tag.
- HtmlElem#name : new
- Response#init_html : new, to use WebUnit without http access.
- (code using Response#new) : change to Response#new.init_http
- Response#init_http,feed, : divide initialize.
- perse_url : correspond to relative url and 'file:' prefix.
- perse_url : add '-' to regexp, will match to hostname.
- assert_urls : add success case, use orthop_url for expected url.
- include contrib/{html-parser,htmlrepair} : Thanks these authors.
- html-parser : Takahiro Maebashi
- htmlrepair : MoonWolf
- installer supports to install contrib/{html-parser,htmlrepair}
- Response#initialize : use $URLBASE when url is relational
- Parser#do_img: new
- Response#add_image, Response#images, Response#image : new
- Image : new
- sample, contrib: only directory
- install.rb : new
- all files : reject TAB code ( expect COPYING and Makefile )
- bin : make some commands
- doc : separate document files from cgi directory
- tests : split files, and add testcase methods.
- Utils#complete_url : bug fix
- TestCase#setup : set $URLBASE as @urlbase, Response::reset, restore Cookies
- TestCase#teardown : Response::reset, keep Cookies
- Cookies#cookies/cookies= : new
- Response#reset: close http connection
- assert_urls : new
- WebUnit#assert_equal_url : -> assert_urls
- Select#value : new
- assert_select_option : new
- HtmlElem#initialize : add default value for 2nd argument.
- assert_title : new - show response.body with message.
- HtmlElem#extract : new - make string with nested HtmlElems.
- Response#pbody : use Response#format
- Response#format : new
- MemWriter : new - used by Response#format
- Response#pbody : new - print orthopped Response#body.
- Select#select : accept Array of String(value|data) and Integer(index)
- assert_include : add using HtmlElem#has?
- Link#target : new
- Response#freeze,Form#freeze : new
- Select#value= :
- Form#submit :
- Paser#start_a : replace "&" -> "&" of href. bug of sgml-parser?
- Table#row_index,col_index : new
- Form#store_test_data : new
- assert_input,assert_attrs,assert_include : new
- InputRadio#value= : bug fix
- Textarea#initialize, Select#initialize, SelectOption#initialize : set type
- Parser#attrs_to_hash : bug fix
- Response#push : no longer support, puts WARNING
- Response#click : support for readlink and submit
- Utils#complete_url : <- Response#complete_url & Parser#complete_url
- JSciriptOpenObject : new
- Response#redirect : new
- Form#submit, Response#submit : support InputImage ( add args )
- InputImage : new
- Input#inspect : bug fix.
- Response#initialize : better performance with keeping connection.
- Table#at : to access TableRow with one argument. ( two args for Cell )
- Parser#complete_url : use orthop_url
- Utils#orthop_url : '//', '/\./', '[^/]*/\.\./' -> '/'
- TestCase#initialize : append '/' if last char of URLBASE isn't '/'
- TableRow : new ( Table is also changed )
- Response : attr_accessor -> attr_reader
- HtmlElem#inspect : change format, and stop recursive.
- HtmlElem#print : change format as inspect.
- Response#readlink : use HtmlElem#readlink
- HtmlElem#readlink : new
- Response#click : alias of Response#readlink
- Response#submit,push : same as Response#forms[0].submit
- Response#params : same as Response#forms[0].params
- Response#link,form,table,frame : same as Response#*[0]
- Response#search,find : new
- HtmlElem#search : new
- change file struct.
- Cookies#header : bug fix. ( handle when path == nil )
- Parser#endtag : raise BadHtmlTags exception
- Response#readlink : new ( raise ElemNotFound when failed )
- rename exception : NotFound -> HttpNotFound
- unify linefeed code to '\n'(0x0a) on each files.
- Frame#read : bug fix.
- Response#initialize : raise NotFound exception
- Param#query_data : rename method from data
- InputRadio#query_data : rename method from data
- InputCheckBox#query_data : rename method from data
- InputSubmit#query_data : rename method from data
- InputReset#query_data : rename method from data
- Select#query_data : rename method from data, and so on.
- SelectOption#query_data : rename method from data
- Form#submit : Param#query_data -> Param#query_data
- SelectOption#value : return data, when value is nil
- SelectOption#value= : remove
- SelectOption#data : remove
- SelectOption#data= : remove
- SelectOption#stat= : remove
- Param#value : method -> attr_accessor
- InputRadio#value= : new ( from Param#value )
- Textarea#value : new ( as SelectOption#value )
- Cookies#add : new
|