if RUBY_PLATFORM =~ /java/
require 'abstract_unit'
require 'active_support/xml_mini'
require 'active_support/core_ext/hash/conversions'
class JDOMEngineTest < ActiveSupport::TestCase
include ActiveSupport
FILES_DIR = File.dirname(__FILE__) + '/../fixtures/xml'
def setup
@default_backend = XmlMini.backend
XmlMini.backend = 'JDOM'
end
def teardown
XmlMini.backend = @default_backend
end
def test_file_from_xml
hash = Hash.from_xml(<<-eoxml)
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_not_allowed_to_expand_entities_to_files
attack_xml = <<-EOT
]>
x&a;
EOT
assert_equal 'x', Hash.from_xml(attack_xml)["member"]
end
def test_not_allowed_to_expand_parameter_entities_to_files
attack_xml = <<-EOT
%b;
]>
x&a;
EOT
assert_raise Java::OrgXmlSax::SAXParseException do
assert_equal 'x', Hash.from_xml(attack_xml)["member"]
end
end
def test_not_allowed_to_load_external_doctypes
attack_xml = <<-EOT
x&a;
EOT
assert_equal 'x', Hash.from_xml(attack_xml)["member"]
end
def test_exception_thrown_on_expansion_attack
assert_raise Java::OrgXmlSax::SAXParseException do
attack_xml = <<-EOT
]>
&a;
EOT
Hash.from_xml(attack_xml)
end
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_array_type_makes_an_array
assert_equal_rexml(<<-eoxml)
a post
another post
eoxml
end
def test_one_node_document_as_hash
assert_equal_rexml(<<-eoxml)
eoxml
end
def test_one_node_with_attributes_document_as_hash
assert_equal_rexml(<<-eoxml)
eoxml
end
def test_products_node_with_book_node_as_hash
assert_equal_rexml(<<-eoxml)
eoxml
end
def test_products_node_with_two_book_nodes_as_hash
assert_equal_rexml(<<-eoxml)
eoxml
end
def test_single_node_with_content_as_hash
assert_equal_rexml(<<-eoxml)
hello world
eoxml
end
def test_children_with_children
assert_equal_rexml(<<-eoxml)
eoxml
end
def test_children_with_text
assert_equal_rexml(<<-eoxml)
hello everyone
eoxml
end
def test_children_with_non_adjacent_text
assert_equal_rexml(<<-eoxml)
good
hello everyone
morning
eoxml
end
private
def assert_equal_rexml(xml)
parsed_xml = XmlMini.parse(xml)
hash = XmlMini.with_backend('REXML') { parsed_xml }
assert_equal(hash, parsed_xml)
end
end
else
# don't run these test because we aren't running in JRuby
end