1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* test/rexml: Avoid fd leaks.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46178 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2014-05-27 13:45:04 +00:00
parent 3c908895ab
commit 3356c312cd
11 changed files with 142 additions and 113 deletions

View file

@ -1,3 +1,7 @@
Tue May 27 22:44:20 2014 Tanaka Akira <akr@fsij.org>
* test/rexml: Avoid fd leaks.
Tue May 27 22:24:25 2014 Kouhei Sutou <kou@cozmixng.org>
* test/rexml/test_document.rb: Indent.

View file

@ -276,7 +276,7 @@ EOF
f.write( tn, Output.new(o = "", "ISO-8859-1") )
assert_equal(expected_iso, o.strip)
doc = Document.new File.new(fixture_path('xmlfile-bug.xml'))
doc = File.open(fixture_path('xmlfile-bug.xml')) {|file| Document.new file }
tn = XPath.first(doc, "//nebenspalte/text()[2]")
assert_equal(expected_utf, tn.to_s.strip)
f.write( tn, Output.new(o = "", "ISO-8859-1") )
@ -310,9 +310,10 @@ EOF
# Alun ap Rhisiart
def test_less_than_in_element_content
source = File.new(fixture_path('ProductionSupport.xml'))
doc = File.open(fixture_path('ProductionSupport.xml')) do |source|
REXML::Document.new source
end
h = Hash.new
doc = REXML::Document.new source
doc.elements.each("//CommonError") { |el|
h[el.elements['Key'].text] = 'okay'
}

View file

