ruby-web 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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,41 @@
|
|
1
|
+
module WebUnit ; end
|
2
|
+
|
3
|
+
def WebUnit.dispatch(args)
|
4
|
+
f_type = args.shift
|
5
|
+
case f_type
|
6
|
+
when '-fr'
|
7
|
+
['AVAILABLE_FRAMEWORKS', %w(RubyUnit runit/testcase)]
|
8
|
+
when '-ft'
|
9
|
+
['AVAILABLE_FRAMEWORKS', %w(Test::Unit test/unit/testcase)]
|
10
|
+
when '-xr'
|
11
|
+
['AVAILABLE_XMLPARSERS', %w(REXML rexml/document)]
|
12
|
+
when '-xn'
|
13
|
+
['AVAILABLE_XMLPARSERS', %w(NQXML nqxml/treeparser)]
|
14
|
+
else
|
15
|
+
args.unshift(f_type)
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def WebUnit.runtest(args)
|
21
|
+
if args.size > 0
|
22
|
+
while res = dispatch(args)
|
23
|
+
next if WebUnit.const_defined?(res[0])
|
24
|
+
WebUnit.const_set(res[0], [res[1]])
|
25
|
+
end
|
26
|
+
require 'webunit/ui/cui/testrunner'
|
27
|
+
test_runner = WebUnit::UI::CUI::TestRunner.new
|
28
|
+
args.each {|f| require f}
|
29
|
+
test_runner.run
|
30
|
+
else
|
31
|
+
puts "#{File.basename($0)} [-fr|-ft|-xr|-xn] testfile1 [, testfile2, ...]"
|
32
|
+
puts "\t-fr : use RubyUnit as Testing Framework"
|
33
|
+
puts "\t-ft : use Test::Unit as Testing Framework(default)"
|
34
|
+
puts "\t-xr : use REXML as XML parser(default)"
|
35
|
+
puts "\t-xn : use NQXML as XML parser"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
if $0 == __FILE__
|
40
|
+
WebUnit.runtest(ARGV)
|
41
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
=begin
|
2
|
+
= WebUnit::Table/TableRow/TableCell/NilTableCell
|
3
|
+
Copyright(C) 2001 yuichi TAKAHASHI
|
4
|
+
$Id: table.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
|
5
|
+
=end
|
6
|
+
|
7
|
+
module WebUnit
|
8
|
+
|
9
|
+
class Table < HtmlElem
|
10
|
+
|
11
|
+
attr_reader :rows
|
12
|
+
|
13
|
+
def initialize( ah )
|
14
|
+
super( 'table', ah )
|
15
|
+
@rows = []
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_row( ah )
|
19
|
+
@rows.push( TableRow::new( ah ) )
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_cell( cell )
|
23
|
+
p = @rows.last.size + 1
|
24
|
+
if @rows.size > 1 && @rows[-2].at(p) && @rows[-2].at(p).rs > 1 then
|
25
|
+
@rows.last.add( @rows[-2].at(p) )
|
26
|
+
@rows[-2].at(p).rs -= 1
|
27
|
+
end
|
28
|
+
@rows.last.add( cell )
|
29
|
+
while cell.cs > 1 do
|
30
|
+
@rows.last.add( cell )
|
31
|
+
cell.cs -= 1
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
=begin
|
36
|
+
--- Table#at(r,c=nil)
|
37
|
+
return a TableCell, when two arguments(row,col) specified.
|
38
|
+
return a TableRow, when a argument(row) specified.
|
39
|
+
r and c is both beginning from 1.
|
40
|
+
=end
|
41
|
+
|
42
|
+
def at( r, c=nil )
|
43
|
+
if r < 1
|
44
|
+
raise ArgumentError
|
45
|
+
end
|
46
|
+
if c == nil
|
47
|
+
if @rows == [] || @rows.size < r
|
48
|
+
raise
|
49
|
+
end
|
50
|
+
@rows[r-1]
|
51
|
+
else
|
52
|
+
if c < 1
|
53
|
+
raise ArgumentError
|
54
|
+
end
|
55
|
+
if @rows == [] || @rows.size < r || @rows[r-1].size < c
|
56
|
+
NilTableCell::new
|
57
|
+
else
|
58
|
+
@rows[r-1].at(c)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
=begin
|
64
|
+
--- Table#row_index( data, col=1 )
|
65
|
+
=end
|
66
|
+
|
67
|
+
def row_index( data, col=1 )
|
68
|
+
row = nil
|
69
|
+
(1..@rows.size).each do |row|
|
70
|
+
break unless self.at(row,col).search( data ) == []
|
71
|
+
end
|
72
|
+
row
|
73
|
+
end
|
74
|
+
|
75
|
+
=begin
|
76
|
+
--- Table#col_index( data, row=1 )
|
77
|
+
=end
|
78
|
+
def col_index( data, row=1 )
|
79
|
+
col = nil
|
80
|
+
(1..(self.at(row).size)).each do |col|
|
81
|
+
break unless self.at(row,col).search( data ) == []
|
82
|
+
end
|
83
|
+
col
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
class TableRow < HtmlElem
|
89
|
+
|
90
|
+
def initialize( ah )
|
91
|
+
super( 'tr', ah )
|
92
|
+
@cols = []
|
93
|
+
end
|
94
|
+
|
95
|
+
=begin
|
96
|
+
--- TableRow#size
|
97
|
+
return column number.
|
98
|
+
=end
|
99
|
+
|
100
|
+
def size
|
101
|
+
@cols.size
|
102
|
+
end
|
103
|
+
|
104
|
+
def add( col )
|
105
|
+
@cols << col
|
106
|
+
end
|
107
|
+
|
108
|
+
=begin
|
109
|
+
--- TableRow#at( c )
|
110
|
+
return TableCell, pointed by ((|c|)).
|
111
|
+
c is beginning from 1.
|
112
|
+
=end
|
113
|
+
|
114
|
+
def at( c )
|
115
|
+
@cols[c-1]
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
class TableCell < HtmlElem
|
121
|
+
|
122
|
+
attr_reader :data, :colspan, :rowspan
|
123
|
+
|
124
|
+
attr_accessor :cs, :rs
|
125
|
+
|
126
|
+
def initialize( tag, ah )
|
127
|
+
super
|
128
|
+
@colspan = ah['colspan']
|
129
|
+
@rowspan = ah['rowspan']
|
130
|
+
@cs = @colspan.to_i || 1
|
131
|
+
@rs = @rowspan.to_i || 1
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
class NilTableCell < TableCell
|
137
|
+
|
138
|
+
def initialize
|
139
|
+
super( 'dummy', {} )
|
140
|
+
end
|
141
|
+
|
142
|
+
def data
|
143
|
+
nil
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
=begin
|
2
|
+
= WebUnit::TestCase
|
3
|
+
Copyright(C) 2001 yuichi TAKAHASHI
|
4
|
+
$Id: testcase.rb,v 1.2 2004/02/11 04:26:38 yuichi Exp $
|
5
|
+
=end
|
6
|
+
|
7
|
+
require 'webunit/converter'
|
8
|
+
|
9
|
+
module WebUnit
|
10
|
+
|
11
|
+
class TestCase
|
12
|
+
|
13
|
+
include WebUnit
|
14
|
+
include Utils
|
15
|
+
|
16
|
+
def initialize( method, name=self.class.name )
|
17
|
+
case USING_FRAMEWORK
|
18
|
+
when 'Test::Unit'
|
19
|
+
super(method)
|
20
|
+
when 'RubyUnit'
|
21
|
+
super
|
22
|
+
else
|
23
|
+
super
|
24
|
+
# raise??
|
25
|
+
end
|
26
|
+
@urlbase = ENV['URLBASE'] ? ENV['URLBASE'] : 'http://localhost/'
|
27
|
+
@urlbase = orthop_url( @urlbase )
|
28
|
+
@urlbase << '/' unless @urlbase =~ %r!/$!
|
29
|
+
$stderr.puts "URLBASE is #{@urlbase}" if $DEBUG
|
30
|
+
end
|
31
|
+
|
32
|
+
def setup
|
33
|
+
$URLBASE = @urlbase
|
34
|
+
Response::reset
|
35
|
+
@cookies_kept = Cookies::instance.cookies
|
36
|
+
end
|
37
|
+
|
38
|
+
def teardown
|
39
|
+
Response::reset
|
40
|
+
Cookies::instance.cookies = @cookies_kept
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'webunit/converter'
|
2
|
+
|
3
|
+
module WebUnit
|
4
|
+
module UI
|
5
|
+
module CUI
|
6
|
+
class TestRunner
|
7
|
+
|
8
|
+
def initialize(quiet_mode=true)
|
9
|
+
case USING_FRAMEWORK
|
10
|
+
when 'Test::Unit'
|
11
|
+
require 'test/unit/ui/console/testrunner'
|
12
|
+
@runner = Test::Unit::UI::Console::TestRunner
|
13
|
+
when 'RubyUnit'
|
14
|
+
require 'runit/cui/testrunner'
|
15
|
+
@runner = RUNIT::CUI::TestRunner.new
|
16
|
+
end
|
17
|
+
quiet_mode(quiet_mode)
|
18
|
+
end
|
19
|
+
|
20
|
+
def quiet_mode(boolean)
|
21
|
+
case USING_FRAMEWORK
|
22
|
+
when 'RubyUnit'
|
23
|
+
@runner.class.quiet_mode = boolean
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def all_suite
|
28
|
+
case USING_FRAMEWORK
|
29
|
+
when 'Test::Unit'
|
30
|
+
suite_name = $0.sub(/\.rb$/, '')
|
31
|
+
suite = TestSuite.new(suite_name)
|
32
|
+
test_classes = []
|
33
|
+
ObjectSpace.each_object(Class) do |klass|
|
34
|
+
test_classes << klass if TestCase > klass
|
35
|
+
end
|
36
|
+
test_classes.each {|klass| suite << klass.suite}
|
37
|
+
suite
|
38
|
+
when 'RubyUnit'
|
39
|
+
TestCase.all_suite
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def run(suite=all_suite)
|
44
|
+
@runner.run(suite)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
=begin
|
2
|
+
= WebUnit::Utils
|
3
|
+
Copyright(C) 2001 yuichi TAKAHASHI
|
4
|
+
$Id: utils.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
|
5
|
+
|
6
|
+
=end
|
7
|
+
|
8
|
+
module WebUnit
|
9
|
+
|
10
|
+
module Utils
|
11
|
+
|
12
|
+
=begin
|
13
|
+
--- Utils#parse_url(url)
|
14
|
+
return an Array of protocol, hostname, port, and path.
|
15
|
+
|
16
|
+
=end
|
17
|
+
|
18
|
+
def parse_url( url )
|
19
|
+
if url =~ %r!^([a-z]+)://([-0-9A-Aa-z_.]+):?([0-9]*)(/.*)?$!
|
20
|
+
[ $1, $2, $3 == "" ? 80 : $3.to_i, $4 ? $4 : '' ]
|
21
|
+
elsif url =~ %r!^file:(/.*)$!
|
22
|
+
[ 'file', nil, nil, $1 ]
|
23
|
+
else
|
24
|
+
[ nil, nil, nil, url ]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
=begin
|
29
|
+
--- Utils#orthop_url(url)
|
30
|
+
return url, is orthopped by Utils#parse_url.
|
31
|
+
|
32
|
+
=end
|
33
|
+
|
34
|
+
def orthop_url( url )
|
35
|
+
prot, host, port, path = parse_url url
|
36
|
+
path.gsub!( %r![^/]*/\.\./!, '/' )
|
37
|
+
path.gsub!( %r!/\.*/!, '/' )
|
38
|
+
"#{prot}://#{host}:#{port}#{path}"
|
39
|
+
end
|
40
|
+
|
41
|
+
=begin
|
42
|
+
--- Utils#complete_url(url,base)
|
43
|
+
return url, is completed with ((|base||).
|
44
|
+
=end
|
45
|
+
|
46
|
+
def complete_url( url, base )
|
47
|
+
if base
|
48
|
+
prot,host,port,path = parse_url( base )
|
49
|
+
prefix = prot + "://" + host + ":" + port.to_s
|
50
|
+
case url
|
51
|
+
when nil then
|
52
|
+
url = base.sub( /\?.*/, '' )
|
53
|
+
when %r!^http://! then
|
54
|
+
url
|
55
|
+
when %r!^/! then
|
56
|
+
url = prefix + url
|
57
|
+
else
|
58
|
+
url = prefix + File::dirname( path ) + "/" + url
|
59
|
+
end
|
60
|
+
orthop_url( url )
|
61
|
+
else
|
62
|
+
url
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
=begin
|
2
|
+
= WebUnit
|
3
|
+
Copyright(C) 2001 yuichi TAKAHASHI
|
4
|
+
$Id: webunit.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
|
5
|
+
=end
|
6
|
+
|
7
|
+
require 'webunit/converter'
|
8
|
+
require 'webunit/utils'
|
9
|
+
require 'webunit/exception'
|
10
|
+
require 'webunit/assert'
|
11
|
+
require 'webunit/htmlelem'
|
12
|
+
require 'webunit/link'
|
13
|
+
require 'webunit/frame'
|
14
|
+
require 'webunit/image'
|
15
|
+
require 'webunit/jscript'
|
16
|
+
require 'webunit/testcase'
|
17
|
+
require 'webunit/cookie'
|
18
|
+
require 'webunit/params'
|
19
|
+
require 'webunit/form'
|
20
|
+
require 'webunit/parser'
|
21
|
+
require 'webunit/response'
|
22
|
+
require 'webunit/table'
|
23
|
+
begin
|
24
|
+
require 'webunit/domwalker'
|
25
|
+
rescue LoadError
|
26
|
+
end
|
27
|
+
|
28
|
+
WebUnit::TestCase::new( 'nil?' ).setup
|
data/test/dev/action.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
module Web
|
2
|
+
class Action #:nodoc:
|
3
|
+
attr_reader :patterns
|
4
|
+
def initialize patterns={}, &function
|
5
|
+
@patterns = patterns
|
6
|
+
@function = function || lambda{}
|
7
|
+
Thread.current[:actions] ||= [ ]
|
8
|
+
Thread.current[:actions].push self
|
9
|
+
end
|
10
|
+
|
11
|
+
def run cgi=Web::CGI.create
|
12
|
+
@function.call( cgi )
|
13
|
+
end
|
14
|
+
|
15
|
+
def old_applies? cgi
|
16
|
+
matches = false
|
17
|
+
patterns.each{ |key, pattern|
|
18
|
+
cgi.multiple_params[key].each{ |value|
|
19
|
+
if pattern.kind_of? Regexp
|
20
|
+
matches = true if value =~ pattern
|
21
|
+
else
|
22
|
+
matches = true if value == pattern
|
23
|
+
end
|
24
|
+
}
|
25
|
+
}
|
26
|
+
matches
|
27
|
+
end
|
28
|
+
|
29
|
+
def applies? cgi
|
30
|
+
relevance = 0;
|
31
|
+
unmatched_terms = patterns.size;
|
32
|
+
patterns.each{ |key, pattern|
|
33
|
+
if pattern.kind_of? Regexp
|
34
|
+
if cgi.multiple_params[key].find{ |value| value =~ pattern }
|
35
|
+
unmatched_terms = unmatched_terms - 1
|
36
|
+
relevance += 1
|
37
|
+
end
|
38
|
+
else
|
39
|
+
if cgi.multiple_params[key].find{ |value| value == pattern }
|
40
|
+
unmatched_terms = unmatched_terms - 1
|
41
|
+
relevance += 10
|
42
|
+
end
|
43
|
+
end
|
44
|
+
}
|
45
|
+
if unmatched_terms == 0
|
46
|
+
relevance
|
47
|
+
else
|
48
|
+
false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def Action.pick( cgi )
|
53
|
+
Thread.current[:actions] ||= [ ]
|
54
|
+
Thread.current[:actions].find_all do |action|
|
55
|
+
action.applies? cgi
|
56
|
+
end.sort do |a, b|
|
57
|
+
a.applies?(cgi) <=> b.applies?(cgi)
|
58
|
+
end.last || Thread.current[:actions].find do |action|
|
59
|
+
action.patterns == {}
|
60
|
+
end || blank_action
|
61
|
+
|
62
|
+
# (raise Web::Exception.new( "Could not locate action for #{ cgi.multiple_params.inspect }" ))
|
63
|
+
end
|
64
|
+
|
65
|
+
def Action.blank_action
|
66
|
+
blank = Action.new
|
67
|
+
Thread::current[:actions].delete blank
|
68
|
+
blank
|
69
|
+
end
|
70
|
+
|
71
|
+
def Action.run options={}
|
72
|
+
if options.kind_of? Hash
|
73
|
+
Web.process(options) do |cgi|
|
74
|
+
pick(cgi).run(cgi)
|
75
|
+
end
|
76
|
+
elsif options.kind_of? Web::CGI
|
77
|
+
pick(options).run(options)
|
78
|
+
options.close
|
79
|
+
options
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|