diff options
author | Jon Moss <me@jonathanmoss.me> | 2016-11-20 10:14:56 -0500 |
---|---|---|
committer | Jon Moss <me@jonathanmoss.me> | 2016-11-20 10:46:16 -0500 |
commit | 8e3901b5e6b4900cb4dd4cc1154180f42b51db2b (patch) | |
tree | e3a6771de1cf2568e2b0ee7cd22584c59866140a | |
parent | 0ab54f4a49b388f0b75862b881fdef2545b380cf (diff) | |
download | rails-8e3901b5e6b4900cb4dd4cc1154180f42b51db2b.tar.gz rails-8e3901b5e6b4900cb4dd4cc1154180f42b51db2b.tar.bz2 rails-8e3901b5e6b4900cb4dd4cc1154180f42b51db2b.zip |
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?
-rw-r--r-- | activesupport/test/xml_mini/xml_mini_engine_test.rb | 383 |
1 files changed, 195 insertions, 188 deletions
diff --git a/activesupport/test/xml_mini/xml_mini_engine_test.rb b/activesupport/test/xml_mini/xml_mini_engine_test.rb index a7d4fe20ad..5be9084c9d 100644 --- a/activesupport/test/xml_mini/xml_mini_engine_test.rb +++ b/activesupport/test/xml_mini/xml_mini_engine_test.rb @@ -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") - - 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 + 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 - end - - def test_setting_backend - assert_engine_class ActiveSupport::XmlMini.backend - end - def test_blank_returns_empty_hash - assert_equal({}, ActiveSupport::XmlMini.parse(nil)) - assert_equal({}, ActiveSupport::XmlMini.parse("")) - 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_document_as_hash - assert_equal_rexml(<<-eoxml) - <products/> - eoxml - 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_one_node_with_attributes_document_as_hash - assert_equal_rexml(<<-eoxml) - <products foo="bar"/> - eoxml - end + def test_setting_backend + assert_engine_class ActiveSupport::XmlMini.backend + 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_blank_returns_empty_hash + assert_equal({}, ActiveSupport::XmlMini.parse(nil)) + assert_equal({}, ActiveSupport::XmlMini.parse("")) + 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_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_single_node_with_content_as_hash - assert_equal_rexml(<<-eoxml) - <products> - hello world - </products> - eoxml - end + def test_one_node_document_as_hash + assert_equal_rexml(<<-eoxml) + <products/> + eoxml + end - def test_children_with_children - assert_equal_rexml(<<-eoxml) - <root> - <products> - <book name="america" id="67890" /> - </products> - </root> - eoxml - end + def test_one_node_with_attributes_document_as_hash + assert_equal_rexml(<<-eoxml) + <products foo="bar"/> + eoxml + end - def test_children_with_text - assert_equal_rexml(<<-eoxml) - <root> + def test_products_node_with_book_node_as_hash + assert_equal_rexml(<<-eoxml) <products> - hello everyone + <book name="awesome" id="12345" /> </products> - </root> - eoxml - end + eoxml + end - def test_children_with_non_adjacent_text - assert_equal_rexml(<<-eoxml) - <root> - good + def test_products_node_with_two_book_nodes_as_hash + assert_equal_rexml(<<-eoxml) <products> - hello everyone + <book name="awesome" id="12345" /> + <book name="america" id="67890" /> </products> - morning - </root> - eoxml - end - - def test_parse_from_io - skip_unless_extended_engine + eoxml + end - assert_equal_rexml(StringIO.new(<<-eoxml)) - <root> - good + def test_single_node_with_content_as_hash + assert_equal_rexml(<<-eoxml) <products> - hello everyone + hello world </products> - morning - </root> - eoxml - end - - def test_children_with_simple_cdata - skip_unless_extended_engine + eoxml + end - assert_equal_rexml(<<-eoxml) - <root> - <products> - <![CDATA[cdatablock]]> - </products> - </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_children_with_multiple_cdata - skip_unless_extended_engine + def test_children_with_text + assert_equal_rexml(<<-eoxml) + <root> + <products> + hello everyone + </products> + </root> + eoxml + end - assert_equal_rexml(<<-eoxml) - <root> - <products> - <![CDATA[cdatablock1]]><![CDATA[cdatablock2]]> - </products> - </root> - 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_text_and_cdata - skip_unless_extended_engine + def test_parse_from_io + skip_unless_extended_engine - assert_equal_rexml(<<-eoxml) - <root> - <products> - hello <![CDATA[cdatablock]]> + assert_equal_rexml(StringIO.new(<<-eoxml)) + <root> + good + <products> + hello everyone + </products> morning - </products> - </root> - eoxml - end - - def test_children_with_blank_text - skip_unless_extended_engine + </root> + eoxml + end - assert_equal_rexml(<<-eoxml) - <root> - <products> </products> - </root> - eoxml - end + def test_children_with_simple_cdata + skip_unless_extended_engine - def test_children_with_blank_text_and_attribute - skip_unless_extended_engine + assert_equal_rexml(<<-eoxml) + <root> + <products> + <![CDATA[cdatablock]]> + </products> + </root> + eoxml + end - assert_equal_rexml(<<-eoxml) - <root> - <products type="file"> </products> - </root> - eoxml - end + def test_children_with_multiple_cdata + skip_unless_extended_engine - private - def engine - raise NotImplementedError + assert_equal_rexml(<<-eoxml) + <root> + <products> + <![CDATA[cdatablock1]]><![CDATA[cdatablock2]]> + </products> + </root> + eoxml end - def assert_engine_class(actual) - assert_equal ActiveSupport.const_get("XmlMini_#{engine}"), actual + 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 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 test_children_with_blank_text + skip_unless_extended_engine - def expansion_attack_error - raise NotImplementedError + assert_equal_rexml(<<-eoxml) + <root> + <products> </products> + </root> + eoxml end - def extended_engine? - true - end + def test_children_with_blank_text_and_attribute + skip_unless_extended_engine - def skip_unless_extended_engine - skip "#{engine} is not an extended engine" 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 end |