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') { XmlMini.parse(xml) } assert_equal(hash, parsed_xml) end end else # don't run these test because we aren't running in JRuby end