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.
Files changed (190) hide show
  1. data/ChangeLog +474 -0
  2. data/INSTALL.txt +9 -0
  3. data/InstalledFiles +180 -0
  4. data/LICENSE.txt +74 -0
  5. data/Rakefile +529 -0
  6. data/TODO +65 -0
  7. data/doc/additional.xml +149 -0
  8. data/doc/core.xml +652 -0
  9. data/doc/credits/index.xml +52 -0
  10. data/doc/credits/php.contributors.xml +118 -0
  11. data/doc/credits/php.language-snippets.ent +622 -0
  12. data/doc/install/index.xml +136 -0
  13. data/doc/install/mac/index.xml +21 -0
  14. data/doc/install/ruby-web.install.rb.instructions.xml +7 -0
  15. data/doc/install/unix/index.xml +46 -0
  16. data/doc/install/win/apache1.xml +166 -0
  17. data/doc/install/win/apache2.xml +141 -0
  18. data/doc/install/win/iis.xml +162 -0
  19. data/doc/install/win/index.xml +24 -0
  20. data/doc/install/win/installer.xml +31 -0
  21. data/doc/install/win/manual.xml +43 -0
  22. data/doc/manual.xml +69 -0
  23. data/doc/old/apache_cgi.txt +23 -0
  24. data/doc/old/fastcgi.txt +23 -0
  25. data/doc/old/mod_ruby.txt +21 -0
  26. data/doc/old/snippets.rdoc +183 -0
  27. data/doc/old/webrick.txt +23 -0
  28. data/doc/old/windows_cgi.txt +9 -0
  29. data/doc/tutorial.xml +14 -0
  30. data/doc/xsl/manual-multi.xsl +10 -0
  31. data/doc/xsl/manual-pdf.xsl +6 -0
  32. data/doc/xsl/manual-single.xsl +6 -0
  33. data/doc/xsl/manual.css +22 -0
  34. data/install.rb +1022 -0
  35. data/lib/formatter.rb +314 -0
  36. data/lib/html-parser.rb +429 -0
  37. data/lib/htmlrepair.rb +113 -0
  38. data/lib/htmlsplit.rb +842 -0
  39. data/lib/sgml-parser.rb +332 -0
  40. data/lib/web.rb +68 -0
  41. data/lib/web/assertinclude.rb +129 -0
  42. data/lib/web/config.rb +50 -0
  43. data/lib/web/connection.rb +1070 -0
  44. data/lib/web/convenience.rb +154 -0
  45. data/lib/web/formreader.rb +318 -0
  46. data/lib/web/htmlparser/html-parser.rb +429 -0
  47. data/lib/web/htmlparser/sgml-parser.rb +332 -0
  48. data/lib/web/htmltools/element.rb +296 -0
  49. data/lib/web/htmltools/stparser.rb +276 -0
  50. data/lib/web/htmltools/tags.rb +286 -0
  51. data/lib/web/htmltools/tree.rb +139 -0
  52. data/lib/web/htmltools/xmltree.rb +160 -0
  53. data/lib/web/htmltools/xpath.rb +71 -0
  54. data/lib/web/info.rb +63 -0
  55. data/lib/web/load.rb +210 -0
  56. data/lib/web/mime.rb +87 -0
  57. data/lib/web/phprb.rb +340 -0
  58. data/lib/web/resources/test/cookie.rb +33 -0
  59. data/lib/web/resources/test/counter.rb +20 -0
  60. data/lib/web/resources/test/multipart.rb +14 -0
  61. data/lib/web/resources/test/redirect.rb +8 -0
  62. data/lib/web/resources/test/stock.rb +33 -0
  63. data/lib/web/sapi/apache.rb +129 -0
  64. data/lib/web/sapi/fastcgi.rb +22 -0
  65. data/lib/web/sapi/install/apache.rb +180 -0
  66. data/lib/web/sapi/install/iis.rb +93 -0
  67. data/lib/web/sapi/install/macosx.rb +90 -0
  68. data/lib/web/sapi/webrick.rb +86 -0
  69. data/lib/web/session.rb +83 -0
  70. data/lib/web/shim/cgi.rb +129 -0
  71. data/lib/web/shim/rails.rb +175 -0
  72. data/lib/web/stringio.rb +78 -0
  73. data/lib/web/strscanparser.rb +24 -0
  74. data/lib/web/tagparser.rb +96 -0
  75. data/lib/web/testing.rb +666 -0
  76. data/lib/web/traceoutput.rb +75 -0
  77. data/lib/web/unit.rb +56 -0
  78. data/lib/web/upload.rb +59 -0
  79. data/lib/web/validate.rb +52 -0
  80. data/lib/web/wiki.rb +557 -0
  81. data/lib/web/wiki/linker.rb +72 -0
  82. data/lib/web/wiki/page.rb +201 -0
  83. data/lib/webunit.rb +27 -0
  84. data/lib/webunit/assert.rb +152 -0
  85. data/lib/webunit/converter.rb +154 -0
  86. data/lib/webunit/cookie.rb +118 -0
  87. data/lib/webunit/domwalker.rb +185 -0
  88. data/lib/webunit/exception.rb +14 -0
  89. data/lib/webunit/form.rb +116 -0
  90. data/lib/webunit/frame.rb +37 -0
  91. data/lib/webunit/htmlelem.rb +122 -0
  92. data/lib/webunit/image.rb +26 -0
  93. data/lib/webunit/jscript.rb +31 -0
  94. data/lib/webunit/link.rb +33 -0
  95. data/lib/webunit/params.rb +321 -0
  96. data/lib/webunit/parser.rb +229 -0
  97. data/lib/webunit/response.rb +464 -0
  98. data/lib/webunit/runtest.rb +41 -0
  99. data/lib/webunit/table.rb +148 -0
  100. data/lib/webunit/testcase.rb +45 -0
  101. data/lib/webunit/ui/cui/testrunner.rb +50 -0
  102. data/lib/webunit/utils.rb +68 -0
  103. data/lib/webunit/webunit.rb +28 -0
  104. data/test/dev/action.rb +83 -0
  105. data/test/dev/forms.rb +104 -0
  106. data/test/dev/forms2.rb +104 -0
  107. data/test/dev/parser.rb +17 -0
  108. data/test/dev/scripts/dump.rb +24 -0
  109. data/test/dev/scripts/makedist.rb +62 -0
  110. data/test/dev/scripts/uri.rb +41 -0
  111. data/test/dev/scripts/uri/common.rb +432 -0
  112. data/test/dev/scripts/uri/ftp.rb +149 -0
  113. data/test/dev/scripts/uri/generic.rb +1106 -0
  114. data/test/dev/scripts/uri/http.rb +76 -0
  115. data/test/dev/scripts/uri/https.rb +26 -0
  116. data/test/dev/scripts/uri/ldap.rb +238 -0
  117. data/test/dev/scripts/uri/mailto.rb +260 -0
  118. data/test/dev/scripts/urireg.rb +174 -0
  119. data/test/dev/simpledispatcher.rb +156 -0
  120. data/test/dev/test.action.rb +146 -0
  121. data/test/dev/test.formreader.rb +463 -0
  122. data/test/dev/test.simpledispatcher.rb +186 -0
  123. data/test/dev/webunit/conv/digit-0.rb +21 -0
  124. data/test/dev/webunit/conv/digit-1.rb +17 -0
  125. data/test/dev/webunit/conv/digit.rb +23 -0
  126. data/test/dev/webunit/conv/test_digit-0.rb +16 -0
  127. data/test/dev/webunit/conv/test_digit-1.rb +19 -0
  128. data/test/dev/webunit/conv/test_digit.rb +26 -0
  129. data/test/dev/webunit/conv/test_digit_view-0.rb +76 -0
  130. data/test/dev/webunit/conv/test_digit_view-1.rb +102 -0
  131. data/test/dev/webunit/conv/test_digit_view.rb +134 -0
  132. data/test/installation/htdocs/cgi_test.rb +296 -0
  133. data/test/installation/htdocs/test_install.rb +4 -0
  134. data/test/installation/runwebtest.rb +5 -0
  135. data/test/installation/test_cookie.rb +128 -0
  136. data/test/installation/test_form.rb +47 -0
  137. data/test/installation/test_multipart.rb +51 -0
  138. data/test/installation/test_request.rb +24 -0
  139. data/test/installation/test_response.rb +35 -0
  140. data/test/unit/htdocs/cookie.rb +32 -0
  141. data/test/unit/htdocs/multipart.rb +28 -0
  142. data/test/unit/htdocs/redirect.rb +12 -0
  143. data/test/unit/htdocs/simple.rb +13 -0
  144. data/test/unit/htdocs/stock.rb +33 -0
  145. data/test/unit/test_assert.rb +162 -0
  146. data/test/unit/test_cookie.rb +114 -0
  147. data/test/unit/test_domwalker.rb +77 -0
  148. data/test/unit/test_form.rb +42 -0
  149. data/test/unit/test_frame.rb +40 -0
  150. data/test/unit/test_htmlelem.rb +74 -0
  151. data/test/unit/test_image.rb +45 -0
  152. data/test/unit/test_jscript.rb +57 -0
  153. data/test/unit/test_link.rb +85 -0
  154. data/test/unit/test_multipart.rb +51 -0
  155. data/test/unit/test_params.rb +210 -0
  156. data/test/unit/test_parser.rb +53 -0
  157. data/test/unit/test_response.rb +150 -0
  158. data/test/unit/test_table.rb +70 -0
  159. data/test/unit/test_utils.rb +106 -0
  160. data/test/unit/test_webunit.rb +28 -0
  161. data/test/web/mod_ruby_stub.rb +39 -0
  162. data/test/web/test.assertinclude.rb +109 -0
  163. data/test/web/test.buffer.rb +182 -0
  164. data/test/web/test.code.loader.rb +78 -0
  165. data/test/web/test.config.rb +31 -0
  166. data/test/web/test.error.handling.rb +91 -0
  167. data/test/web/test.formreader-2.0.rb +352 -0
  168. data/test/web/test.load.rb +125 -0
  169. data/test/web/test.mime-type.rb +23 -0
  170. data/test/web/test.narf.cgi.rb +106 -0
  171. data/test/web/test.phprb.rb +239 -0
  172. data/test/web/test.request.rb +368 -0
  173. data/test/web/test.response.rb +637 -0
  174. data/test/web/test.ruby-web.rb +10 -0
  175. data/test/web/test.session.rb +50 -0
  176. data/test/web/test.shim.cgi.rb +96 -0
  177. data/test/web/test.tagparser.rb +65 -0
  178. data/test/web/test.template2.rb +297 -0
  179. data/test/web/test.testing2.rb +318 -0
  180. data/test/web/test.upload.rb +45 -0
  181. data/test/web/test.validate.rb +46 -0
  182. data/test/web/test.web.test.rb +495 -0
  183. data/test/wiki/test.history.rb +297 -0
  184. data/test/wiki/test.illustration_page.rb +287 -0
  185. data/test/wiki/test.linker.rb +197 -0
  186. data/test/wiki/test.tarpit.rb +56 -0
  187. data/test/wiki/test.wiki.rb +300 -0
  188. data/test/wikitestroot/admin.rb +7 -0
  189. data/test/wikitestroot/wiki.rb +6 -0
  190. metadata +234 -0
