Skip to content

Commit

Permalink
Merge pull request rails#1351 from arunagw/3-0-stable-jruby-jdom-fixes
Browse files Browse the repository at this point in the history
3 0 stable jruby jdom fixes
  • Loading branch information
josevalim committed May 27, 2011
2 parents 179a8a4 + 4c330d6 commit 2ca0ae9
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 88 deletions.
12 changes: 6 additions & 6 deletions activesupport/lib/active_support/xml_mini/jdom.rb
Expand Up @@ -5,12 +5,12 @@

require 'active_support/core_ext/object/blank'

import javax.xml.parsers.DocumentBuilder unless defined? DocumentBuilder
import javax.xml.parsers.DocumentBuilderFactory unless defined? DocumentBuilderFactory
import java.io.StringReader unless defined? StringReader
import org.xml.sax.InputSource unless defined? InputSource
import org.xml.sax.Attributes unless defined? Attributes
import org.w3c.dom.Node unless defined? Node
java_import javax.xml.parsers.DocumentBuilder unless defined? DocumentBuilder
java_import javax.xml.parsers.DocumentBuilderFactory unless defined? DocumentBuilderFactory
java_import java.io.StringReader unless defined? StringReader
java_import org.xml.sax.InputSource unless defined? InputSource
java_import org.xml.sax.Attributes unless defined? Attributes
java_import org.w3c.dom.Node unless defined? Node

# = XmlMini JRuby JDOM implementation
module ActiveSupport
Expand Down
165 changes: 83 additions & 82 deletions activesupport/test/xml_mini/jdom_engine_test.rb
@@ -1,38 +1,39 @@
require 'abstract_unit'
require 'active_support/xml_mini'

if RUBY_PLATFORM =~ /java/
require 'abstract_unit'
require 'active_support/xml_mini'
require 'active_support/core_ext/hash/conversions'

class JDOMEngineTest < Test::Unit::TestCase
include ActiveSupport

def setup
@default_backend = XmlMini.backend
XmlMini.backend = 'JDOM'
end
class JDOMEngineTest < Test::Unit::TestCase
include ActiveSupport

def teardown
XmlMini.backend = @default_backend
end
def setup
@default_backend = XmlMini.backend
XmlMini.backend = 'JDOM'
end

# def test_file_from_xml
# hash = Hash.from_xml(<<-eoxml)
# <blog>
# <logo type="file" name="logo.png" content_type="image/png">
# </logo>
# </blog>
# eoxml
# assert hash.has_key?('blog')
# assert hash['blog'].has_key?('logo')
#
# file = hash['blog']['logo']
# assert_equal 'logo.png', file.original_filename
# assert_equal 'image/png', file.content_type
# end

def test_exception_thrown_on_expansion_attack
assert_raise NativeException do
attack_xml = <<-EOT
def teardown
XmlMini.backend = @default_backend
end

# def test_file_from_xml
# hash = Hash.from_xml(<<-eoxml)
# <blog>
# <logo type="file" name="logo.png" content_type="image/png">
# </logo>
# </blog>
# eoxml
# assert hash.has_key?('blog')
# assert hash['blog'].has_key?('logo')
#
# file = hash['blog']['logo']
# assert_equal 'logo.png', file.original_filename
# assert_equal 'image/png', file.content_type
# end

def test_exception_thrown_on_expansion_attack
assert_raise NativeException do
attack_xml = <<-EOT
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE member [
<!ENTITY a "&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;">
Expand All @@ -46,107 +47,107 @@ def test_exception_thrown_on_expansion_attack
<member>
&a;
</member>
EOT
Hash.from_xml(attack_xml)
EOT
Hash.from_xml(attack_xml)
end
end
end

def test_setting_JDOM_as_backend
XmlMini.backend = 'JDOM'
assert_equal XmlMini_JDOM, XmlMini.backend
end
def test_setting_JDOM_as_backend
XmlMini.backend = 'JDOM'
assert_equal XmlMini_JDOM, XmlMini.backend
end

def test_blank_returns_empty_hash
assert_equal({}, XmlMini.parse(nil))
assert_equal({}, XmlMini.parse(''))
end
def test_blank_returns_empty_hash
assert_equal({}, XmlMini.parse(nil))
assert_equal({}, XmlMini.parse(''))
end

def test_array_type_makes_an_array
assert_equal_rexml(<<-eoxml)
def test_array_type_makes_an_array
assert_equal_rexml(<<-eoxml)
<blog>
<posts type="array">
<post>a post</post>
<post>another post</post>
</posts>
</blog>
eoxml
end
eoxml
end

def test_one_node_document_as_hash
assert_equal_rexml(<<-eoxml)
def test_one_node_document_as_hash
assert_equal_rexml(<<-eoxml)
<products/>
eoxml
end
eoxml
end

def test_one_node_with_attributes_document_as_hash
assert_equal_rexml(<<-eoxml)
def test_one_node_with_attributes_document_as_hash
assert_equal_rexml(<<-eoxml)
<products foo="bar"/>
eoxml
end
eoxml
end

def test_products_node_with_book_node_as_hash
assert_equal_rexml(<<-eoxml)
def test_products_node_with_book_node_as_hash
assert_equal_rexml(<<-eoxml)
<products>
<book name="awesome" id="12345" />
</products>
eoxml
end
eoxml
end

def test_products_node_with_two_book_nodes_as_hash
assert_equal_rexml(<<-eoxml)
def test_products_node_with_two_book_nodes_as_hash
assert_equal_rexml(<<-eoxml)
<products>
<book name="awesome" id="12345" />
<book name="america" id="67890" />
</products>
eoxml
end
eoxml
end

def test_single_node_with_content_as_hash
assert_equal_rexml(<<-eoxml)
def test_single_node_with_content_as_hash
assert_equal_rexml(<<-eoxml)
<products>
hello world
</products>
eoxml
end
eoxml
end

def test_children_with_children
assert_equal_rexml(<<-eoxml)
def test_children_with_children
assert_equal_rexml(<<-eoxml)
<root>
<products>
<book name="america" id="67890" />
</products>
</root>
eoxml
end
eoxml
end

def test_children_with_text
assert_equal_rexml(<<-eoxml)
def test_children_with_text
assert_equal_rexml(<<-eoxml)
<root>
<products>
hello everyone
</products>
</root>
eoxml
end
eoxml
end

def test_children_with_non_adjacent_text
assert_equal_rexml(<<-eoxml)
def test_children_with_non_adjacent_text
assert_equal_rexml(<<-eoxml)
<root>
good
<products>
hello everyone
</products>
morning
</root>
eoxml
end
eoxml
end

private
def assert_equal_rexml(xml)
hash = XmlMini.with_backend('REXML') { XmlMini.parse(xml) }
assert_equal(hash, XmlMini.parse(xml))
private
def assert_equal_rexml(xml)
hash = XmlMini.with_backend('REXML') { XmlMini.parse(xml) }
assert_equal(hash, XmlMini.parse(xml))
end
end
end

else
# don't run these test because we aren't running in JRuby
Expand Down

0 comments on commit 2ca0ae9

Please sign in to comment.