1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
require "test_helper"
# Tests for LoadParserTest
class LoadParserTest < Minitest::Test
cover "MultiXml*"
def test_load_parser_with_symbol
result = MultiXml.send(:load_parser, :nokogiri)
assert_equal MultiXml::Parsers::Nokogiri, result
end
def test_load_parser_with_string
result = MultiXml.send(:load_parser, "nokogiri")
assert_equal MultiXml::Parsers::Nokogiri, result
end
def test_load_parser_converts_to_string_and_downcases
result = MultiXml.send(:load_parser, :NOKOGIRI)
assert_equal MultiXml::Parsers::Nokogiri, result
end
end
# Tests for LoadParserDetailedTest
class LoadParserDetailedTest < Minitest::Test
cover "MultiXml*"
def test_load_parser_downcases_symbol
result = MultiXml.send(:load_parser, :NOKOGIRI)
assert_equal MultiXml::Parsers::Nokogiri, result
end
def test_load_parser_converts_to_string
result = MultiXml.send(:load_parser, "nokogiri")
assert_equal MultiXml::Parsers::Nokogiri, result
end
end
# Tests for LoadParserCamelizeTest
class LoadParserCamelizeTest < Minitest::Test
cover "MultiXml*"
def test_load_parser_converts_to_camelcase
result = MultiXml.send(:load_parser, :NOKOGIRI)
assert_equal MultiXml::Parsers::Nokogiri, result
end
def test_load_parser_handles_underscore_names
skip "libxml not available on Windows/JRuby" if windows? || jruby?
# libxml_sax should become LibxmlSax
result = MultiXml.send(:load_parser, :libxml_sax)
assert_equal MultiXml::Parsers::LibxmlSax, result
end
def test_load_parser_handles_underscore_names_nokogiri_sax
# nokogiri_sax should become NokogiriSax
result = MultiXml.send(:load_parser, :nokogiri_sax)
assert_equal MultiXml::Parsers::NokogiriSax, result
end
end
# Tests load_parser string conversion
class LoadParserStringConversionTest < Minitest::Test
cover "MultiXml*"
def test_load_parser_calls_to_s_on_symbol
# Symbols don't have downcase method directly in older Ruby
result = MultiXml.send(:load_parser, :NOKOGIRI)
assert_equal MultiXml::Parsers::Nokogiri, result
end
def test_load_parser_calls_downcase
# Without downcase, "NOKOGIRI" wouldn't match "nokogiri" file
result = MultiXml.send(:load_parser, "NOKOGIRI")
assert_equal MultiXml::Parsers::Nokogiri, result
end
def test_load_parser_with_mixed_case_string
# Ensure downcase is called on the string
result = MultiXml.send(:load_parser, "Nokogiri")
assert_equal MultiXml::Parsers::Nokogiri, result
end
end
# Tests that verify downcase is actually called on the require path
class LoadParserRequirePathTest < Minitest::Test
cover "MultiXml*"
def test_load_parser_requires_lowercase_path
required_paths = []
stub_require(required_paths) { MultiXml.send(:load_parser, "REXML") }
assert_includes required_paths, "multi_xml/parsers/rexml"
end
private
def stub_require(required_paths)
original_require = Kernel.instance_method(:require)
suppress_warnings { define_require(required_paths, original_require) }
yield
ensure
suppress_warnings { restore_require(original_require) }
end
def define_require(required_paths, original_require)
Kernel.define_method(:require) do |path|
required_paths << path
original_require.bind_call(self, path)
end
end
def restore_require(original_require)
Kernel.define_method(:require) { |path| original_require.bind_call(self, path) }
end
def suppress_warnings
old_verbose = $VERBOSE
$VERBOSE = nil
yield
ensure
$VERBOSE = old_verbose
end
end
|