@@ -0,0 +1,72 @@
1
+ module Web
2
+ class Wiki
3
+ class Linker #:nodoc:
4
+ def initialize
5
+ end
6
+
7
+ def html_regexp
8
+ /((<textarea)(.)*(\/textarea>))|(<a[ ]*href=[\"']*([^\"'>]*)[\"']*>([^(<\/)]*)<\/a>)|(<[^>]*>)/mi #"'
9
+ end
10
+
11
+ def scan_linked_word( scanner , output )
12
+ if scanner.scan(/\[\[(.*?)\]\]/)
13
+ if Web::Wiki.page_list.include?(scanner[1])
14
+ output.print "<a href=\"?page.name=#{Web::escape(scanner[1])}\">#{scanner[1]}</a>"
15
+ else
16
+ output.print "#{scanner[1]}<a href=\"?page.name=#{Web::escape(scanner[1])}&action=edit\">?</a>"
17
+ end
18
+ true
19
+ else
20
+ false
21
+ end
22
+ end
23
+
24
+ def make_link( pagename )
25
+ if (Web::Wiki::pref( :script_url ) && Web::Wiki::pref( :store_url ) )
26
+ "<a href=\"#{Web::Wiki::pref(:script_url)}/#{pagename}.html\">#{pagename}</a>"
27
+ else
28
+ "<a href=\"?page.name=#{Web::escape(pagename)}\">#{pagename}</a>"
29
+ end
30
+ end
31
+
32
+ def scan_bumpy_word( scanner , output )
33
+ if scanner.scan(/([A-Z][\w\/]*[a-z][\w\/]*[A-Z]\w*)/)
34
+ if Web::Wiki.page_list.include?(scanner[1])
35
+ output.print make_link( scanner[1] )
36
+ else
37
+ output.print "#{scanner[1]}<a href=\"?page.name=#{Web::escape(scanner[1])}&action=edit\">?</a>"
38
+ end
39
+ true
40
+ else
41
+ false
42
+ end
43
+ end
44
+
45
+ def scan_html( scanner , output )
46
+ if scanner.scan(html_regexp)
47
+ output.print scanner[0]
48
+ true
49
+ else
50
+ false
51
+ end
52
+ end
53
+
54
+ def scan_other( scanner , output )
55
+ if scanner.scan(/(\w+|\s+|.)/)
56
+ output.print scanner[1]
57
+ true
58
+ else
59
+ false
60
+ end
61
+ end
62
+
63
+ def replace_links(string )
64
+ out = StringIO.new
65
+ scanner = StringScanner.new(string)
66
+ while scan_linked_word( scanner , out ) || scan_bumpy_word( scanner , out ) || scan_html( scanner , out ) || scan_other( scanner , out )
67
+ end
68
+ out.string
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,201 @@
1
+ module Web
2
+ class Wiki
3
+
4
+ #begin experiment with SimpleDispatcher
5
+ if false
6
+ class PageEditor #:nodoc: # < Web::SimpleDispatcher::Template
7
+ include Web::SimpleDispatcher::TemplateMixin##
8
+
9
+ class << self
10
+ include Web::SimpleDispatcher::TemplateClassMixin
11
+ end
12
+
13
+
14
+ attr_accessor :page, :wiki
15
+
16
+ def page
17
+ unless @page
18
+ @page = wiki.load_page
19
+ unless (Web["revision"] == nil || Web["revision"].empty? || Web["revision"].to_s == "0")
20
+ history = @page.history
21
+ @page = history.find{ |p|
22
+ Web["revision"].to_i == p.revision
23
+ }
24
+ @page.history = history
25
+ end
26
+ end
27
+ @page
28
+ end
29
+
30
+
31
+ def initialize
32
+ end
33
+
34
+ def on_submit r
35
+ page.set_automatic_fields
36
+ wiki.save( page )
37
+ end
38
+ end
39
+ # end experiment with SimpleDispatcher
40
+ end
41
+
42
+ class Page #:nodoc:
43
+ @@attributes = []
44
+ def Page.page_attr_accessor( *symbols )
45
+ symbols.each { |symbol|
46
+ attr_accessor symbol
47
+ }
48
+ Page::page_attr( *symbols )
49
+ end
50
+
51
+ def Page::page_attr( *symbols )
52
+ symbols.each { |symbol|
53
+ @@attributes.push symbol
54
+ }
55
+ end
56
+
57
+ @@max_revisions = 25
58
+ def Page.max_revisions
59
+ @@max_revisions
60
+ end
61
+
62
+ def set_by_request
63
+ @@attributes.each { |symbol|
64
+ self.send( symbol.to_s + "=", Web["page." + symbol.to_s] )
65
+ }
66
+ set_automatic_fields
67
+ end
68
+
69
+ def set_automatic_fields
70
+ self.revision += 1
71
+ self.mtime = Time.now()
72
+ self.history.unshift self.clone
73
+ self.history.pop if ( self.history.size > Page.max_revisions )
74
+ self.remote_addr = ENV["REMOTE_ADDR"]
75
+ end
76
+
77
+ attr_accessor :name, :revision, :history, :mtime, :remote_addr
78
+ page_attr_accessor :align, :valign, :illustration, :bg_color, :text_color, :top_margin, :left_margin, :comment
79
+ def initialize( name )
80
+ self.name = name
81
+ self.revision = 0
82
+ self.history = [ ]
83
+ self.content = ""
84
+ self.comment = ""
85
+ self.illustration = ""
86
+ self.bg_color = "ffffff"
87
+ self.text_color = "000000"
88
+ self.align = "left"
89
+ self.valign = "top"
90
+ self.top_margin = "5"
91
+ self.left_margin = "5"
92
+ self.mtime = Time.now()
93
+ self.remote_addr = "auto-create"
94
+ end
95
+
96
+ def mtime_pretty
97
+ if (mtime.hour > 12)
98
+ mtime.hour - 12
99
+ elsif (mtime.hour == 0)
100
+ 12
101
+ else
102
+ mtime.hour
103
+ end.to_s + ":" +
104
+ mtime.min.to_s +
105
+ mtime.strftime("%p ").downcase +
106
+ mtime.strftime("%b ") +
107
+ mtime.mday.to_s +
108
+ mtime.strftime( ", %Y" )
109
+ end
110
+
111
+ def template
112
+ if (self.name == Web::Wiki::pref(:home_page))
113
+ Web::Wiki::pref( :home_template )
114
+ elsif(self.illustration == nil)
115
+ "basic.html"
116
+ elsif (self.illustration.empty?)
117
+ "basic.html"
118
+ else
119
+ "illustration.html"
120
+ end
121
+ end
122
+
123
+ def escaped_name
124
+ name.gsub( /\//, "-slash-" )
125
+ end
126
+
127
+ def download_link
128
+ File.join( Web::Wiki.store_url, escaped_name, "" )
129
+ end
130
+
131
+ def dir
132
+ File.join( Web::Wiki.store_dir, escaped_name )
133
+ end
134
+
135
+ class Asset < String #:nodoc:
136
+ attr_accessor :owner
137
+ def initialize(newowner, newpath)
138
+ self.owner = newowner
139
+ super( newpath )
140
+ end
141
+
142
+ def size
143
+ File.size( File.join( owner.dir, self ) )
144
+ end
145
+
146
+ def thumbnail
147
+ if (size > 102400)
148
+ "#{self} (<i>#{size} bytes</i>)"
149
+ else
150
+ "<img src='#{owner.download_link}#{self}' border=0 width=100><br>#{self}"
151
+ end
152
+ end
153
+
154
+ end
155
+
156
+ def assets
157
+ a = if (File.exists? dir)
158
+ (Dir.entries( dir ) - [".", ".."]).find_all { |e|
159
+ e =~ /^[^\#]/
160
+ }.collect{ |e|
161
+ Asset.new(self, e)
162
+ }
163
+ else
164
+ [ ]
165
+ end
166
+ a
167
+ end
168
+
169
+ def historical_assets
170
+ historical = {}
171
+ assets.each { |e|
172
+ historical[e] = Dir[dir + "/*" + e].entries.sort { |a,b|
173
+ File.mtime( a ) <=> File.mtime( b )
174
+ }.collect { |e|
175
+ File.basename(e)
176
+ }
177
+ }
178
+ Dir[dir + "/\#*deleted.*"].entries.each{ |e|
179
+ base = File.basename(e).gsub( /\#(\d+\.){0,1}deleted\./, "" )
180
+ historical[base] = [ File.basename(e) ] unless historical.has_key?( base )
181
+ }
182
+ historical
183
+ end
184
+
185
+ page_attr :content
186
+ attr_reader :content
187
+ def content=( newcontent )
188
+ {
189
+ %r{(<[^>]*)(http:\/\/[^"']*)(((#{Regexp.escape(download_link)})|(#{Regexp.escape(download_link.gsub(/&/, "&amp;"))}))[^"']*)(((\s|'|")[^>]*>)|>)} => '\1\3\7',
190
+ }.each{ |pattern, replacement|
191
+ newcontent.gsub!( pattern, replacement )
192
+ }
193
+ @content = newcontent
194
+ end
195
+
196
+ def html
197
+ Web::Wiki::Linker.new.replace_links(self.content)
198
+ end
199
+ end
200
+ end
201
+ end
@@ -0,0 +1,27 @@
1
+ =begin
2
+ = WebUnit
3
+ Copyright(C) 2001 yuichi TAKAHASHI
4
+ $Id: webunit.rb,v 1.1.1.1 2003/01/21 11:50:39 yuichi Exp $
5
+ =end
6
+
7
+ require 'webunit/webunit/utils'
8
+ require 'webunit/webunit/exception'
9
+ require 'webunit/webunit/assert'
10
+ require 'webunit/webunit/htmlelem'
11
+ require 'webunit/webunit/link'
12
+ require 'webunit/webunit/frame'
13
+ require 'webunit/webunit/image'
14
+ require 'webunit/webunit/jscript'
15
+ require 'webunit/webunit/testcase'
16
+ require 'webunit/webunit/cookie'
17
+ require 'webunit/webunit/params'
18
+ require 'webunit/webunit/form'
19
+ require 'webunit/webunit/parser'
20
+ require 'webunit/webunit/response'
21
+ require 'webunit/webunit/table'
22
+ begin
23
+ require 'webunit/webunit/domwalker'
24
+ rescue LoadError
25
+ end
26
+
27
+ WebUnit::TestCase::new( 'nil?' ).setup
@@ -0,0 +1,152 @@
1
+ =begin
2
+ = WebUnit::assert
3
+ Copyright(C) 2001 yuichi TAKAHASHI
4
+ $Id: assert.rb,v 1.1.1.1 2003/01/21 11:50:39 yuichi Exp $
5
+ =end
6
+
7
+ require 'webunit/converter'
8
+
9
+ module WebUnit
10
+
11
+ include WebUnit::Utils
12
+
13
+ =begin
14
+ --- WebUnit#assert_urls(expected,actual,message='')
15
+ compare two URLs. raise AssertionFailedError, when these are diferent.
16
+ =end
17
+
18
+ def assert_urls( expected, actual, message='' )
19
+ setup_assert
20
+ message << " " unless message == ""
21
+ if expected == nil || actual == nil
22
+ message << "expected:<nil> but was:<#{actual}>" if expected == nil
23
+ message << "expected:<#{expected}> but was:<nil>" if actual == nil
24
+ raise_assertion_error( message )
25
+ end
26
+
27
+ some_expected = [expected, $URLBASE + expected]
28
+ patterns = [actual, orthop_url(actual)]
29
+ for exp in some_expected
30
+ for e in [exp, orthop_url(exp)]
31
+ for pattern in patterns
32
+ return if e == pattern
33
+ end
34
+ end
35
+ end
36
+
37
+ message << "expected:<#{expected}> but was:<#{actual}>"
38
+ raise_assertion_error( message )
39
+ end
40
+
41
+ =begin
42
+ --- WebUnit#assert_input( name, type, value, actual, message="" )
43
+ check attribute of input field.
44
+
45
+
46
+ =end
47
+
48
+ def assert_input( name, type, value, actual, message="" )
49
+ setup_assert
50
+ message << " " unless message == ""
51
+ unless name == actual.name
52
+ message << "expected:<name:#{name}> but was:<name:#{actual.name}>"
53
+ raise_assertion_error( message )
54
+ end
55
+ unless type == actual.type
56
+ message << "expected:<type:#{type}> but was:<type:#{actual.type}>"
57
+ raise_assertion_error( message )
58
+ end
59
+ unless value == actual.value
60
+ message << "expected:<value:#{value}> but was:<value:#{actual.value}>"
61
+ raise_assertion_error( message )
62
+ end
63
+ end
64
+
65
+ =begin
66
+ --- WebUnit#assert_select_option( value, data, selected, actual, message="" )
67
+
68
+
69
+ =end
70
+
71
+ def assert_select_option( value, data, selected, actual, message="" )
72
+ setup_assert
73
+ message << " " unless message == ""
74
+ unless value == actual.value
75
+ message << "expected:<value:#{value}> but was:<value:#{actual.value}>"
76
+ raise_assertion_error( message )
77
+ end
78
+ data = value if data == nil
79
+ unless data == actual.data
80
+ message << "expected:<data:#{data}> but was:<data:#{actual.data}>"
81
+ raise_assertion_error( message )
82
+ end
83
+ unless selected == ( actual.stat == 'on' )
84
+ #unless selected == ( '' == actual.attrs['selected'] )
85
+ if selected
86
+ message << "expected:<selected> but was:<unselected>"
87
+ else
88
+ message << "expected:<unselected> but was:<selected>"
89
+ end
90
+ raise_assertion_error( message )
91
+ end
92
+ end
93
+
94
+ =begin
95
+ --- WebUnit#assert_attrs( expected, actual, message="" )
96
+ check attribute of input field.
97
+
98
+
99
+ =end
100
+
101
+ def assert_attrs( expected, actual, message="" )
102
+ setup_assert
103
+ message << " " unless message == ""
104
+ expected.each do |k,v|
105
+ av = nil
106
+ if actual.respond_to?( "#{k}" )
107
+ av = actual.send( "#{k}" )
108
+ else
109
+ av = actual.attrs[k] if actual.attrs.key?( k )
110
+ end
111
+ unless av == v
112
+ message << "expected:<#{k}:#{v}> but was:<#{k}:#{av}>"
113
+ raise_assertion_error( message )
114
+ end
115
+ end
116
+ end
117
+
118
+ =begin
119
+ --- WebUnit#assert_include( expected, actual, message="" )
120
+ check ((|actual|)) has HtmlElems, which have ((|expected|)) as data
121
+
122
+
123
+ =end
124
+
125
+ def assert_include( expected, actual, message="" )
126
+ setup_assert
127
+ message << " " unless message == ""
128
+ unless actual.has?( expected ) then
129
+ if actual.search( expected ) == []
130
+ message << "expected:<#{expected.inspect}> but not exist in <#{actual.inspect}>."
131
+ raise_assertion_error( message )
132
+ end
133
+ end
134
+ end
135
+
136
+ =begin
137
+ --- WebUnit#assert_title( expected, actual, message="" )
138
+ check title of ((|actual|)) and ((|expected|)) as string,
139
+ append formatted body to message, when both differ.
140
+ =end
141
+
142
+ def assert_title( expected, actual, message="" )
143
+ setup_assert
144
+ message << " " unless message == ""
145
+ unless actual.title == expected then
146
+ message << "expected:<#{expected}> but not exist in <#{actual.title}>."
147
+ message << "\n#{'='*72}#{actual.format}\n#{'='*72}\n"
148
+ raise_assertion_error( message )
149
+ end
150
+ end
151
+
152
+ end