mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/rexml/encoding.rb (REXML::Encoding#encoding=): store @encoding
a String which means the name of the encoding. this partially revert r29646. * lib/rexml/document.rb: follow above. * lib/rexml/output.rb: ditto. * lib/rexml/parsers/baseparser.rb: ditto. * lib/rexml/source.rb: ditto. * lib/rexml/xmldecl.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31008 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cddcffb8f9
commit
f25ff846f6
11 changed files with 114 additions and 147 deletions
16
ChangeLog
16
ChangeLog
|
@ -1,3 +1,19 @@
|
|||
Thu Mar 3 00:36:29 2011 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* lib/rexml/encoding.rb (REXML::Encoding#encoding=): store @encoding
|
||||
a String which means the name of the encoding.
|
||||
this partially revert r29646.
|
||||
|
||||
* lib/rexml/document.rb: follow above.
|
||||
|
||||
* lib/rexml/output.rb: ditto.
|
||||
|
||||
* lib/rexml/parsers/baseparser.rb: ditto.
|
||||
|
||||
* lib/rexml/source.rb: ditto.
|
||||
|
||||
* lib/rexml/xmldecl.rb: ditto.
|
||||
|
||||
Wed Mar 2 23:19:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* string.c (str_byte_substr): return nil for negative length.
|
||||
|
|
|
@ -184,7 +184,7 @@ module REXML
|
|||
# that IE's limited abilities can handle. This hack inserts a space
|
||||
# before the /> on empty tags. Defaults to false
|
||||
def write( output=$stdout, indent=-1, transitive=false, ie_hack=false )
|
||||
if xml_decl.encoding != ::Encoding::UTF_8 && !output.kind_of?(Output)
|
||||
if xml_decl.encoding != 'UTF-8' && !output.kind_of?(Output)
|
||||
output = Output.new( output, xml_decl.encoding )
|
||||
end
|
||||
formatter = if indent > -1
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
module REXML
|
||||
module Encoding
|
||||
# ID ---> Encoding object
|
||||
# ID ---> Encoding name
|
||||
attr_reader :encoding
|
||||
def encoding=(encoding)
|
||||
encoding = encoding.name if encoding.is_a?(Encoding)
|
||||
if encoding.is_a?(String)
|
||||
original_encoding = encoding
|
||||
encoding = find_encoding(encoding)
|
||||
|
@ -11,35 +12,25 @@ module REXML
|
|||
end
|
||||
end
|
||||
return false if defined?(@encoding) and encoding == @encoding
|
||||
if encoding and encoding != ::Encoding::UTF_8
|
||||
@encoding = encoding
|
||||
if encoding
|
||||
@encoding = encoding.upcase
|
||||
else
|
||||
@encoding = ::Encoding::UTF_8
|
||||
@encoding = 'UTF-8'
|
||||
end
|
||||
true
|
||||
end
|
||||
|
||||
def check_encoding(xml)
|
||||
# We have to recognize UTF-16, LSB UTF-16, and UTF-8
|
||||
# We have to recognize UTF-16BE, UTF-16LE, and UTF-8
|
||||
if xml[0, 2] == "\xfe\xff"
|
||||
xml[0, 2] = ""
|
||||
::Encoding::UTF_16BE
|
||||
return 'UTF-16BE'
|
||||
elsif xml[0, 2] == "\xff\xfe"
|
||||
xml[0, 2] = ""
|
||||
::Encoding::UTF_16LE
|
||||
else
|
||||
if /\A\s*<\?xml\s+version\s*=\s*(['"]).*?\1
|
||||
\s+encoding\s*=\s*(["'])(.*?)\2/mx =~ xml
|
||||
encoding_name = $3
|
||||
if /\Autf-16\z/i =~ encoding_name
|
||||
::Encoding::UTF_16BE
|
||||
else
|
||||
find_encoding(encoding_name)
|
||||
end
|
||||
else
|
||||
::Encoding::UTF_8
|
||||
end
|
||||
return 'UTF-16LE'
|
||||
end
|
||||
xml =~ /^\s*<\?xml\s+version\s*=\s*(['"]).*?\1\s+encoding\s*=\s*(["'])(.*?)\2/m
|
||||
return $3 ? $3.upcase : 'UTF-8'
|
||||
end
|
||||
|
||||
def encode(string)
|
||||
|
@ -53,14 +44,19 @@ module REXML
|
|||
private
|
||||
def find_encoding(name)
|
||||
case name
|
||||
when "UTF-16"
|
||||
name = "UTF-16BE"
|
||||
when /\Ashift-jis\z/i
|
||||
name = "Shift_JIS"
|
||||
return "SHIFT_JIS"
|
||||
when /\ACP-(\d+)\z/
|
||||
name = "CP#{$1}"
|
||||
when /\AUTF-8\z/i
|
||||
return name
|
||||
end
|
||||
::Encoding.find(name)
|
||||
begin
|
||||
::Encoding::Converter.search_convpath(name, 'UTF-8')
|
||||
rescue ::Encoding::ConverterNotFoundError
|
||||
return nil
|
||||
end
|
||||
name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -22,7 +22,7 @@ module REXML
|
|||
case node
|
||||
|
||||
when Document
|
||||
if node.xml_decl.encoding != ::Encoding::UTF_8 && !output.kind_of?(Output)
|
||||
if node.xml_decl.encoding != 'UTF-8' && !output.kind_of?(Output)
|
||||
output = Output.new( output, node.xml_decl.encoding )
|
||||
end
|
||||
write_document( node, output )
|
||||
|
|
|
@ -10,7 +10,7 @@ module REXML
|
|||
@output = real_IO
|
||||
self.encoding = encd
|
||||
|
||||
@to_utf = (@encoding != ::Encoding::UTF_8)
|
||||
@to_utf = encd != 'UTF-8'
|
||||
end
|
||||
|
||||
def <<( content )
|
||||
|
|
|
@ -248,7 +248,7 @@ module REXML
|
|||
@document_status = :after_doctype
|
||||
@source.read if @source.buffer.size<2
|
||||
md = @source.match(/\s*/um, true)
|
||||
if @source.encoding == ::Encoding::UTF_8
|
||||
if @source.encoding == "UTF-8"
|
||||
@source.buffer.force_encoding(::Encoding::UTF_8)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -54,14 +54,12 @@ module REXML
|
|||
def encoding=(enc)
|
||||
return unless super
|
||||
@line_break = encode( '>' )
|
||||
if @encoding != ::Encoding::UTF_8
|
||||
if @encoding != 'UTF-8'
|
||||
@buffer = decode(@buffer)
|
||||
@to_utf = true
|
||||
else
|
||||
@to_utf = false
|
||||
if @buffer.respond_to? :force_encoding
|
||||
@buffer.force_encoding ::Encoding::UTF_8
|
||||
end
|
||||
@buffer.force_encoding ::Encoding::UTF_8
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -109,20 +109,9 @@ module REXML
|
|||
end
|
||||
|
||||
private
|
||||
def normalized_encoding_name(_encoding)
|
||||
if _encoding == ::Encoding::UTF_16BE
|
||||
"UTF-16"
|
||||
else
|
||||
return _encoding.name
|
||||
end
|
||||
end
|
||||
|
||||
def content(enc)
|
||||
rv = "version='#@version'"
|
||||
if @writeencoding || enc.to_s !~ /\Autf-8\z/i
|
||||
encoding_name = normalized_encoding_name(enc)
|
||||
rv << " encoding='#{encoding_name}'"
|
||||
end
|
||||
rv << " encoding='#{enc}'" if @writeencoding || enc !~ /utf-8/i
|
||||
rv << " standalone='#@standalone'" if @standalone
|
||||
rv
|
||||
end
|
||||
|
|
|
@ -241,7 +241,7 @@ DELIMITER
|
|||
end
|
||||
|
||||
doc = REXML::Document.new(source_iso)
|
||||
assert_equal('ISO-8859-1', doc.xml_decl.encoding.to_s)
|
||||
assert_equal('ISO-8859-1', doc.xml_decl.encoding)
|
||||
assert_equal(koln_utf, doc.root.text)
|
||||
doc.write(out="")
|
||||
assert_equal(source_iso, out )
|
||||
|
@ -255,23 +255,21 @@ DELIMITER
|
|||
<position><aktuell datum="01-10-11">Technik</aktuell></position>
|
||||
<hauptspalte>
|
||||
<headline>Technik</headline>
|
||||
Die Technik ist das Rückgrat der meisten Geschäftsprozesse bei Home of the Brave. Deshalb sollen hier alle relevanten technischen Abläufe, Daten und Einrichtungen beschrieben werden, damit jeder im Bedarfsfall die nötigen Informationen, Anweisungen und Verhaltensempfehlungen nachlesen und/oder abrufen kann.
|
||||
Die Technik ist das R\xFCckgrat der meisten Gesch\xFCftsprozesse bei Home of the Brave. Deshalb sollen hier alle relevanten technischen Abl\xFCufe, Daten und Einrichtungen beschrieben werden, damit jeder im Bedarfsfall die n\xFCtigen Informationen, Anweisungen und Verhaltensempfehlungen nachlesen und/oder abrufen kann.
|
||||
</hauptspalte>
|
||||
<nebenspalte>
|
||||
<link ziel="Flash/">Flash</link><umbruch/>
|
||||
Nützliches von Flashern für Flasher.<umbruch/>
|
||||
N\xFCtzliches von Flashern f\xFCr Flasher.<umbruch/>
|
||||
<link neu="ja" ziel="Cvs/">CVS-FAQ</link><umbruch/>
|
||||
FAQ zur Benutzung von CVS bei HOB
|
||||
</nebenspalte>
|
||||
</intranet>
|
||||
EOF
|
||||
tn = XPath.first(doc, "//nebenspalte/text()[2]")
|
||||
expected_iso = "Nützliches von Flashern für Flasher."
|
||||
expected_utf = expected_iso.unpack('C*').pack('U*')
|
||||
if expected_utf.respond_to? :encode
|
||||
expected_iso.force_encoding("iso-8859-1")
|
||||
expected_utf.force_encoding(::Encoding::UTF_8)
|
||||
end
|
||||
expected_iso = "N\xFCtzliches von Flashern f\xFCr Flasher."
|
||||
expected_utf = expected_iso.unpack('C*').pack('U*')
|
||||
expected_iso.force_encoding(::Encoding::ISO_8859_1)
|
||||
expected_utf.force_encoding(::Encoding::UTF_8)
|
||||
assert_equal(expected_utf, tn.to_s.strip)
|
||||
f = REXML::Formatters::Default.new
|
||||
f.write( tn, Output.new(o = "", "ISO-8859-1") )
|
||||
|
|
|
@ -20,7 +20,7 @@ class Tester < Test::Unit::TestCase
|
|||
<?xsl stylesheet="blah.xsl"?>
|
||||
<!-- The first line tests the XMLDecl, the second tests PI.
|
||||
The next line tests DocType. This line tests comments. -->
|
||||
<!DOCTYPE xsa PUBLIC
|
||||
<!DOCTYPE xsa PUBLIC
|
||||
"-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML"
|
||||
"http://www.garshol.priv.no/download/xsa/xsa.dtd">
|
||||
|
||||
|
@ -80,7 +80,7 @@ class Tester < Test::Unit::TestCase
|
|||
# This because of a reported bug in attribute handling in 1.0a8
|
||||
source = '<a att="A">blah</a>'
|
||||
doc = Document.new source
|
||||
doc.elements.each do |a|
|
||||
doc.elements.each do |a|
|
||||
a.attributes['att'] << 'B'
|
||||
assert_equal "AB", a.attributes['att']
|
||||
a.attributes['att'] = 'C'
|
||||
|
@ -155,11 +155,11 @@ class Tester < Test::Unit::TestCase
|
|||
assert_equal 3, doc.root.size
|
||||
assert_equal 1, doc.root.elements.size
|
||||
|
||||
text = " This is text
|
||||
text = " This is text
|
||||
with a lot of whitespace "
|
||||
source = "<a>#{text}<b>#{text}</b><c>#{text}</c>#{text}</a>"
|
||||
|
||||
doc = Document.new( source, {
|
||||
doc = Document.new( source, {
|
||||
:respect_whitespace => %w{ a c }
|
||||
} )
|
||||
assert_equal text, doc.elements["//c"].text
|
||||
|
@ -207,8 +207,8 @@ class Tester < Test::Unit::TestCase
|
|||
doc.write(test="")
|
||||
assert_equal(correct, test)
|
||||
|
||||
multi_line_source = '<!DOCTYPE xsa PUBLIC
|
||||
"-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML"
|
||||
multi_line_source = '<!DOCTYPE xsa PUBLIC
|
||||
"-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML"
|
||||
"http://www.garshol.priv.no/download/xsa/xsa.dtd">
|
||||
<a/>'
|
||||
d = Document.new( multi_line_source )
|
||||
|
@ -217,8 +217,8 @@ class Tester < Test::Unit::TestCase
|
|||
doc.write(test="")
|
||||
assert_equal(correct, test)
|
||||
|
||||
odd_space_source = ' <!DOCTYPE
|
||||
xsa PUBLIC "-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML"
|
||||
odd_space_source = ' <!DOCTYPE
|
||||
xsa PUBLIC "-//LM Garshol//DTD XML Software Autoupdate 1.0//EN//XML"
|
||||
"http://www.garshol.priv.no/download/xsa/xsa.dtd"> <a/>'
|
||||
d = Document.new( odd_space_source )
|
||||
dt = d.doctype
|
||||
|
@ -230,34 +230,12 @@ class Tester < Test::Unit::TestCase
|
|||
doc = Document.new(docin)
|
||||
doc.write(test="")
|
||||
assert_equal(31, doc.doctype.size)
|
||||
|
||||
# Here's a little ditty from Tobias...
|
||||
src = <<-EOL
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
|
||||
"http://www.w3.org/TR/SVG/DTD/svg10.dtd"
|
||||
[
|
||||
<!-- <!ENTITY % fast-slow "0 0 .5 1">-->
|
||||
<!--<!ENTITY % slow-fast ".5 0 1 1">-->
|
||||
<!ENTITY hover_ani
|
||||
'<animateTransform attributeName="transform"
|
||||
type="scale" restart="whenNotActive" values="1;0.96"
|
||||
dur="0.5s" calcMode="spline" keySplines="0 0 .5 1"
|
||||
fill="freeze" begin="mouseover"/>
|
||||
<animateTransform attributeName="transform"
|
||||
type="scale" restart="whenNotActive" values="0.96;1"
|
||||
dur="0.5s" calcMode="spline" keySplines=".5 0 1 1"
|
||||
fill="freeze" begin="mouseover+0.5s"/>'
|
||||
>
|
||||
]
|
||||
> <a/>
|
||||
EOL
|
||||
end
|
||||
|
||||
def test_document
|
||||
# Testing cloning
|
||||
source = "<element/>"
|
||||
doc = Document.new source
|
||||
doc2 = Document.new doc
|
||||
|
||||
# Testing Root
|
||||
assert_equal doc.root.name.to_s, "element"
|
||||
|
@ -266,7 +244,7 @@ class Tester < Test::Unit::TestCase
|
|||
source = @xsa_source
|
||||
doc = Document.new source
|
||||
assert_instance_of XMLDecl, doc.xml_decl
|
||||
assert_instance_of DocType, doc.doctype
|
||||
assert_instance_of DocType, doc.doctype
|
||||
assert_equal doc.version, "1.0"
|
||||
|
||||
source = File.new(fixture_path("dash.xml"))
|
||||
|
@ -383,7 +361,7 @@ class Tester < Test::Unit::TestCase
|
|||
assert_equal(string, text.to_s)
|
||||
|
||||
string2 = "<a>#{string}</a>"
|
||||
doc = Document.new( string2, {
|
||||
doc = Document.new( string2, {
|
||||
:raw => %w{ a b }
|
||||
} )
|
||||
f.write(doc,out="")
|
||||
|
@ -463,7 +441,7 @@ class Tester < Test::Unit::TestCase
|
|||
assert_equal "Datasets", child.name
|
||||
}
|
||||
each_test(doc, "Project/Datasets/link", 2 )
|
||||
each_test(doc.root, "/Project/Description", 1) {|child|
|
||||
each_test(doc.root, "/Project/Description", 1) {|child|
|
||||
assert_equal "Description", child.name
|
||||
}
|
||||
each_test(doc.root, "./Description",1 ) { |child|
|
||||
|
@ -642,11 +620,10 @@ class Tester < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_line
|
||||
doc = Document.new File.new(fixture_path("bad.xml"))
|
||||
Document.new File.new(fixture_path("bad.xml"))
|
||||
assert_fail "There should have been an error"
|
||||
rescue Exception
|
||||
# We should get here
|
||||
er = $!
|
||||
assert($!.line == 5, "Should have been an error on line 5, "+
|
||||
"but was reported as being on line #{$!.line}" )
|
||||
end
|
||||
|
@ -664,13 +641,11 @@ class Tester < Test::Unit::TestCase
|
|||
def test_exception
|
||||
source = SourceFactory.create_from "<a/>"
|
||||
p = ParseException.new( "dummy message", source )
|
||||
s = p.to_s
|
||||
begin
|
||||
raise "dummy"
|
||||
rescue Exception
|
||||
p.continued_exception = $!
|
||||
end
|
||||
s = p.to_s
|
||||
end
|
||||
|
||||
def test_bad_content
|
||||
|
@ -682,7 +657,7 @@ class Tester < Test::Unit::TestCase
|
|||
assert_equal "content>content", tree_gt.elements[1].text
|
||||
# This isn't
|
||||
begin
|
||||
tree_lt = Document.new in_lt
|
||||
Document.new in_lt
|
||||
assert_fail "Should have gotten a parse error"
|
||||
rescue ParseException
|
||||
end
|
||||
|
@ -766,7 +741,7 @@ class Tester < Test::Unit::TestCase
|
|||
doc.root.each_element_with_text( nil, 0, 'd', &block )
|
||||
assert_equal 0, arry.size
|
||||
end
|
||||
|
||||
|
||||
def test_element_parse_stream
|
||||
s = Source.new( "<a>some text</a>" )
|
||||
l = Listener.new
|
||||
|
@ -810,7 +785,7 @@ EOL
|
|||
assert_equal('eeü'.force_encoding("UTF-8"), a.root.text)
|
||||
end
|
||||
|
||||
def test_element_decl
|
||||
def test_element_decl
|
||||
element_decl = Source.new("<!DOCTYPE foo [
|
||||
<!ELEMENT bar (#PCDATA)>
|
||||
]>")
|
||||
|
@ -824,7 +799,7 @@ EOL
|
|||
<!DOCTYPE blah [
|
||||
<!ATTLIST blah
|
||||
xmlns CDATA "foo">
|
||||
<!ATTLIST a
|
||||
<!ATTLIST a
|
||||
bar CDATA "gobble"
|
||||
xmlns:one CDATA "two"
|
||||
>
|
||||
|
@ -855,17 +830,15 @@ EOL
|
|||
|
||||
def test_attlist_write
|
||||
file=File.new(fixture_path("foo.xml"))
|
||||
doc=Document.new file
|
||||
root = doc.root
|
||||
|
||||
doc=Document.new file
|
||||
out = ''
|
||||
doc.write(out)
|
||||
doc.write(out)
|
||||
end
|
||||
|
||||
def test_more_namespaces
|
||||
assert_raise( REXML::UndefinedNamespaceException,
|
||||
assert_raise( REXML::UndefinedNamespaceException,
|
||||
%Q{Should have gotten an Undefined Namespace error} ) {
|
||||
doc1 = Document.new("<r><p><n:c/></p></r>")
|
||||
Document.new("<r><p><n:c/></p></r>")
|
||||
}
|
||||
doc2 = Document.new("<r xmlns:n='1'><p><n:c/></p></r>")
|
||||
es = XPath.match(doc2, '//c')
|
||||
|
@ -916,7 +889,7 @@ EOL
|
|||
end
|
||||
|
||||
def test_oses_with_bad_EOLs
|
||||
d = Document.new("\n\n\n<?xml version='1.0'?>\n\n\n<a/>\n\n")
|
||||
Document.new("\n\n\n<?xml version='1.0'?>\n\n\n<a/>\n\n")
|
||||
end
|
||||
|
||||
# Contributed (with patch to fix bug) by Kouhei
|
||||
|
@ -955,25 +928,25 @@ EOL
|
|||
end
|
||||
|
||||
def test_accents
|
||||
docs = [
|
||||
docs = [
|
||||
%Q{<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<gnuPod>
|
||||
<files>
|
||||
<file id="57" artist="Coralie Cl\357\277\275ent" />
|
||||
</files>
|
||||
</gnuPod>},
|
||||
</gnuPod>},
|
||||
'<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<gnuPod>
|
||||
<files>
|
||||
<file id="71" album="Astrakan Caf" />
|
||||
</files>
|
||||
</gnuPod>',
|
||||
</gnuPod>',
|
||||
%Q{<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<gnuPod>
|
||||
<files>
|
||||
<file id="71" album="Astrakan Caf\357\277\275eria" />
|
||||
</files>
|
||||
</gnuPod>},
|
||||
</gnuPod>},
|
||||
%Q{<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<gnuPod>
|
||||
<files>
|
||||
|
@ -1024,7 +997,6 @@ EOL
|
|||
document.write(s)
|
||||
end
|
||||
|
||||
|
||||
def test_write_cdata
|
||||
src = "<a>A</a>"
|
||||
doc = REXML::Document.new( src )
|
||||
|
@ -1045,15 +1017,15 @@ EOL
|
|||
<x:b x:n="foo"/>
|
||||
</a>
|
||||
EOL
|
||||
d = REXML::Document.new( source )
|
||||
d = Document.new( source )
|
||||
assert_equal( 'foo', REXML::XPath.first(d.root, "//x:b/@x:n").value )
|
||||
assert_equal( nil, REXML::XPath.first(d.root, "//x:b/@x:n", {}))
|
||||
end
|
||||
|
||||
def test_null_element_name
|
||||
a = REXML::Document.new
|
||||
a = REXML::Document.new
|
||||
assert_raise( RuntimeError ) {
|
||||
a.add_element( nil )
|
||||
a.add_element( nil )
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -1095,22 +1067,22 @@ EOL
|
|||
# Ticket #44
|
||||
t = REXML::Text.new( "&", false, nil, true )
|
||||
assert_equal( "&", t.to_s )
|
||||
|
||||
|
||||
t = REXML::Text.new("&", false, false)
|
||||
assert_equal( "&amp;", t.to_s )
|
||||
end
|
||||
|
||||
def test_to_xpath
|
||||
doc = REXML::Document.new( %q{<tag1>
|
||||
<tag2 name="tag2"/>
|
||||
<tag2 name="tag2"/>
|
||||
</tag1>})
|
||||
doc = REXML::Document.new( %q{<tag1>
|
||||
<tag2 name="tag2"/>
|
||||
<tag2 name="tag2"/>
|
||||
</tag1>})
|
||||
names = %w{ /tag1/tag2[1] /tag1/tag2[2] }
|
||||
doc.root.elements.each_with_index {|el, i|
|
||||
doc.root.elements.each_with_index {|el, i|
|
||||
assert_equal( names[i], el.xpath )
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
def test_transitive
|
||||
doc = REXML::Document.new( "<a/>")
|
||||
s = ""
|
||||
|
@ -1181,19 +1153,19 @@ EOL
|
|||
doc = REXML::Document.new
|
||||
doc << REXML::XMLDecl.default
|
||||
doc << REXML::Element.new("a")
|
||||
|
||||
|
||||
str = ""
|
||||
doc.write(str)
|
||||
|
||||
|
||||
assert_equal("<a/>", str)
|
||||
|
||||
doc = REXML::Document.new
|
||||
doc << REXML::XMLDecl.new("1.0", "UTF-8")
|
||||
doc << REXML::Element.new("a")
|
||||
|
||||
|
||||
str = ""
|
||||
doc.write(str)
|
||||
|
||||
|
||||
assert_equal("<?xml version='1.0' encoding='UTF-8'?><a/>", str)
|
||||
end
|
||||
|
||||
|
@ -1212,7 +1184,7 @@ EOL
|
|||
|
||||
def test_ticket_52
|
||||
source = "<!-- this is a single line comment -->"
|
||||
d = REXML::Document.new(source)
|
||||
d = REXML::Document.new(source)
|
||||
d.write(k="")
|
||||
assert_equal( source, k )
|
||||
|
||||
|
@ -1233,17 +1205,17 @@ EOL
|
|||
def test_ticket_21
|
||||
src = "<foo bar=value/>"
|
||||
assert_raise( ParseException, "invalid XML should be caught" ) {
|
||||
d = REXML::Document.new(src)
|
||||
Document.new(src)
|
||||
}
|
||||
begin
|
||||
d = REXML::Document.new(src)
|
||||
Document.new(src)
|
||||
rescue
|
||||
assert_match( /missing attribute quote/, $!.message )
|
||||
end
|
||||
end
|
||||
|
||||
def test_ticket_63
|
||||
d = REXML::Document.new(File.new(fixture_path("t63-1.xml")))
|
||||
Document.new(File.new(fixture_path("t63-1.xml")))
|
||||
end
|
||||
|
||||
def test_ticket_75
|
||||
|
@ -1256,7 +1228,7 @@ EOL
|
|||
#- rexml sanity check (bugs in ruby 1.8.4, ruby 1.8.6)
|
||||
xmldoc = Document.new("<test/>")
|
||||
xmldoc << XMLDecl.new(XMLDecl::DEFAULT_VERSION, "UTF-8")
|
||||
content = ['61c3a927223c3e26'].pack("H*")
|
||||
content = ['61c3a927223c3e26'].pack("H*")
|
||||
content.force_encoding('UTF-8') if content.respond_to?(:force_encoding)
|
||||
#- is some UTF-8 text but just to make sure my editor won't magically convert..
|
||||
xmldoc.root.add_attribute('attr', content)
|
||||
|
@ -1272,14 +1244,14 @@ EOL
|
|||
|
||||
assert_equal( sanity1, sanity2 )
|
||||
end
|
||||
|
||||
|
||||
def test_ticket_88
|
||||
doc = REXML::Document.new("<?xml version=\"1.0\" encoding=\"shift_jis\"?>")
|
||||
assert_equal("<?xml version='1.0' encoding='Shift_JIS'?>", doc.to_s)
|
||||
assert_equal("<?xml version='1.0' encoding='SHIFT_JIS'?>", doc.to_s)
|
||||
doc = REXML::Document.new("<?xml version = \"1.0\" encoding = \"shift_jis\"?>")
|
||||
assert_equal("<?xml version='1.0' encoding='Shift_JIS'?>", doc.to_s)
|
||||
assert_equal("<?xml version='1.0' encoding='SHIFT_JIS'?>", doc.to_s)
|
||||
end
|
||||
|
||||
|
||||
def test_ticket_85
|
||||
xml = <<ENDXML
|
||||
<foo>
|
||||
|
@ -1295,8 +1267,6 @@ ENDXML
|
|||
</bar>
|
||||
</foo>"
|
||||
|
||||
zml = "<foo><bar><bob name='jimmy'/></bar></foo>"
|
||||
|
||||
# The pretty printer ignores all whitespace, anyway so output1 == output2
|
||||
f = REXML::Formatters::Pretty.new( 2 )
|
||||
d = Document.new( xml, :ignore_whitespace_nodes=>:all )
|
||||
|
@ -1311,7 +1281,7 @@ ENDXML
|
|||
# The base case.
|
||||
d = Document.new(yml)
|
||||
f.write( d, output3="" )
|
||||
|
||||
|
||||
assert_equal( output3.strip, output2.strip )
|
||||
|
||||
d = Document.new(yml)
|
||||
|
@ -1355,10 +1325,10 @@ ENDXML
|
|||
end
|
||||
|
||||
def test_ticket_14
|
||||
# Per .2.5 Node Tests of XPath spec
|
||||
assert_raise( REXML::UndefinedNamespaceException,
|
||||
# Per .2.5 Node Tests of XPath spec
|
||||
assert_raise( REXML::UndefinedNamespaceException,
|
||||
%Q{Should have gotten an Undefined Namespace error} ) {
|
||||
d = Document.new("<a><n:b/></a>")
|
||||
Document.new("<a><n:b/></a>")
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -1395,7 +1365,7 @@ ENDXML
|
|||
doc.add_element(bean_element)
|
||||
|
||||
REXML::Formatters::Pretty.new(3).write( doc, out = "" )
|
||||
|
||||
|
||||
assert_equal "<bean>\n <prop key='filter'>\n (&#38;(|(memberof=CN=somegroupabcdefgh,OU=OUsucks,DC=hookemhorns,DC=com)(mail=*someco.com))(acct=%u)(!(extraparameter:2.2.222.222222.2.2.222:=2)))\n </prop>\n</bean>", out
|
||||
end
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ class EncodingTester < Test::Unit::TestCase
|
|||
def test_encoded_in_encoded_out
|
||||
doc = Document.new( @encoded )
|
||||
doc.write( out="" )
|
||||
out.force_encoding('binary') if out.respond_to? :force_encoding
|
||||
out.force_encoding(::Encoding::ASCII_8BIT)
|
||||
assert_equal( @encoded, out )
|
||||
end
|
||||
|
||||
|
@ -26,12 +26,12 @@ class EncodingTester < Test::Unit::TestCase
|
|||
def test_encoded_in_change_out
|
||||
doc = Document.new( @encoded )
|
||||
doc.xml_decl.encoding = "UTF-8"
|
||||
assert_equal( ::Encoding::UTF_8, doc.encoding )
|
||||
assert_equal("UTF-8", doc.encoding)
|
||||
REXML::Formatters::Default.new.write( doc.root, out="" )
|
||||
out.force_encoding('binary') if out.respond_to? :force_encoding
|
||||
out.force_encoding(::Encoding::ASCII_8BIT)
|
||||
assert_equal( @not_encoded, out )
|
||||
char = XPath.first( doc, "/a/b/text()" ).to_s
|
||||
char.force_encoding('binary') if char.respond_to? :force_encoding
|
||||
char.force_encoding(::Encoding::ASCII_8BIT)
|
||||
assert_equal( "ĉ", char )
|
||||
end
|
||||
|
||||
|
@ -39,7 +39,7 @@ class EncodingTester < Test::Unit::TestCase
|
|||
def test_encoded_in_different_out
|
||||
doc = Document.new( @encoded )
|
||||
REXML::Formatters::Default.new.write( doc.root, Output.new( out="", "UTF-8" ) )
|
||||
out.force_encoding('binary') if out.respond_to? :force_encoding
|
||||
out.force_encoding(::Encoding::ASCII_8BIT)
|
||||
assert_equal( @not_encoded, out )
|
||||
end
|
||||
|
||||
|
@ -47,9 +47,9 @@ class EncodingTester < Test::Unit::TestCase
|
|||
def test_in_change_out
|
||||
doc = Document.new( @not_encoded )
|
||||
doc.xml_decl.encoding = "ISO-8859-3"
|
||||
assert_equal( ::Encoding::ISO_8859_3, doc.encoding )
|
||||
assert_equal("ISO-8859-3", doc.encoding)
|
||||
doc.write( out="" )
|
||||
out.force_encoding('binary') if out.respond_to? :force_encoding
|
||||
out.force_encoding(::Encoding::ASCII_8BIT)
|
||||
assert_equal( @encoded, out )
|
||||
end
|
||||
|
||||
|
@ -57,7 +57,7 @@ class EncodingTester < Test::Unit::TestCase
|
|||
def test_in_different_out
|
||||
doc = Document.new( @not_encoded )
|
||||
doc.write( Output.new( out="", "ISO-8859-3" ) )
|
||||
out.force_encoding('binary') if out.respond_to? :force_encoding
|
||||
out.force_encoding(::Encoding::ASCII_8BIT)
|
||||
assert_equal( @encoded, out )
|
||||
end
|
||||
|
||||
|
@ -66,10 +66,10 @@ class EncodingTester < Test::Unit::TestCase
|
|||
def test_in_different_access
|
||||
doc = Document.new <<-EOL
|
||||
<?xml version='1.0' encoding='ISO-8859-1'?>
|
||||
<a a="ÿ">ÿ</a>
|
||||
<a a="\xFF">\xFF</a>
|
||||
EOL
|
||||
expect = "\303\277"
|
||||
expect.force_encoding('UTF-8') if expect.respond_to? :force_encoding
|
||||
expect.force_encoding(::Encoding::UTF_8)
|
||||
assert_equal( expect, doc.elements['a'].attributes['a'] )
|
||||
assert_equal( expect, doc.elements['a'].text )
|
||||
end
|
||||
|
@ -86,7 +86,7 @@ class EncodingTester < Test::Unit::TestCase
|
|||
|
||||
def test_ticket_110
|
||||
utf16 = REXML::Document.new(File.new(fixture_path("ticket_110_utf16.xml")))
|
||||
assert_equal( ::Encoding::UTF_16BE, utf16.encoding )
|
||||
assert_equal(utf16.encoding, "UTF-16")
|
||||
assert( utf16[0].kind_of?(REXML::XMLDecl))
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue