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,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
|