ruby-web 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +474 -0
- data/INSTALL.txt +9 -0
- data/InstalledFiles +180 -0
- data/LICENSE.txt +74 -0
- data/Rakefile +529 -0
- data/TODO +65 -0
- data/doc/additional.xml +149 -0
- data/doc/core.xml +652 -0
- data/doc/credits/index.xml +52 -0
- data/doc/credits/php.contributors.xml +118 -0
- data/doc/credits/php.language-snippets.ent +622 -0
- data/doc/install/index.xml +136 -0
- data/doc/install/mac/index.xml +21 -0
- data/doc/install/ruby-web.install.rb.instructions.xml +7 -0
- data/doc/install/unix/index.xml +46 -0
- data/doc/install/win/apache1.xml +166 -0
- data/doc/install/win/apache2.xml +141 -0
- data/doc/install/win/iis.xml +162 -0
- data/doc/install/win/index.xml +24 -0
- data/doc/install/win/installer.xml +31 -0
- data/doc/install/win/manual.xml +43 -0
- data/doc/manual.xml +69 -0
- data/doc/old/apache_cgi.txt +23 -0
- data/doc/old/fastcgi.txt +23 -0
- data/doc/old/mod_ruby.txt +21 -0
- data/doc/old/snippets.rdoc +183 -0
- data/doc/old/webrick.txt +23 -0
- data/doc/old/windows_cgi.txt +9 -0
- data/doc/tutorial.xml +14 -0
- data/doc/xsl/manual-multi.xsl +10 -0
- data/doc/xsl/manual-pdf.xsl +6 -0
- data/doc/xsl/manual-single.xsl +6 -0
- data/doc/xsl/manual.css +22 -0
- data/install.rb +1022 -0
- data/lib/formatter.rb +314 -0
- data/lib/html-parser.rb +429 -0
- data/lib/htmlrepair.rb +113 -0
- data/lib/htmlsplit.rb +842 -0
- data/lib/sgml-parser.rb +332 -0
- data/lib/web.rb +68 -0
- data/lib/web/assertinclude.rb +129 -0
- data/lib/web/config.rb +50 -0
- data/lib/web/connection.rb +1070 -0
- data/lib/web/convenience.rb +154 -0
- data/lib/web/formreader.rb +318 -0
- data/lib/web/htmlparser/html-parser.rb +429 -0
- data/lib/web/htmlparser/sgml-parser.rb +332 -0
- data/lib/web/htmltools/element.rb +296 -0
- data/lib/web/htmltools/stparser.rb +276 -0
- data/lib/web/htmltools/tags.rb +286 -0
- data/lib/web/htmltools/tree.rb +139 -0
- data/lib/web/htmltools/xmltree.rb +160 -0
- data/lib/web/htmltools/xpath.rb +71 -0
- data/lib/web/info.rb +63 -0
- data/lib/web/load.rb +210 -0
- data/lib/web/mime.rb +87 -0
- data/lib/web/phprb.rb +340 -0
- data/lib/web/resources/test/cookie.rb +33 -0
- data/lib/web/resources/test/counter.rb +20 -0
- data/lib/web/resources/test/multipart.rb +14 -0
- data/lib/web/resources/test/redirect.rb +8 -0
- data/lib/web/resources/test/stock.rb +33 -0
- data/lib/web/sapi/apache.rb +129 -0
- data/lib/web/sapi/fastcgi.rb +22 -0
- data/lib/web/sapi/install/apache.rb +180 -0
- data/lib/web/sapi/install/iis.rb +93 -0
- data/lib/web/sapi/install/macosx.rb +90 -0
- data/lib/web/sapi/webrick.rb +86 -0
- data/lib/web/session.rb +83 -0
- data/lib/web/shim/cgi.rb +129 -0
- data/lib/web/shim/rails.rb +175 -0
- data/lib/web/stringio.rb +78 -0
- data/lib/web/strscanparser.rb +24 -0
- data/lib/web/tagparser.rb +96 -0
- data/lib/web/testing.rb +666 -0
- data/lib/web/traceoutput.rb +75 -0
- data/lib/web/unit.rb +56 -0
- data/lib/web/upload.rb +59 -0
- data/lib/web/validate.rb +52 -0
- data/lib/web/wiki.rb +557 -0
- data/lib/web/wiki/linker.rb +72 -0
- data/lib/web/wiki/page.rb +201 -0
- data/lib/webunit.rb +27 -0
- data/lib/webunit/assert.rb +152 -0
- data/lib/webunit/converter.rb +154 -0
- data/lib/webunit/cookie.rb +118 -0
- data/lib/webunit/domwalker.rb +185 -0
- data/lib/webunit/exception.rb +14 -0
- data/lib/webunit/form.rb +116 -0
- data/lib/webunit/frame.rb +37 -0
- data/lib/webunit/htmlelem.rb +122 -0
- data/lib/webunit/image.rb +26 -0
- data/lib/webunit/jscript.rb +31 -0
- data/lib/webunit/link.rb +33 -0
- data/lib/webunit/params.rb +321 -0
- data/lib/webunit/parser.rb +229 -0
- data/lib/webunit/response.rb +464 -0
- data/lib/webunit/runtest.rb +41 -0
- data/lib/webunit/table.rb +148 -0
- data/lib/webunit/testcase.rb +45 -0
- data/lib/webunit/ui/cui/testrunner.rb +50 -0
- data/lib/webunit/utils.rb +68 -0
- data/lib/webunit/webunit.rb +28 -0
- data/test/dev/action.rb +83 -0
- data/test/dev/forms.rb +104 -0
- data/test/dev/forms2.rb +104 -0
- data/test/dev/parser.rb +17 -0
- data/test/dev/scripts/dump.rb +24 -0
- data/test/dev/scripts/makedist.rb +62 -0
- data/test/dev/scripts/uri.rb +41 -0
- data/test/dev/scripts/uri/common.rb +432 -0
- data/test/dev/scripts/uri/ftp.rb +149 -0
- data/test/dev/scripts/uri/generic.rb +1106 -0
- data/test/dev/scripts/uri/http.rb +76 -0
- data/test/dev/scripts/uri/https.rb +26 -0
- data/test/dev/scripts/uri/ldap.rb +238 -0
- data/test/dev/scripts/uri/mailto.rb +260 -0
- data/test/dev/scripts/urireg.rb +174 -0
- data/test/dev/simpledispatcher.rb +156 -0
- data/test/dev/test.action.rb +146 -0
- data/test/dev/test.formreader.rb +463 -0
- data/test/dev/test.simpledispatcher.rb +186 -0
- data/test/dev/webunit/conv/digit-0.rb +21 -0
- data/test/dev/webunit/conv/digit-1.rb +17 -0
- data/test/dev/webunit/conv/digit.rb +23 -0
- data/test/dev/webunit/conv/test_digit-0.rb +16 -0
- data/test/dev/webunit/conv/test_digit-1.rb +19 -0
- data/test/dev/webunit/conv/test_digit.rb +26 -0
- data/test/dev/webunit/conv/test_digit_view-0.rb +76 -0
- data/test/dev/webunit/conv/test_digit_view-1.rb +102 -0
- data/test/dev/webunit/conv/test_digit_view.rb +134 -0
- data/test/installation/htdocs/cgi_test.rb +296 -0
- data/test/installation/htdocs/test_install.rb +4 -0
- data/test/installation/runwebtest.rb +5 -0
- data/test/installation/test_cookie.rb +128 -0
- data/test/installation/test_form.rb +47 -0
- data/test/installation/test_multipart.rb +51 -0
- data/test/installation/test_request.rb +24 -0
- data/test/installation/test_response.rb +35 -0
- data/test/unit/htdocs/cookie.rb +32 -0
- data/test/unit/htdocs/multipart.rb +28 -0
- data/test/unit/htdocs/redirect.rb +12 -0
- data/test/unit/htdocs/simple.rb +13 -0
- data/test/unit/htdocs/stock.rb +33 -0
- data/test/unit/test_assert.rb +162 -0
- data/test/unit/test_cookie.rb +114 -0
- data/test/unit/test_domwalker.rb +77 -0
- data/test/unit/test_form.rb +42 -0
- data/test/unit/test_frame.rb +40 -0
- data/test/unit/test_htmlelem.rb +74 -0
- data/test/unit/test_image.rb +45 -0
- data/test/unit/test_jscript.rb +57 -0
- data/test/unit/test_link.rb +85 -0
- data/test/unit/test_multipart.rb +51 -0
- data/test/unit/test_params.rb +210 -0
- data/test/unit/test_parser.rb +53 -0
- data/test/unit/test_response.rb +150 -0
- data/test/unit/test_table.rb +70 -0
- data/test/unit/test_utils.rb +106 -0
- data/test/unit/test_webunit.rb +28 -0
- data/test/web/mod_ruby_stub.rb +39 -0
- data/test/web/test.assertinclude.rb +109 -0
- data/test/web/test.buffer.rb +182 -0
- data/test/web/test.code.loader.rb +78 -0
- data/test/web/test.config.rb +31 -0
- data/test/web/test.error.handling.rb +91 -0
- data/test/web/test.formreader-2.0.rb +352 -0
- data/test/web/test.load.rb +125 -0
- data/test/web/test.mime-type.rb +23 -0
- data/test/web/test.narf.cgi.rb +106 -0
- data/test/web/test.phprb.rb +239 -0
- data/test/web/test.request.rb +368 -0
- data/test/web/test.response.rb +637 -0
- data/test/web/test.ruby-web.rb +10 -0
- data/test/web/test.session.rb +50 -0
- data/test/web/test.shim.cgi.rb +96 -0
- data/test/web/test.tagparser.rb +65 -0
- data/test/web/test.template2.rb +297 -0
- data/test/web/test.testing2.rb +318 -0
- data/test/web/test.upload.rb +45 -0
- data/test/web/test.validate.rb +46 -0
- data/test/web/test.web.test.rb +495 -0
- data/test/wiki/test.history.rb +297 -0
- data/test/wiki/test.illustration_page.rb +287 -0
- data/test/wiki/test.linker.rb +197 -0
- data/test/wiki/test.tarpit.rb +56 -0
- data/test/wiki/test.wiki.rb +300 -0
- data/test/wikitestroot/admin.rb +7 -0
- data/test/wikitestroot/wiki.rb +6 -0
- metadata +234 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
= WebUnit::exception
|
|
3
|
+
Copyright(C) 2001 yuichi TAKAHASHI
|
|
4
|
+
$Id: exception.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
|
|
5
|
+
=end
|
|
6
|
+
|
|
7
|
+
module WebUnit
|
|
8
|
+
|
|
9
|
+
class HttpNotFound < StandardError; end
|
|
10
|
+
class ElemNotFound < StandardError; end
|
|
11
|
+
class BadHtmlTags < StandardError; end
|
|
12
|
+
class BadOperation < StandardError; end
|
|
13
|
+
|
|
14
|
+
end
|
data/lib/webunit/form.rb
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
= WebUnit::Form
|
|
3
|
+
Copyright(C) 2001 yuichi TAKAHASHI, Narushima Hironori.
|
|
4
|
+
$Id: form.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
|
|
5
|
+
=end
|
|
6
|
+
module WebUnit
|
|
7
|
+
|
|
8
|
+
BOUNDARY = '--divider'
|
|
9
|
+
|
|
10
|
+
class Form < HtmlElem
|
|
11
|
+
|
|
12
|
+
attr_accessor :name, :action, :method, :encoding
|
|
13
|
+
attr_reader :parameters, :params
|
|
14
|
+
|
|
15
|
+
def initialize( ah )
|
|
16
|
+
super( 'form', ah )
|
|
17
|
+
@parameters = [] # index by int
|
|
18
|
+
@params = {} # index by name
|
|
19
|
+
@action = ah["name"]
|
|
20
|
+
@action = ah["action"]
|
|
21
|
+
@method = ah["method"] == nil ? "GET" : ah["method"]
|
|
22
|
+
#print @action,":",method,"\n"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def add_param( param )
|
|
26
|
+
@parameters.push param
|
|
27
|
+
if @params.key?param.name then
|
|
28
|
+
@params[param.name].update( param )
|
|
29
|
+
param.update( @params[param.name] )
|
|
30
|
+
else
|
|
31
|
+
@params[param.name] = param
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def freeze
|
|
36
|
+
@parameters.freeze
|
|
37
|
+
@params.freeze
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
=begin
|
|
41
|
+
--- Form#set_params( hash )
|
|
42
|
+
fill up each fields, by name.
|
|
43
|
+
=end
|
|
44
|
+
|
|
45
|
+
def set_params( hash )
|
|
46
|
+
hash.each do |k,v|
|
|
47
|
+
raise ArgumentError.new("wrong key: " + k) unless self.params[k]
|
|
48
|
+
self.params[k].value = v
|
|
49
|
+
end
|
|
50
|
+
self
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
=begin
|
|
54
|
+
--- Form#set_parameters( array )
|
|
55
|
+
fill up each fields, by index.
|
|
56
|
+
=end
|
|
57
|
+
|
|
58
|
+
def set_parameters( array )
|
|
59
|
+
array.each_index do |i|
|
|
60
|
+
self.parameters[i].value = array[i]
|
|
61
|
+
end
|
|
62
|
+
self
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
=begin
|
|
66
|
+
--- Form#store_test_data(fields,data,s=',',button=nil)
|
|
67
|
+
store data to backend ( Database, File, ... ).
|
|
68
|
+
input csv data to each fields, and submit.
|
|
69
|
+
=end
|
|
70
|
+
|
|
71
|
+
def store_test_data( fields, data, s=',', button=nil )
|
|
72
|
+
data.split( "\n" ).collect{ |r| r.strip.split( s ) }.each do |r|
|
|
73
|
+
fields.each_index{ |i| @params[fields[i]].value = r[i] }
|
|
74
|
+
self.submit( button )
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
=begin
|
|
79
|
+
--- Form#submit(button=nil,x=nil,y=nil)
|
|
80
|
+
submit form, and return a Response.
|
|
81
|
+
=end
|
|
82
|
+
def submit( button=nil, x=nil, y=nil )
|
|
83
|
+
data = []
|
|
84
|
+
matched = nil
|
|
85
|
+
multipart = (attrs['enctype'] == 'multipart/form-data')
|
|
86
|
+
# make data from params
|
|
87
|
+
|
|
88
|
+
@parameters.each do |p|
|
|
89
|
+
puts "#{p.class}/#{p.name}/#{p.value}" if $DEBUG
|
|
90
|
+
if p.class == InputSubmit || p.class == InputImage
|
|
91
|
+
next unless p.name == button || p.value == button
|
|
92
|
+
matched = p
|
|
93
|
+
if p.class == InputImage
|
|
94
|
+
p.x = x
|
|
95
|
+
p.y = y
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
if multipart
|
|
100
|
+
data << p.multipart_query_data(BOUNDARY)
|
|
101
|
+
else
|
|
102
|
+
data << p.query_data
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
if multipart
|
|
107
|
+
data = data.join('') + "--#{BOUNDARY}--\n"
|
|
108
|
+
else
|
|
109
|
+
data = data.compact.join('&')
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
Response::new.init_http( @action, @method, data, false, multipart)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
= WebUnit::Frame
|
|
3
|
+
Copyright(C) 2001 yuichi TAKAHASHI
|
|
4
|
+
$Id: frame.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
|
|
5
|
+
=end
|
|
6
|
+
|
|
7
|
+
module WebUnit
|
|
8
|
+
|
|
9
|
+
class Frame < HtmlElem
|
|
10
|
+
|
|
11
|
+
def initialize( ah )
|
|
12
|
+
super( 'frame', ah )
|
|
13
|
+
@src = ah["src"]
|
|
14
|
+
@name = ah["name"]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
=begin
|
|
18
|
+
--- Frame#src
|
|
19
|
+
reader of 'src' attribute.
|
|
20
|
+
--- Frame#name
|
|
21
|
+
reader of 'name' attribute.
|
|
22
|
+
=end
|
|
23
|
+
|
|
24
|
+
attr_reader :src, :name
|
|
25
|
+
|
|
26
|
+
=begin
|
|
27
|
+
--- Frame#read
|
|
28
|
+
return a Response of getting of 'src' attribute.
|
|
29
|
+
=end
|
|
30
|
+
|
|
31
|
+
def read
|
|
32
|
+
Response::new.init_http( @src, "GET" ) if @src != nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
= WebUnit::HtmlElem
|
|
3
|
+
Copyright(C) 2001 yuichi TAKAHASHI
|
|
4
|
+
$Id: htmlelem.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
|
|
5
|
+
=end
|
|
6
|
+
|
|
7
|
+
module WebUnit
|
|
8
|
+
|
|
9
|
+
class HtmlElem
|
|
10
|
+
|
|
11
|
+
attr_reader :tag, :data, :attrs, :children, :array, :name
|
|
12
|
+
|
|
13
|
+
def initialize( tag, ah={} )
|
|
14
|
+
@children = []
|
|
15
|
+
@tag = tag
|
|
16
|
+
@attrs = ah
|
|
17
|
+
@data = ''
|
|
18
|
+
@array = []
|
|
19
|
+
@name = ah['name'] if ah
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def append( data )
|
|
23
|
+
if data.is_a?( HtmlElem )
|
|
24
|
+
@children << data
|
|
25
|
+
else
|
|
26
|
+
@data << data
|
|
27
|
+
end
|
|
28
|
+
@array << data
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def extract
|
|
32
|
+
data = ''
|
|
33
|
+
@array.each do |e|
|
|
34
|
+
if e.is_a?( String )
|
|
35
|
+
data << " #{e} "
|
|
36
|
+
elsif e.is_a?( HtmlElem )
|
|
37
|
+
data << e.extract
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
data.squeeze( ' ' ).strip
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def inspect
|
|
44
|
+
return "<#toplevel>" if @tag == nil
|
|
45
|
+
as = ''
|
|
46
|
+
attrs.each{ |k,v| as << " #{k}=#{v}" }
|
|
47
|
+
"<#{@tag+as}>:#{data}:"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
=begin
|
|
51
|
+
--- HtmlElem#find(tag)
|
|
52
|
+
return an Array of HtmlElems, which have ((|tag|)).
|
|
53
|
+
=end
|
|
54
|
+
|
|
55
|
+
def find( tag )
|
|
56
|
+
a = []
|
|
57
|
+
a.push self if @tag == tag
|
|
58
|
+
@children.each do |c|
|
|
59
|
+
a = a + c.find( tag )
|
|
60
|
+
end
|
|
61
|
+
a
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
=begin
|
|
65
|
+
--- HtmlElem#search(data)
|
|
66
|
+
return an Array of HtmlElems, which have ((|data|)).
|
|
67
|
+
=end
|
|
68
|
+
|
|
69
|
+
def search( data )
|
|
70
|
+
a = []
|
|
71
|
+
a.push self if @data == data
|
|
72
|
+
@children.each do |c|
|
|
73
|
+
a = a + c.search( data )
|
|
74
|
+
end
|
|
75
|
+
a
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
=begin
|
|
79
|
+
--- HtmlElem#readlink(str)
|
|
80
|
+
return a Response, gotten with reading a Link have ((|str|)).
|
|
81
|
+
raise ElemNotFound exception, when no Links found.
|
|
82
|
+
=end
|
|
83
|
+
|
|
84
|
+
def readlink( str )
|
|
85
|
+
self.find( 'a' ).each do |link|
|
|
86
|
+
return link.read if link.data == str
|
|
87
|
+
end
|
|
88
|
+
raise ElemNotFound, "no Links have '#{str}' as data."
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
=begin
|
|
92
|
+
--- HtmlElem#has?(elem)
|
|
93
|
+
return true, when self have ((|elem|)) as child.
|
|
94
|
+
otherwise, return false.
|
|
95
|
+
((|elem|)) should be a HtmlElem or a String.
|
|
96
|
+
=end
|
|
97
|
+
|
|
98
|
+
def has?( elem )
|
|
99
|
+
if elem.kind_of?( HtmlElem )
|
|
100
|
+
@children.include?( elem )
|
|
101
|
+
elsif elem.instance_of?( String )
|
|
102
|
+
@array.include?( elem )
|
|
103
|
+
else
|
|
104
|
+
false
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
=begin
|
|
109
|
+
--- HtmlElem#print(indent='') -- FOR TEST USE ONLY
|
|
110
|
+
print tree structure, from self to lower.
|
|
111
|
+
=end
|
|
112
|
+
|
|
113
|
+
def print( indent='' ) # not tested :-(
|
|
114
|
+
puts indent + inspect
|
|
115
|
+
@children.each do |c|
|
|
116
|
+
c.print( indent + ' ' )
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end # class HtmlElem
|
|
121
|
+
|
|
122
|
+
end # module WebUnit
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
= WebUnit::Image
|
|
3
|
+
Copyright(C) 2001 yuichi TAKAHASHI
|
|
4
|
+
$Id: image.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
|
|
5
|
+
=end
|
|
6
|
+
|
|
7
|
+
require 'net/http'
|
|
8
|
+
|
|
9
|
+
module WebUnit
|
|
10
|
+
|
|
11
|
+
class Image < HtmlElem
|
|
12
|
+
|
|
13
|
+
attr_reader :src, :alt, :width, :height, :border
|
|
14
|
+
|
|
15
|
+
def initialize( ah )
|
|
16
|
+
super( 'img', ah )
|
|
17
|
+
@src = ah["src"]
|
|
18
|
+
@alt = ah["alt"]
|
|
19
|
+
@width = ah["width"]
|
|
20
|
+
@height = ah["height"]
|
|
21
|
+
@border = ah["border"]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
= WebUnit::JSciriptOpenObject
|
|
3
|
+
Copyright(C) 2001 yuichi TAKAHASHI
|
|
4
|
+
$Id: jscript.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
|
|
5
|
+
=end
|
|
6
|
+
|
|
7
|
+
module WebUnit
|
|
8
|
+
|
|
9
|
+
class JSciriptOpenObject < HtmlElem
|
|
10
|
+
|
|
11
|
+
attr_reader :url, :file, :target
|
|
12
|
+
|
|
13
|
+
def initialize( ah )
|
|
14
|
+
super( 'open', ah )
|
|
15
|
+
@url = ah['url']
|
|
16
|
+
@file = ah['file']
|
|
17
|
+
@target = ah['target']
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
=begin
|
|
21
|
+
--- JSciriptOpenObject#read
|
|
22
|
+
return a Response of getting of '@url'
|
|
23
|
+
=end
|
|
24
|
+
|
|
25
|
+
def read
|
|
26
|
+
Response::new.init_http( @url, "GET" ) if @url != nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
data/lib/webunit/link.rb
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
= WebUnit::Link
|
|
3
|
+
Copyright(C) 2001 yuichi TAKAHASHI
|
|
4
|
+
$Id: link.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
|
|
5
|
+
=end
|
|
6
|
+
|
|
7
|
+
require 'net/http'
|
|
8
|
+
|
|
9
|
+
module WebUnit
|
|
10
|
+
|
|
11
|
+
class Link < HtmlElem
|
|
12
|
+
|
|
13
|
+
attr_reader :href, :target, :onClick
|
|
14
|
+
|
|
15
|
+
def initialize( ah )
|
|
16
|
+
super( 'a', ah )
|
|
17
|
+
@href = ah["href"]
|
|
18
|
+
@target = ah["target"]
|
|
19
|
+
@onClick = ah["onclick"]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
=begin
|
|
23
|
+
--- Link#read
|
|
24
|
+
return a Response of getting of '@href'
|
|
25
|
+
=end
|
|
26
|
+
|
|
27
|
+
def read
|
|
28
|
+
Response::new.init_http( @href, "GET" ) if @href != nil
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
= WebUnit::Param/...
|
|
3
|
+
Copyright(C) 2001 yuichi TAKAHASHI, Narushima Hironori.
|
|
4
|
+
$Id: params.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
|
|
5
|
+
=end
|
|
6
|
+
|
|
7
|
+
module WebUnit
|
|
8
|
+
|
|
9
|
+
class Param < HtmlElem
|
|
10
|
+
|
|
11
|
+
attr_reader :name, :type, :relations
|
|
12
|
+
attr_accessor :stat, :value
|
|
13
|
+
|
|
14
|
+
def initialize( tag, ah )
|
|
15
|
+
super
|
|
16
|
+
@type = ah["type"] ? ah["type"] : 'text'
|
|
17
|
+
@value = ah["value"]
|
|
18
|
+
@relations = []
|
|
19
|
+
@stat = ah.key?( 'checked' ) ? 'on' : 'off'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def update( p )
|
|
23
|
+
@relations << p
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def query_data
|
|
27
|
+
value = @value ? CGI::escape( @value ) : ''
|
|
28
|
+
@name ? ( CGI::escape( @name ) + '=' + value ) : nil
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def multipart_query_data( boundary)
|
|
32
|
+
value = @value ? @value : ''
|
|
33
|
+
|
|
34
|
+
if (@name)
|
|
35
|
+
name = CGI::escape(@name)
|
|
36
|
+
"--#{boundary}\n" +
|
|
37
|
+
%!Content-Disposition: form-data; name="#{name}"\n! +
|
|
38
|
+
"\n" +
|
|
39
|
+
value + "\n"
|
|
40
|
+
else
|
|
41
|
+
nil
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class Input < Param
|
|
47
|
+
|
|
48
|
+
def initialize( ah )
|
|
49
|
+
super( 'input', ah )
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def on
|
|
53
|
+
@stat = 'on'
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def off
|
|
57
|
+
@stat = 'off'
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def inspect
|
|
61
|
+
a = super + "[stat:#{@stat}]"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
class InputRadio < Input
|
|
67
|
+
|
|
68
|
+
def on
|
|
69
|
+
@stat = 'on'
|
|
70
|
+
@relations.each do |r|
|
|
71
|
+
r.off
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def query_data
|
|
76
|
+
value = @value ? CGI::escape( @value ) : ''
|
|
77
|
+
(@stat == 'on' and @name) ? CGI::escape(@name) + '=' + value : nil
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def multipart_query_data( boundary)
|
|
81
|
+
if @stat == 'on'
|
|
82
|
+
super(boundary)
|
|
83
|
+
else
|
|
84
|
+
nil
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def value=( v )
|
|
89
|
+
self.stat = self.value == v ? 'on' : 'off'
|
|
90
|
+
@relations.each do |e|
|
|
91
|
+
e.stat = e.value == v ? 'on' : 'off'
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
class InputCheckbox < Input
|
|
97
|
+
def query_data
|
|
98
|
+
value = @value ? CGI::escape( @value ) : 'on'
|
|
99
|
+
(@stat == 'on' and @name) ? @name + '=' + value : nil
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def multipart_query_data( boundary)
|
|
103
|
+
if @stat == 'on'
|
|
104
|
+
super( boundary)
|
|
105
|
+
else
|
|
106
|
+
nil
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
class InputSubmit < Input
|
|
112
|
+
def query_data
|
|
113
|
+
value = CGI::escape( @value ? @value : 'Submit Query' )
|
|
114
|
+
@name ? CGI::escape(@name) + '=' + value : nil
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
class InputImage < Input
|
|
119
|
+
attr_writer :x, :y
|
|
120
|
+
|
|
121
|
+
def query_data
|
|
122
|
+
@name + '.x=' + @x.to_s + '&' + @name + '.y=' + @y.to_s
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def multipart_query_data( boundary)
|
|
126
|
+
"--#{boundary}\n" +
|
|
127
|
+
%!Content-Disposition: form-data; name="#{@name}.x"\n! +
|
|
128
|
+
"\n" +
|
|
129
|
+
@x.to_s + "\n" +
|
|
130
|
+
"--#{boundary}\n" +
|
|
131
|
+
%!Content-Disposition: form-data; name="#{@name}.y"\n! +
|
|
132
|
+
"\n" +
|
|
133
|
+
@y.to_s + "\n"
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
class InputReset < Input
|
|
138
|
+
|
|
139
|
+
def query_data
|
|
140
|
+
nil
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def multipart_query_data( boundary)
|
|
144
|
+
nil
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
class Select < Param
|
|
150
|
+
|
|
151
|
+
attr_reader :options
|
|
152
|
+
|
|
153
|
+
def initialize( ah )
|
|
154
|
+
super( 'select', ah )
|
|
155
|
+
@options = []
|
|
156
|
+
@size = ah["size"]
|
|
157
|
+
@type = 'select'
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def add_option( option )
|
|
161
|
+
@options.push( option )
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def end_option
|
|
165
|
+
if @size == nil && @options.reject { |o| o.stat == 'off' } == []
|
|
166
|
+
@options[0].select
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def select( arr )
|
|
171
|
+
@options.each do |o|
|
|
172
|
+
o.deselect
|
|
173
|
+
end
|
|
174
|
+
arr.each do |e|
|
|
175
|
+
@options[e].select if e.kind_of?( Integer )
|
|
176
|
+
if e.kind_of?( String )
|
|
177
|
+
@options.each do |o|
|
|
178
|
+
o.select if o.value == e || o.data == e
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def query_data
|
|
185
|
+
a = []
|
|
186
|
+
@options.each do |o|
|
|
187
|
+
a << o.query_data( @name )
|
|
188
|
+
end
|
|
189
|
+
s = a.compact.join('&')
|
|
190
|
+
s == '' ? nil : s
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def multipart_query_data( boundary)
|
|
194
|
+
lines = ''
|
|
195
|
+
@options.each do |o|
|
|
196
|
+
data = o.multipart_query_data(boundary, @name)
|
|
197
|
+
lines << data if data
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
lines
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def value
|
|
204
|
+
arr = []
|
|
205
|
+
@options.each do |o|
|
|
206
|
+
arr << o.value if o.stat == 'on'
|
|
207
|
+
end
|
|
208
|
+
case arr.size
|
|
209
|
+
when 0 then nil
|
|
210
|
+
when 1 then arr[0]
|
|
211
|
+
else arr
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def value= ( v )
|
|
216
|
+
@options.each do |o|
|
|
217
|
+
if o.value == v
|
|
218
|
+
o.select
|
|
219
|
+
else
|
|
220
|
+
o.deselect
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
class SelectOption < HtmlElem
|
|
227
|
+
attr_reader :stat
|
|
228
|
+
|
|
229
|
+
def initialize( ah )
|
|
230
|
+
super( 'option', ah )
|
|
231
|
+
@value = ah["value"]
|
|
232
|
+
@stat = ah.key?( 'selected' ) ? 'on' : 'off'
|
|
233
|
+
@type = 'option'
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def value
|
|
237
|
+
@value ? @value : @data
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def select
|
|
241
|
+
@stat = 'on'
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def deselect
|
|
245
|
+
@stat = 'off'
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
def query_data( name )
|
|
249
|
+
@value = @data unless @value
|
|
250
|
+
value = @value ? CGI::escape( @value ) : ''
|
|
251
|
+
(@stat == 'on' and name) ? name + '=' + value : nil
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def multipart_query_data( boundary, name)
|
|
255
|
+
@value = @data unless @value
|
|
256
|
+
value = @value ? @value : ''
|
|
257
|
+
|
|
258
|
+
if @stat == 'on' and name
|
|
259
|
+
"--#{boundary}\n" +
|
|
260
|
+
%!Content-Disposition: form-data; name="#{CGI::escape(name)}"\n! +
|
|
261
|
+
"\n" +
|
|
262
|
+
value + "\n"
|
|
263
|
+
else
|
|
264
|
+
nil
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
class Textarea < Param
|
|
271
|
+
def initialize( ah )
|
|
272
|
+
super( 'textarea', ah )
|
|
273
|
+
@type = 'textarea'
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def value
|
|
277
|
+
@value ? @value : @data
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
def query_data
|
|
281
|
+
val = @value ? @value : @data
|
|
282
|
+
value = val ? CGI::escape( val ) : ''
|
|
283
|
+
@name ? ( CGI::escape( @name ) + '=' + value ) : nil
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
def multipart_query_data( boundary)
|
|
287
|
+
@value = @data unless @value
|
|
288
|
+
value = @value ? @value : ''
|
|
289
|
+
|
|
290
|
+
if @name
|
|
291
|
+
"--#{boundary}\n" +
|
|
292
|
+
%!Content-Disposition: form-data; name="#{CGI::escape(@name)}"\n! +
|
|
293
|
+
"\n" +
|
|
294
|
+
value + "\n"
|
|
295
|
+
else
|
|
296
|
+
nil
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
class InputFile < Input
|
|
303
|
+
def query_data
|
|
304
|
+
nil
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
def multipart_query_data( boundary)
|
|
308
|
+
if @name and @value
|
|
309
|
+
"--#{boundary}\n" +
|
|
310
|
+
%!Content-Disposition: form-data; name="#{File.basename(@name)}"; filename="#{File.basename(@value)}"\n! +
|
|
311
|
+
"Content-Type: text/plain\n" +
|
|
312
|
+
"\n" +
|
|
313
|
+
IO.readlines(@value).join('') + "\n"
|
|
314
|
+
else
|
|
315
|
+
nil
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
end
|