@ -227,8 +227,9 @@ module REXMLTests
assert_equal(correct, test)
# OK, the BIG doctype test, numba wun
docin = File.new(fixture_path("doctype_test.xml"))
doc = Document.new(docin)
doc = File.open(fixture_path("doctype_test.xml")) do |docin|
Document.new(docin)
end
doc.write(test="")
assert_equal(31, doc.doctype.size)
end
@ -248,8 +249,7 @@ module REXMLTests
assert_instance_of DocType, doc.doctype
assert_equal doc.version, "1.0"
source = File.new(fixture_path("dash.xml"))
doc = Document.new source
doc = File.open(fixture_path("dash.xml")) {|source| Document.new source }
assert_equal "content-2", doc.elements["//content-2"].name
end
@ -339,7 +339,7 @@ module REXMLTests
assert_equal doc.root.name.to_s, "xsa"
# Testing IO source
doc = Document.new File.new(fixture_path("project.xml"))
doc = File.open(fixture_path("project.xml")) {|f| Document.new f }
assert_equal doc.root.name.to_s, "Project"
end
@ -436,7 +436,7 @@ module REXMLTests
# enormous.
def test_element_access
# Testing each_element
doc = Document.new File.new(fixture_path("project.xml"))
doc = File.open(fixture_path("project.xml")) {|f| Document.new f }
each_test( doc, "/", 1 ) { |child|
assert_equal doc.name, child.name
@ -601,22 +601,23 @@ module REXMLTests
def test_big_documentation
f = File.new(fixture_path("documentation.xml"))
d = Document.new f
d = File.open(fixture_path("documentation.xml")) {|f| Document.new f }
assert_equal "Sean Russell", d.elements["documentation/head/author"].text.tr("\n\t", " ").squeeze(" ")
out = ""
d.write out
end
def test_tutorial
doc = Document.new File.new(fixture_path("tutorial.xml"))
doc = File.open(fixture_path("tutorial.xml")) {|f| Document.new f }
out = ""
doc.write out
end
def test_stream
c = Listener.new
Document.parse_stream( File.new(fixture_path("documentation.xml")), c )
File.open(fixture_path("documentation.xml")) do |f|
Document.parse_stream( f, c )
end
assert(c.ts, "Stream parsing apparantly didn't parse the whole file")
assert(c.te, "Stream parsing dropped end tag for documentation")
@ -627,12 +628,15 @@ module REXMLTests
end
def test_line
Document.new File.new(fixture_path("bad.xml"))
f = File.new(fixture_path("bad.xml"))
Document.new f
assert_fail "There should have been an error"
rescue Exception
# We should get here
assert($!.line == 5, "Should have been an error on line 5, "+
"but was reported as being on line #{$!.line}" )
ensure
f.close if f
end
def test_substitution
@ -836,8 +840,7 @@ EOL
end
def test_attlist_write
file=File.new(fixture_path("foo.xml"))
doc=Document.new file
doc = File.open(fixture_path("foo.xml")) {|file| Document.new file }
out = ''
doc.write(out)
end
@ -1281,11 +1284,11 @@ EOL
end
def test_ticket_63
Document.new(File.new(fixture_path("t63-1.xml")))
File.open(fixture_path("t63-1.xml")) {|f| Document.new(f) }
end
def test_ticket_75
d = REXML::Document.new(File.new(fixture_path("t75.xml")))
d = File.open(fixture_path("t75.xml")) {|f| REXML::Document.new(f) }
assert_equal("tree", d.root.name)
end

View file

@ -88,7 +88,9 @@ module REXMLTests
end
def test_ticket_110
utf16 = REXML::Document.new(File.new(fixture_path("ticket_110_utf16.xml")))
utf16 = File.open(fixture_path("ticket_110_utf16.xml")) do |f|
REXML::Document.new(f)
end
assert_equal(utf16.encoding, "UTF-16")
assert( utf16[0].kind_of?(REXML::XMLDecl))
end

View file

@ -39,8 +39,9 @@ module REXMLTests
def test( fname )
# Dir.entries( xml_dir ).each { |fname|
# if fname =~ /\.xml$/
file = File.new(fixture_path(fname+".xml"))
doc = Document.new( file )
doc = File.open(fixture_path(fname+".xml")) do |file|
Document.new(file)
end
XPath.each( doc, "/tests/document" ) {|e| handleDocument(e)}
# end
# }

View file

@ -6,9 +6,10 @@ module REXMLTests
include REXMLTestUtils
include REXML
def test_parsing
f = File.new(fixture_path("documentation.xml"))
parser = REXML::Parsers::LightParser.new( f )
parser.parse
File.open(fixture_path("documentation.xml")) do |f|
parser = REXML::Parsers::LightParser.new( f )
parser.parse
end
end
end
end

View file

@ -93,10 +93,9 @@ module REXMLTests
a.value.force_encoding('binary')
end
assert_equal( "\xC3\xA9", a.value)
doc = REXML::Document.parse_stream(
File::new(fixture_path("stream_accents.xml")),
AccentListener::new
)
doc = File::open(fixture_path("stream_accents.xml")) do |f|
REXML::Document.parse_stream(f, AccentListener::new)
end
end
end

View file

@ -47,7 +47,9 @@ END
end
# Provided by Tom Talbott
def test_more_ordering
doc = REXML::Document.new(Zlib::GzipReader.open(fixture_path('LostineRiver.kml.gz'), encoding: 'utf-8'))
doc = Zlib::GzipReader.open(fixture_path('LostineRiver.kml.gz'), encoding: 'utf-8') do |f|
REXML::Document.new(f)
end
actual = [
"Head south from Phinney Ave N",
"Turn left at N 36th St",

View file

@ -5,7 +5,9 @@ module REXMLTests
class TestIssuezillaParsing < Test::Unit::TestCase
include REXMLTestUtils
def test_rexml
doc = REXML::Document.new(File.new(fixture_path("ofbiz-issues-full-177.xml")))
doc = File.open(fixture_path("ofbiz-issues-full-177.xml")) do |f|
REXML::Document.new(f)
end
ctr = 1
doc.root.each_element('//issue') do |issue|
assert_equal( ctr, issue.elements['issue_id'].text.to_i )

View file

@ -32,63 +32,62 @@ module REXMLTests
end
def test_sax2
f = File.new(fixture_path("documentation.xml"))
parser = Parsers::SAX2Parser.new( f )
# Listen to all events on the following elements
count = 0
blok = proc { |uri,localname,qname,attributes|
assert %w{ bugs todo }.include?(localname),
"Mismatched name; we got '#{qname}'\nArgs were:\n\tURI: #{uri}\n\tLOCALNAME: #{localname}\n\tQNAME: #{qname}\n\tATTRIBUTES: #{attributes.inspect}\n\tSELF=#{blok}"
count += 1
}
File.open(fixture_path("documentation.xml")) do |f|
parser = Parsers::SAX2Parser.new( f )
# Listen to all events on the following elements
count = 0
blok = proc { |uri,localname,qname,attributes|
assert %w{ bugs todo }.include?(localname),
"Mismatched name; we got '#{qname}'\nArgs were:\n\tURI: #{uri}\n\tLOCALNAME: #{localname}\n\tQNAME: #{qname}\n\tATTRIBUTES: #{attributes.inspect}\n\tSELF=#{blok}"
count += 1
}
start_document = 0
end_document = 0
parser.listen( :start_document ) { start_document += 1 }
parser.listen( :end_document ) { end_document += 1 }
parser.listen( :start_element, %w{ changelog bugs todo }, &blok )
# Listen to all events on the following elements. Synonymous with
# listen( :start_element, %w{ ... } )
parser.listen( %w{ changelog bugs todo }, &blok )
# Listen for all start element events
parser.listen( :start_element ) { |uri,localname,qname,attributes|
}
listener = MySAX2Listener.new
# Listen for all events
parser.listen( listener )
# Listen for all events on the given elements. Does not include children
# events. Regular expressions work as well!
parser.listen( %w{ /change/ bugs todo }, listener )
# Test the deafening method
blok = proc { |uri,localname,qname,attributes|
assert_fail "This listener should have been deafened!"
}
parser.listen( %w{ changelog }, &blok )
parser.deafen( &blok )
start_document = 0
end_document = 0
parser.listen( :start_document ) { start_document += 1 }
parser.listen( :end_document ) { end_document += 1 }
parser.listen( :start_element, %w{ changelog bugs todo }, &blok )
# Listen to all events on the following elements. Synonymous with
# listen( :start_element, %w{ ... } )
parser.listen( %w{ changelog bugs todo }, &blok )
# Listen for all start element events
parser.listen( :start_element ) { |uri,localname,qname,attributes|
}
listener = MySAX2Listener.new
# Listen for all events
parser.listen( listener )
# Listen for all events on the given elements. Does not include children
# events. Regular expressions work as well!
parser.listen( %w{ /change/ bugs todo }, listener )
# Test the deafening method
blok = proc { |uri,localname,qname,attributes|
assert_fail "This listener should have been deafened!"
}
parser.listen( %w{ changelog }, &blok )
parser.deafen( &blok )
tc = 0
parser.listen( :characters, %w{version} ) {|text|
assert(text=~/@ANT_VERSION@/, "version was '#{text}'")
tc += 1
}
tc = 0
parser.listen( :characters, %w{version} ) {|text|
assert(text=~/@ANT_VERSION@/, "version was '#{text}'")
tc += 1
}
begin
parser.parse
rescue => exception
if exception.kind_of? Test::Unit::AssertionFailedError
raise exception
begin
parser.parse
rescue => exception
if exception.kind_of? Test::Unit::AssertionFailedError
raise exception
end
puts $!
puts exception.backtrace
end
puts $!
puts exception.backtrace
assert_equal 2, count
assert_equal 1, tc
assert_equal 1, start_document
assert_equal 1, end_document
end
assert_equal 2, count
assert_equal 1, tc
assert_equal 1, start_document
assert_equal 1, end_document
end
# used by test_simple_doctype_listener
# submitted by Jeff Barczewski
class SimpleDoctypeListener
@ -223,21 +222,26 @@ module REXMLTests
def test_socket
require 'socket'
server = TCPServer.new('127.0.0.1', 0)
socket = TCPSocket.new('127.0.0.1', server.addr[1])
ok = false
session = server.accept
session << '<foo>'
parser = REXML::Parsers::SAX2Parser.new(socket)
Fiber.new do
parser.listen(:start_element) do
ok = true
Fiber.yield
TCPServer.open('127.0.0.1', 0) do |server|
TCPSocket.open('127.0.0.1', server.addr[1]) do |socket|
ok = false
session = server.accept
begin
session << '<foo>'
parser = REXML::Parsers::SAX2Parser.new(socket)
Fiber.new do
parser.listen(:start_element) do
ok = true
Fiber.yield
end
parser.parse
end.resume
assert(ok)
ensure
session.close
end
end
parser.parse
end.resume
assert(ok)
end
end
def test_char_ref_sax2()
@ -261,15 +265,17 @@ module REXMLTests
include REXML::SAX2Listener
end
def test_ticket_68
parser = REXML::Parsers::SAX2Parser.new(File.new(fixture_path('ticket_68.xml')))
parser.listen( Ticket68.new )
begin
parser.parse
rescue
p parser.source.position
p parser.source.current_line
puts $!.backtrace.join("\n")
flunk $!.message
File.open(fixture_path('ticket_68.xml')) do |f|
parser = REXML::Parsers::SAX2Parser.new(f)
parser.listen( Ticket68.new )
begin
parser.parse
rescue
p parser.source.position
p parser.source.current_line
puts $!.backtrace.join("\n")
flunk $!.message
end
end
end
end

View file

@ -130,7 +130,9 @@ module REXMLTests
assert_equal("b", XPath::first(c, "..").name)
assert_equal("a", XPath::first(@@doc, "a/b/..").name)
doc = REXML::Document.new(File.new(fixture_path("project.xml")))
doc = File.open(fixture_path("project.xml")) do |f|
REXML::Document.new(f)
end
c = each_test(doc.root, "./Description" ) { |child|
assert_equal("Description",child.name)
}
@ -213,11 +215,11 @@ module REXMLTests
xmlsource = fixture_path("testsrc.xml")
xpathtests = fixture_path("xp.tst")
doc = REXML::Document.new(File.new(xmlsource))
doc = File.open(xmlsource) {|f| REXML::Document.new(f) }
#results = ""
results = REXML::Document.new
results.add_element "test-results"
for line in File.new(xpathtests)
File.foreach(xpathtests) do |line|
line.strip!
begin
doc.root
@ -315,7 +317,7 @@ module REXMLTests
end
def test_lang
doc = Document.new(File.new(fixture_path("lang0.xml")))
doc = File.open(fixture_path("lang0.xml")) {|f| Document.new(f) }
#puts IO.read( "test/lang.xml" )
#puts XPath.match( doc, "//language/*" ).size
@ -936,10 +938,14 @@ EOF
def test_ticket_43
#url = http://news.search.yahoo.com/news/rss?p=market&ei=UTF-8&fl=0&x=wrt
sum = Document.new(File.new(fixture_path("yahoo.xml"))).elements.to_a("//item").size
sum = File.open(fixture_path("yahoo.xml")) do |f|
Document.new(f).elements.to_a("//item").size
end
assert_equal( 10, sum )
text = Document.new(File.new(fixture_path("yahoo.xml"))).elements.to_a(%Q{//title[contains(text(), "'")]}).collect{|e| e.text}.join
text = File.open(fixture_path("yahoo.xml")) do |f|
Document.new(f).elements.to_a(%Q{//title[contains(text(), "'")]}).collect{|e| e.text}.join
end
assert_equal( "Broward labor market's a solid performer (Miami Herald)", text )
end
@ -997,14 +1003,16 @@ EOF
end
def test_ticket_61_text
file = File.open(fixture_path("ticket_61.xml"))
doc = REXML::Document.new file
doc = File.open(fixture_path("ticket_61.xml")) do |file|
REXML::Document.new file
end
ticket_61_fixture( doc, "//div[text()='Add' and @class='ButtonText']" )
end
def test_ticket_61_contains
file = File.open(fixture_path("ticket_61.xml"))
doc = REXML::Document.new file
doc = File.open(fixture_path("ticket_61.xml")) do |file|
REXML::Document.new file
end
ticket_61_fixture( doc, "//div[contains(.,'Add') and @class='ButtonText']" )
end