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,154 @@
1
+ module WebUnit
2
+
3
+ # for Testing Framework
4
+ unless const_defined?('AVAILABLE_FRAMEWORKS')
5
+ AVAILABLE_FRAMEWORKS = []
6
+ end
7
+
8
+ [
9
+ %w(Test::Unit test/unit/testcase),
10
+ %w(RubyUnit runit/testcase),
11
+ ].each do |framework|
12
+ AVAILABLE_FRAMEWORKS.push(framework)
13
+ end
14
+
15
+ AVAILABLE_FRAMEWORKS.each do |name, library|
16
+ begin
17
+ require library
18
+ USING_FRAMEWORK = name
19
+ break
20
+ rescue LoadError
21
+ end
22
+ end
23
+
24
+ unless const_defined?('USING_FRAMEWORK')
25
+ raise LoadError, 'require ' <<
26
+ AVAILABLE_FRAMEWORKS.collect{|name,| name}.join(', ') <<
27
+ "or #{AVAILABLE_FRAMEWORKS.last[0]}"
28
+ end
29
+
30
+
31
+ # for XML parser
32
+ unless const_defined?('AVAILABLE_XMLPARSERS')
33
+ AVAILABLE_XMLPARSERS = []
34
+ end
35
+
36
+ [
37
+ %w(REXML rexml/document),
38
+ %w(NQXML nqxml/treeparser),
39
+ ].each do |xmlparser|
40
+ AVAILABLE_XMLPARSERS.push(xmlparser)
41
+ end
42
+
43
+ AVAILABLE_XMLPARSERS.each do |name, library|
44
+ begin
45
+ require library
46
+ USING_XMLPARSER = name
47
+ break
48
+ rescue LoadError
49
+ end
50
+ end
51
+
52
+ unless const_defined?('USING_XMLPARSER')
53
+ USING_XMLPARSER = 'none'
54
+ end
55
+ end
56
+
57
+ case WebUnit::USING_FRAMEWORK
58
+ when 'Test::Unit'
59
+ module Test
60
+ module Unit
61
+ module Assertions
62
+
63
+ unless method_defined?('setup_assert')
64
+ def setup_assert() add_assertion() end
65
+ end
66
+
67
+ unless method_defined?('raise_assertion_error')
68
+ def raise_assertion_error(message)
69
+ raise AssertionFailedError.new(message.to_s)
70
+ end
71
+ end
72
+
73
+ [
74
+ %w(assert_exception assert_raises),
75
+ %w(assert_no_exception assert_nothing_raised),
76
+ %w(assert_equals assert_equal),
77
+ %w(assert_fail flunk),
78
+ %w(assert_not_match assert_no_match),
79
+ %w(assert_matches assert_match),
80
+ %w(assert_equal_float assert_in_delta),
81
+ ].each do |runit_method, testunit_method|
82
+ unless method_defined?(runit_method)
83
+ module_eval(<<-EOS)
84
+ def #{runit_method}(*args, &block)
85
+ @_assertion_wrapped ||= nil
86
+ add_assertion if @_assertion_wrapped
87
+ #{testunit_method}(*args, &block)
88
+ end
89
+ EOS
90
+ end
91
+ end
92
+
93
+ unless method_defined?('assert_equals')
94
+ def assert_equals(*args, &block)
95
+ @_assertion_wrapped ||= nil
96
+ add_assertion if @_assertion_wrapped
97
+ assert_equal(*args, &block)
98
+ end
99
+ end
100
+
101
+ unless method_defined?('assert_equals')
102
+ def assert_equals(*args, &block)
103
+ @_assertion_wrapped ||= nil
104
+ add_assertion if @_assertion_wrapped
105
+ assert_equal(*args, &block)
106
+ end
107
+ end
108
+
109
+ unless method_defined?('assert_equals')
110
+ def assert_equals(*args, &block)
111
+ @_assertion_wrapped ||= nil
112
+ add_assertion if @_assertion_wrapped
113
+ assert_equal(*args, &block)
114
+ end
115
+ end
116
+
117
+ end
118
+ end
119
+ end
120
+ when 'RubyUnit'
121
+ end
122
+
123
+ module WebUnit
124
+ case USING_FRAMEWORK
125
+ when 'Test::Unit'
126
+ include Test::Unit::Assertions
127
+ AssertionFailedError = Test::Unit::AssertionFailedError
128
+ TestSuite = Test::Unit::TestSuite
129
+ class TestCase < Test::Unit::TestCase
130
+ private
131
+ def add_assertion
132
+ @_assertion_wrapped ||= nil
133
+ @_result ||= nil
134
+ @_result.add_assertion if @_result
135
+ end
136
+ end
137
+ when 'RubyUnit'
138
+ include RUNIT::Assert
139
+ AssertionFailedError = RUNIT::AssertionFailedError
140
+ TestSuite = RUNIT::TestSuite
141
+ class TestCase < RUNIT::TestCase
142
+ class << self
143
+ def test_cases
144
+ if self == TestCase
145
+ TestSuite.new(*@@test_classes)
146
+ else
147
+ suite
148
+ end
149
+ end
150
+ alias all_suite test_cases
151
+ end
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,118 @@
1
+ =begin
2
+ = WebUnit::Cookies
3
+ Copyright(C) 2001 yuichi TAKAHASHI
4
+ $Id: cookie.rb,v 1.1.1.1 2003/01/21 11:50:40 yuichi Exp $
5
+ =end
6
+
7
+ require 'singleton'
8
+
9
+ module WebUnit
10
+
11
+ class Cookies
12
+
13
+ include Singleton
14
+
15
+ def initialize
16
+ @cookies = {}
17
+ end
18
+
19
+ =begin
20
+ --- Cookies.clear
21
+ =end
22
+
23
+ def self::clear
24
+ self::instance.clear
25
+ end
26
+
27
+ def clear
28
+ @cookies = {}
29
+ end
30
+
31
+ =begin
32
+ --- Cookies.add( name, value, path )
33
+ =end
34
+
35
+ def self::add( n, v, p='/' )
36
+ self::instance.add( n, v, p )
37
+ end
38
+
39
+ def add( n, v, p )
40
+ h = {}
41
+ h["name"] = n
42
+ h["value"] = v
43
+ @cookies[[n,p]] = h
44
+ end
45
+
46
+ =begin
47
+ --- Cookies.list
48
+ =end
49
+
50
+ def self::list
51
+ self::instance.list
52
+ end
53
+
54
+ def list
55
+ @cookies.keys.collect{|x|x[0]}
56
+ end
57
+
58
+ =begin
59
+ --- Cookies.has?
60
+ =end
61
+
62
+ def self::has?( name )
63
+ self::instance.has?( name )
64
+ end
65
+
66
+ def has?( name )
67
+ @cookies.keys.collect{|x|x[0]}.include?( name )
68
+ end
69
+
70
+ def self::update( set_cookie_response )
71
+ self::instance.update( set_cookie_response )
72
+ end
73
+
74
+ def update( set_cookie_response )
75
+ if set_cookie_response != nil then
76
+ set_cookie_response.split(',').each do |e|
77
+ c = parse_cookie( e.strip )
78
+ @cookies[ [ c["name"], c["path"] ] ] = c
79
+ end
80
+ end
81
+ end
82
+
83
+ def self::header( target )
84
+ self::instance.header( target )
85
+ end
86
+
87
+ def header( target )
88
+ a = []
89
+ @cookies.keys.each do |name,path|
90
+ if path == nil || ( 'path=' + target ).index( path ) != nil then
91
+ a.push( name + '=' + @cookies[[name,path]]["value"] )
92
+ end
93
+ end
94
+ a.size == 0 ? {} : { "Cookie"=>( a.join( '; ' ) ) }
95
+ end
96
+
97
+ attr_reader :cookies
98
+
99
+ def cookies= ( hash )
100
+ raise ArgumentError unless hash.kind_of?( Hash )
101
+ @cookies = hash
102
+ end
103
+
104
+ private
105
+
106
+ def parse_cookie( line )
107
+ h = {}
108
+ attrs = line.split(';').collect{ |x| x.strip.split('=') }
109
+ h["name"], h["value"] = attrs.shift
110
+ attrs.each do |arr|
111
+ h[arr[0]] = arr[1]
112
+ end
113
+ h
114
+ end
115
+
116
+ end
117
+
118
+ end
@@ -0,0 +1,185 @@
1
+ require 'webunit/converter'
2
+
3
+ module WebUnit
4
+
5
+ class DomWalkerError < RuntimeError
6
+ end
7
+
8
+ class BaseDomWalker
9
+ attr_reader :doc, :cur_path
10
+
11
+ def initialize()
12
+ @cur_path = '/'
13
+ end
14
+
15
+ def cur_value
16
+ cur_values.join
17
+ end
18
+
19
+ end
20
+
21
+ case USING_XMLPARSER
22
+ when 'REXML'
23
+ class REXMLDomWalker < BaseDomWalker
24
+
25
+ ATTR_RS = %q|\s*(\w+)\s*=\s*(["'])(\w+)(['"])\s*|
26
+
27
+ def initialize(xml)
28
+ super()
29
+ @doc = REXML::Document.new(xml)
30
+ @cur_node = @doc.root
31
+ end
32
+
33
+ def change_node(path)
34
+ xpath = path.dup
35
+ cur_path = @cur_path
36
+ if xpath =~ %r!^/!
37
+ xpath[1,0] = @doc.root.name + '/'
38
+ cur_path = '/'
39
+ end
40
+ xpath.gsub!(/(?!^\/)\//, '[0]/')
41
+ xpath.gsub!(/\[\s*(\d+)\s*\]/) {|str| "[#{$1.succ}]"}
42
+ xpath.gsub!(/\[#{ATTR_RS}(?:,#{ATTR_RS})*\]\z/) do |x|
43
+ res = []
44
+ attr_info = []
45
+ $~.to_a.compact[1..-1].each do |m|
46
+ attr_info << m
47
+ if attr_info.size == 4
48
+ raise DomWalkerError if attr_info[1] != attr_info[3]
49
+ res << "@#{attr_info[0]}=#{attr_info[1..3]}"
50
+ attr_info.clear
51
+ end
52
+ end
53
+ raise DomWalkerError unless attr_info.empty?
54
+ "[#{res.join(' and ')}]"
55
+ end
56
+ element = @cur_node.elements[xpath]
57
+ raise DomWalkerError if element.nil?
58
+ @cur_node = element
59
+ @cur_path = "#{cur_path}/#{path}".gsub( %r!//*!, '/' )
60
+ end
61
+
62
+ def cur_values
63
+ @cur_node.texts.collect {|text| text.to_s}
64
+ end
65
+
66
+ def cur_attrs
67
+ @cur_node.attributes
68
+ end
69
+
70
+ def cur_name
71
+ @cur_node.name
72
+ end
73
+
74
+ def size(name='')
75
+ n = 0
76
+ @cur_node.each_element do |element|
77
+ n += 1 if name.empty? or name == element.name
78
+ end
79
+ n
80
+ end
81
+
82
+ end
83
+
84
+ DomWalker = REXMLDomWalker
85
+
86
+ when 'NQXML'
87
+ class NQXMLDomWalker < BaseDomWalker
88
+
89
+ def initialize(xml)
90
+ super()
91
+ @doc = NQXML::TreeParser.new( xml ).document
92
+ @cur_node = @doc.rootNode
93
+ end
94
+
95
+ def change_node( path )
96
+
97
+ if path =~ %r!^/!
98
+ @cur_node = @doc.rootNode
99
+ @cur_path = '/'
100
+ path = path[1..-1]
101
+ end
102
+ @cur_path = "#{@cur_path}/#{path}".gsub( %r!//*!, '/' )
103
+
104
+ path.split( '/' ).each do |name|
105
+
106
+ nth = 0
107
+ attrs = nil
108
+
109
+ if name =~ %r!([^\[]*)\[([^\]]*)\]!
110
+ name = $1
111
+ if $2.to_i.to_s == $2
112
+ nth = $2.to_i
113
+ else
114
+ attrs = {}
115
+ $2.split( ',' ).each do |pair|
116
+ key, val = pair.split( '=' )
117
+ val = val.split( '"' )[1]
118
+ attrs[key] = val;
119
+ end
120
+ end
121
+ end
122
+
123
+ changed = false
124
+ @cur_node.children.each do |node|
125
+ entity = node.entity
126
+ if entity.instance_of?(NQXML::Tag) && entity.name == name
127
+ if attrs
128
+ matched = true
129
+ attrs.each do |key,val|
130
+ matched = false if val != node.entity.attrs[key]
131
+ end
132
+ next unless matched
133
+ end
134
+ if nth == 0
135
+ @cur_node = node
136
+ changed = true
137
+ break
138
+ end
139
+ nth -= 1
140
+ end
141
+ end
142
+
143
+ raise DomWalkerError unless changed
144
+
145
+ end
146
+
147
+ end
148
+
149
+ def cur_values
150
+ @cur_node.children.collect{ |node|
151
+ entity = node.entity
152
+ entity.text if entity.instance_of?(NQXML::Text)
153
+ }.compact
154
+ end
155
+
156
+ def cur_value
157
+ cur_values.join
158
+ end
159
+
160
+ def cur_attrs
161
+ @cur_node.entity.attrs
162
+ end
163
+
164
+ def cur_name
165
+ @cur_node.entity.name
166
+ end
167
+
168
+ def size( name="" )
169
+ n = 0
170
+ @cur_node.children.each do |node|
171
+ entity = node.entity
172
+ if entity.instance_of?(NQXML::Tag)
173
+ n += 1 if name == "" || name == entity.name
174
+ end
175
+ end
176
+ return n
177
+ end
178
+
179
+ end
180
+
181
+ DomWalker = NQXMLDomWalker
182
+
183
+ end
184
+
185
+ end