mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Move tests to a module, include in subclasses, style linting
This fixes an error where the test runner would try and run XMLMiniEngineTest like a normal test class, except it's abstract. Now, to circumvent this, we don't include any of the actual tests in XMLMiniEngineTest; they are wrapped in a module that is included in subclass when they inherit from XMLMiniEngineTest. Pretty neat, huh?
This commit is contained in:
parent
0ab54f4a49
commit
8e3901b5e6
1 changed files with 210 additions and 203 deletions
|
@ -11,7 +11,12 @@ class XMLMiniEngineTest < ActiveSupport::TestCase
|
|||
end
|
||||
|
||||
def self.run_with_platform(platform_name)
|
||||
yielf if RUBY_PLATFORM.include?(platform_name)
|
||||
yield if RUBY_PLATFORM.include?(platform_name)
|
||||
end
|
||||
|
||||
def self.inherited(base)
|
||||
base.include EngineTests
|
||||
super
|
||||
end
|
||||
|
||||
def setup
|
||||
|
@ -25,226 +30,228 @@ class XMLMiniEngineTest < ActiveSupport::TestCase
|
|||
super
|
||||
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.key?("blog")
|
||||
assert hash["blog"].key?("logo")
|
||||
module EngineTests
|
||||
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.key?("blog")
|
||||
assert hash["blog"].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 expansion_attack_error do
|
||||
Hash.from_xml(<<-eoxml)
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE member [
|
||||
<!ENTITY a "&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;">
|
||||
<!ENTITY b "&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;">
|
||||
<!ENTITY c "&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;">
|
||||
<!ENTITY d "&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;">
|
||||
<!ENTITY e "&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;">
|
||||
<!ENTITY f "&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;">
|
||||
<!ENTITY g "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx">
|
||||
]>
|
||||
<member>
|
||||
&a;
|
||||
</member>
|
||||
eoxml
|
||||
file = hash["blog"]["logo"]
|
||||
assert_equal "logo.png", file.original_filename
|
||||
assert_equal "image/png", file.content_type
|
||||
end
|
||||
end
|
||||
|
||||
def test_setting_backend
|
||||
assert_engine_class ActiveSupport::XmlMini.backend
|
||||
end
|
||||
def test_exception_thrown_on_expansion_attack
|
||||
assert_raise expansion_attack_error do
|
||||
Hash.from_xml(<<-eoxml)
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE member [
|
||||
<!ENTITY a "&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;">
|
||||
<!ENTITY b "&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;">
|
||||
<!ENTITY c "&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;">
|
||||
<!ENTITY d "&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;">
|
||||
<!ENTITY e "&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;">
|
||||
<!ENTITY f "&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;">
|
||||
<!ENTITY g "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx">
|
||||
]>
|
||||
<member>
|
||||
&a;
|
||||
</member>
|
||||
eoxml
|
||||
end
|
||||
end
|
||||
|
||||
def test_blank_returns_empty_hash
|
||||
assert_equal({}, ActiveSupport::XmlMini.parse(nil))
|
||||
assert_equal({}, ActiveSupport::XmlMini.parse(""))
|
||||
end
|
||||
def test_setting_backend
|
||||
assert_engine_class ActiveSupport::XmlMini.backend
|
||||
end
|
||||
|
||||
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
|
||||
def test_blank_returns_empty_hash
|
||||
assert_equal({}, ActiveSupport::XmlMini.parse(nil))
|
||||
assert_equal({}, ActiveSupport::XmlMini.parse(""))
|
||||
end
|
||||
|
||||
def test_one_node_document_as_hash
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<products/>
|
||||
eoxml
|
||||
end
|
||||
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
|
||||
|
||||
def test_one_node_with_attributes_document_as_hash
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<products foo="bar"/>
|
||||
eoxml
|
||||
end
|
||||
def test_one_node_document_as_hash
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<products/>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_products_node_with_book_node_as_hash
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<products>
|
||||
<book name="awesome" id="12345" />
|
||||
</products>
|
||||
eoxml
|
||||
end
|
||||
def test_one_node_with_attributes_document_as_hash
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<products foo="bar"/>
|
||||
eoxml
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
def test_single_node_with_content_as_hash
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<products>
|
||||
hello world
|
||||
</products>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_children_with_children
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
def test_products_node_with_book_node_as_hash
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<products>
|
||||
<book name="awesome" id="12345" />
|
||||
</products>
|
||||
eoxml
|
||||
end
|
||||
|
||||
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>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_children_with_text
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
def test_single_node_with_content_as_hash
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<products>
|
||||
hello everyone
|
||||
hello world
|
||||
</products>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_children_with_non_adjacent_text
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
good
|
||||
<products>
|
||||
hello everyone
|
||||
</products>
|
||||
morning
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
def test_children_with_children
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
<products>
|
||||
<book name="america" id="67890" />
|
||||
</products>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_parse_from_io
|
||||
skip_unless_extended_engine
|
||||
def test_children_with_text
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
<products>
|
||||
hello everyone
|
||||
</products>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
assert_equal_rexml(StringIO.new(<<-eoxml))
|
||||
<root>
|
||||
good
|
||||
<products>
|
||||
hello everyone
|
||||
</products>
|
||||
morning
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_children_with_simple_cdata
|
||||
skip_unless_extended_engine
|
||||
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
<products>
|
||||
<![CDATA[cdatablock]]>
|
||||
</products>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_children_with_multiple_cdata
|
||||
skip_unless_extended_engine
|
||||
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
<products>
|
||||
<![CDATA[cdatablock1]]><![CDATA[cdatablock2]]>
|
||||
</products>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_children_with_text_and_cdata
|
||||
skip_unless_extended_engine
|
||||
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
<products>
|
||||
hello <![CDATA[cdatablock]]>
|
||||
def test_children_with_non_adjacent_text
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
good
|
||||
<products>
|
||||
hello everyone
|
||||
</products>
|
||||
morning
|
||||
</products>
|
||||
</root>
|
||||
eoxml
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_parse_from_io
|
||||
skip_unless_extended_engine
|
||||
|
||||
assert_equal_rexml(StringIO.new(<<-eoxml))
|
||||
<root>
|
||||
good
|
||||
<products>
|
||||
hello everyone
|
||||
</products>
|
||||
morning
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_children_with_simple_cdata
|
||||
skip_unless_extended_engine
|
||||
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
<products>
|
||||
<![CDATA[cdatablock]]>
|
||||
</products>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_children_with_multiple_cdata
|
||||
skip_unless_extended_engine
|
||||
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
<products>
|
||||
<![CDATA[cdatablock1]]><![CDATA[cdatablock2]]>
|
||||
</products>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_children_with_text_and_cdata
|
||||
skip_unless_extended_engine
|
||||
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
<products>
|
||||
hello <![CDATA[cdatablock]]>
|
||||
morning
|
||||
</products>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_children_with_blank_text
|
||||
skip_unless_extended_engine
|
||||
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
<products> </products>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_children_with_blank_text_and_attribute
|
||||
skip_unless_extended_engine
|
||||
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
<products type="file"> </products>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
private
|
||||
def engine
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def assert_engine_class(actual)
|
||||
assert_equal ActiveSupport.const_get("XmlMini_#{engine}"), actual
|
||||
end
|
||||
|
||||
def assert_equal_rexml(xml)
|
||||
parsed_xml = ActiveSupport::XmlMini.parse(xml)
|
||||
xml.rewind if xml.respond_to?(:rewind)
|
||||
hash = ActiveSupport::XmlMini.with_backend("REXML") { ActiveSupport::XmlMini.parse(xml) }
|
||||
assert_equal(hash, parsed_xml)
|
||||
end
|
||||
|
||||
def expansion_attack_error
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def extended_engine?
|
||||
true
|
||||
end
|
||||
|
||||
def skip_unless_extended_engine
|
||||
skip "#{engine} is not an extended engine" unless extended_engine?
|
||||
end
|
||||
end
|
||||
|
||||
def test_children_with_blank_text
|
||||
skip_unless_extended_engine
|
||||
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
<products> </products>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
def test_children_with_blank_text_and_attribute
|
||||
skip_unless_extended_engine
|
||||
|
||||
assert_equal_rexml(<<-eoxml)
|
||||
<root>
|
||||
<products type="file"> </products>
|
||||
</root>
|
||||
eoxml
|
||||
end
|
||||
|
||||
private
|
||||
def engine
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def assert_engine_class(actual)
|
||||
assert_equal ActiveSupport.const_get("XmlMini_#{engine}"), actual
|
||||
end
|
||||
|
||||
def assert_equal_rexml(xml)
|
||||
parsed_xml = ActiveSupport::XmlMini.parse(xml)
|
||||
xml.rewind if xml.respond_to?(:rewind)
|
||||
hash = ActiveSupport::XmlMini.with_backend("REXML") { ActiveSupport::XmlMini.parse(xml) }
|
||||
assert_equal(hash, parsed_xml)
|
||||
end
|
||||
|
||||
def expansion_attack_error
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def extended_engine?
|
||||
true
|
||||
end
|
||||
|
||||
def skip_unless_extended_engine
|
||||
skip "#{engine} is not an extended engine" unless extended_engine?
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue