multisax 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.rdoc +8 -0
- data/Gemfile +2 -2
- data/lib/multisax.rb +45 -18
- data/multisax.gemspec +1 -1
- data/spec/multisax_spec.rb +76 -25
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 93782bad9e30774f1d5d05b206804d6ec7a981be
         | 
| 4 | 
            +
              data.tar.gz: 1734d46e0312e9849fd6897aab0826c7225c8ff5
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 3c4696780f1da115c91ca765f07c9a47d73221ef86e157f4aad2b3635b7a561d0fa3a1614da0a6118ab9fca99eb70444b835db970b0ea079d25c3cbe722fce21
         | 
| 7 | 
            +
              data.tar.gz: 40df1e1c34be650f6526cc561e1535c35bc3fc2f5116b96fb8d046f68162ad2c143dd31bcc370a0b6d27f4fd550d8e35c88494dbbb80e5bda958149f5fbee6e0
         | 
    
        data/CHANGELOG.rdoc
    CHANGED
    
    | @@ -1,5 +1,12 @@ | |
| 1 1 | 
             
            = ChangeLog
         | 
| 2 2 |  | 
| 3 | 
            +
            == 0.0.3 (2013 Nov 14)
         | 
| 4 | 
            +
            - Fixed namespace handling.
         | 
| 5 | 
            +
            - Now you can also select :oxhtml to parse HTML.
         | 
| 6 | 
            +
            - Added shortcut :XML and :HTML.
         | 
| 7 | 
            +
            - sax_tag_start()'s attrs is assured to be a Hash.
         | 
| 8 | 
            +
            - Refined spec.
         | 
| 9 | 
            +
             | 
| 3 10 | 
             
            == 0.0.2 (2013 Nov 13)
         | 
| 4 11 | 
             
            - Now you can create an instance of MultiSAX::SAX.
         | 
| 5 12 | 
             
              - Please note that passed class to MultiSAX is still modified directly.
         | 
| @@ -7,6 +14,7 @@ | |
| 7 14 | 
             
              - MultiSAX::Sax is now an instance of MultiSAX::SAX (this is backward-compatible).
         | 
| 8 15 | 
             
            - You can specify :nokogirihtml explicitly to parse HTML.
         | 
| 9 16 | 
             
            - Fixed attrs with Ox (now String is passed, not Symbol)
         | 
| 17 | 
            +
            - Moved to Bundler rather than Jeweler.
         | 
| 10 18 |  | 
| 11 19 | 
             
            == 0.0.1 (2013 Jul 8)
         | 
| 12 20 | 
             
            - Added ChangeLog.
         | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/lib/multisax.rb
    CHANGED
    
    | @@ -8,7 +8,7 @@ | |
| 8 8 |  | 
| 9 9 | 
             
            module MultiSAX
         | 
| 10 10 | 
             
            	# VERSION string
         | 
| 11 | 
            -
            	VERSION='0.0. | 
| 11 | 
            +
            	VERSION='0.0.3'
         | 
| 12 12 |  | 
| 13 13 | 
             
            	# The class to handle XML libraries.
         | 
| 14 14 | 
             
            	class SAX
         | 
| @@ -16,16 +16,19 @@ module MultiSAX | |
| 16 16 | 
             
            		@saxmodule=nil
         | 
| 17 17 | 
             
            		# Library loader.
         | 
| 18 18 | 
             
            		# Arguments are list (or Array) of libraries.
         | 
| 19 | 
            -
            		#   | 
| 19 | 
            +
            		#  if list is empty or :XML, the following are searched (order by speed):
         | 
| 20 20 | 
             
            		#  :ox, :libxml, :nokogiri, :rexmlstream, :rexmlsax2
         | 
| 21 | 
            +
            		#  if list is :HTML, the following are searched (order by speed):
         | 
| 22 | 
            +
            		#  :oxhtml, :nokogirihtml
         | 
| 23 | 
            +
            		#  You can also specify libraries individually.
         | 
| 21 24 | 
             
            		#  If multiple selected, MultiSAX will try the libraries one by one and use the first usable one.
         | 
| 22 | 
            -
            		#  For HTML, you can specify :nokogirihtml explicitly.
         | 
| 23 25 | 
             
            		def open(*list)
         | 
| 24 26 | 
             
            			return @parser if @parser
         | 
| 25 | 
            -
            			list=[:ox,:libxml,:nokogiri,:rexmlstream,:rexmlsax2] if list.size==0
         | 
| 27 | 
            +
            			list=[:ox,:libxml,:nokogiri,:rexmlstream,:rexmlsax2] if list.size==0||list==[:XML]
         | 
| 28 | 
            +
            			list=[:oxhtml,:nokogirihtml] if list==[:HTML]
         | 
| 26 29 | 
             
            			list.each{|e_module|
         | 
| 27 30 | 
             
            				case e_module
         | 
| 28 | 
            -
            					when :ox
         | 
| 31 | 
            +
            					when :ox,:oxhtml
         | 
| 29 32 | 
             
            						#next if RUBY_VERSION<'1.9'
         | 
| 30 33 | 
             
            						begin
         | 
| 31 34 | 
             
            							require 'ox'
         | 
| @@ -92,17 +95,22 @@ module MultiSAX | |
| 92 95 | 
             
            		def method_mapping(listener)
         | 
| 93 96 | 
             
            			#raise "MultiSAX::Sax open first" if !@parser
         | 
| 94 97 | 
             
            			case @parser
         | 
| 95 | 
            -
            				when :ox
         | 
| 98 | 
            +
            				when :ox,:oxhtml
         | 
| 96 99 | 
             
            					saxmodule=@saxmodule
         | 
| 97 100 | 
             
            					listener.instance_eval{
         | 
| 98 101 | 
             
            						extend saxmodule
         | 
| 99 102 | 
             
            						@saxwrapper_tag=nil
         | 
| 100 103 | 
             
            						@saxwrapper_attr={}
         | 
| 101 104 | 
             
            						def start_element(tag)
         | 
| 102 | 
            -
            							 | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
            							 | 
| 105 | 
            +
            							if @after_error
         | 
| 106 | 
            +
            								sax_tag_start(tag.to_s,{})
         | 
| 107 | 
            +
            								@after_error=false
         | 
| 108 | 
            +
            							else
         | 
| 109 | 
            +
            								# I hope provided Listener's sax_tag_start will NOT be used elsewhere.
         | 
| 110 | 
            +
            								#alias :attrs_done :attrs_done_normal
         | 
| 111 | 
            +
            								@saxwrapper_tag=tag
         | 
| 112 | 
            +
            								@saxwrapper_attr={}
         | 
| 113 | 
            +
            							end
         | 
| 106 114 | 
             
            						end
         | 
| 107 115 | 
             
            						# These "instance methods" are actually injected to listener class using instance_eval.
         | 
| 108 116 | 
             
            						# i.e. not APIs. You cannot call these methods from outside.
         | 
| @@ -122,6 +130,7 @@ module MultiSAX | |
| 122 130 | 
             
            						def attrs_done
         | 
| 123 131 | 
             
            							@saxwrapper_tag ? attrs_done_normal : attrs_done_xmldecl
         | 
| 124 132 | 
             
            						end
         | 
| 133 | 
            +
            						def error(s,i,j) @after_error=true if s.end_with?('closed but not opened') end
         | 
| 125 134 | 
             
            						def end_element(tag) sax_tag_end(tag.to_s) end
         | 
| 126 135 | 
             
            						alias :cdata :sax_cdata
         | 
| 127 136 | 
             
            						alias :text :sax_text
         | 
| @@ -133,8 +142,10 @@ module MultiSAX | |
| 133 142 | 
             
            				when :libxml
         | 
| 134 143 | 
             
            					listener.instance_eval{
         | 
| 135 144 | 
             
            						extend LibXML::XML::SaxParser::Callbacks
         | 
| 136 | 
            -
            						alias : | 
| 137 | 
            -
            						alias : | 
| 145 | 
            +
            						alias :on_start_element_ns :sax_start_element_namespace_libxml
         | 
| 146 | 
            +
            						#alias :on_start_element :sax_tag_start
         | 
| 147 | 
            +
            						alias :on_end_element_ns :sax_end_element_namespace
         | 
| 148 | 
            +
            						#alias :on_end_element :sax_tag_end
         | 
| 138 149 | 
             
            						alias :on_cdata_block :sax_cdata
         | 
| 139 150 | 
             
            						alias :on_characters :sax_text
         | 
| 140 151 | 
             
            						alias :on_comment :sax_comment
         | 
| @@ -144,8 +155,8 @@ module MultiSAX | |
| 144 155 | 
             
            					saxmodule=@saxmodule
         | 
| 145 156 | 
             
            					listener.instance_eval{
         | 
| 146 157 | 
             
            						extend saxmodule
         | 
| 147 | 
            -
            						alias :start_element_namespace : | 
| 148 | 
            -
            						 | 
| 158 | 
            +
            						alias :start_element_namespace :sax_start_element_namespace_nokogiri
         | 
| 159 | 
            +
            						def start_element(tag,attrs) sax_tag_start(tag,attrs.is_a?(Array) ? Hash[*attrs.flatten(1)] : attrs) end
         | 
| 149 160 | 
             
            						alias :end_element_namespace :sax_end_element_namespace
         | 
| 150 161 | 
             
            						alias :end_element :sax_tag_end
         | 
| 151 162 | 
             
            						alias :cdata_block :sax_cdata
         | 
| @@ -166,8 +177,8 @@ module MultiSAX | |
| 166 177 | 
             
            				when :rexmlsax2
         | 
| 167 178 | 
             
            					listener.instance_eval{
         | 
| 168 179 | 
             
            						extend REXML::SAX2Listener
         | 
| 169 | 
            -
            						def start_element(uri,tag,qname,attrs) sax_tag_start( | 
| 170 | 
            -
            						def end_element(uri,tag,qname) sax_tag_end( | 
| 180 | 
            +
            						def start_element(uri,tag,qname,attrs) sax_tag_start(qname,attrs) end
         | 
| 181 | 
            +
            						def end_element(uri,tag,qname) sax_tag_end(qname) end
         | 
| 171 182 | 
             
            						alias :cdata :sax_cdata
         | 
| 172 183 | 
             
            						alias :characters :sax_text
         | 
| 173 184 | 
             
            						alias :comment :sax_comment
         | 
| @@ -192,6 +203,7 @@ module MultiSAX | |
| 192 203 | 
             
            			if source.is_a?(String)
         | 
| 193 204 | 
             
            				case @parser
         | 
| 194 205 | 
             
            					when :ox           then Ox.sax_parse(@listener,StringIO.new(source),:convert_special=>true)
         | 
| 206 | 
            +
            					when :oxhtml       then Ox.sax_parse(@listener,StringIO.new(source),:convert_special=>true,:smart=>true)
         | 
| 195 207 | 
             
            					when :libxml       then parser=LibXML::XML::SaxParser.string(source);parser.callbacks=@listener;parser.parse
         | 
| 196 208 | 
             
            					when :nokogiri     then parser=Nokogiri::XML::SAX::Parser.new(@listener);parser.parse(source)
         | 
| 197 209 | 
             
            					when :nokogirihtml then parser=Nokogiri::HTML::SAX::Parser.new(@listener);parser.parse(source)
         | 
| @@ -201,9 +213,10 @@ module MultiSAX | |
| 201 213 | 
             
            			else
         | 
| 202 214 | 
             
            				case @parser
         | 
| 203 215 | 
             
            					when :ox           then Ox.sax_parse(@listener,source,:convert_special=>true)
         | 
| 216 | 
            +
            					when :oxhtml       then Ox.sax_parse(@listener,source,:convert_special=>true,:smart=>true)
         | 
| 204 217 | 
             
            					when :libxml       then parser=LibXML::XML::SaxParser.io(source);parser.callbacks=@listener;parser.parse
         | 
| 205 218 | 
             
            					when :nokogiri     then parser=Nokogiri::XML::SAX::Parser.new(@listener);parser.parse(source)
         | 
| 206 | 
            -
            					when :nokogirihtml then parser=Nokogiri::HTML::SAX::Parser.new(@listener);parser.parse(source)
         | 
| 219 | 
            +
            					when :nokogirihtml then parser=Nokogiri::HTML::SAX::Parser.new(@listener);parser.parse(source.read) # fixme
         | 
| 207 220 | 
             
            					when :rexmlstream  then REXML::Parsers::StreamParser.new(source,@listener).parse
         | 
| 208 221 | 
             
            					when :rexmlsax2    then parser=REXML::Parsers::SAX2Parser.new(source);parser.listen(@listener);parser.parse
         | 
| 209 222 | 
             
            				end
         | 
| @@ -245,7 +258,7 @@ module MultiSAX | |
| 245 258 | 
             
            	module Callbacks
         | 
| 246 259 | 
             
            		# Cited from Nokogiri to convert Nokogiri::XML::SAX::Document into module.
         | 
| 247 260 | 
             
            		#  https://github.com/sparklemotion/nokogiri/blob/master/lib/nokogiri/xml/sax/document.rb
         | 
| 248 | 
            -
            		def  | 
| 261 | 
            +
            		def sax_start_element_namespace_nokogiri name, attrs = [], prefix = nil, uri = nil, ns = []
         | 
| 249 262 | 
             
            			# Deal with SAX v1 interface
         | 
| 250 263 | 
             
            			name = [prefix, name].compact.join(':')
         | 
| 251 264 | 
             
            			# modified in 0.0.2
         | 
| @@ -257,6 +270,20 @@ module MultiSAX | |
| 257 270 | 
             
            				attributes[[attr.prefix, attr.localname].compact.join(':')]=attr.value
         | 
| 258 271 | 
             
            			}
         | 
| 259 272 | 
             
            			sax_tag_start name, attributes
         | 
| 273 | 
            +
                    end
         | 
| 274 | 
            +
            		# libxml namespace handler
         | 
| 275 | 
            +
            		def sax_start_element_namespace_libxml name, attrs, prefix = nil, uri = nil, ns = []
         | 
| 276 | 
            +
            			# Deal with SAX v1 interface
         | 
| 277 | 
            +
            			name = [prefix, name].compact.join(':')
         | 
| 278 | 
            +
            			# modified in 0.0.2
         | 
| 279 | 
            +
            			attributes = {}
         | 
| 280 | 
            +
            			ns.each{|ns_prefix,ns_uri|
         | 
| 281 | 
            +
            				attributes[['xmlns', ns_prefix].compact.join(':')]=ns_uri
         | 
| 282 | 
            +
            			}
         | 
| 283 | 
            +
            			attrs.each{|k,v|
         | 
| 284 | 
            +
            				attributes[k]=v
         | 
| 285 | 
            +
            			}
         | 
| 286 | 
            +
            			sax_tag_start name, attributes
         | 
| 260 287 | 
             
                    end
         | 
| 261 288 | 
             
            		# Cited from Nokogiri
         | 
| 262 289 | 
             
            		def sax_end_element_namespace name, prefix = nil, uri = nil
         | 
    
        data/multisax.gemspec
    CHANGED
    
    | @@ -21,7 +21,7 @@ Gem::Specification.new do |spec| | |
| 21 21 | 
             
              ]
         | 
| 22 22 | 
             
              spec.require_paths = ["lib"]
         | 
| 23 23 |  | 
| 24 | 
            -
              spec.add_development_dependency "bundler"
         | 
| 24 | 
            +
              spec.add_development_dependency "bundler", ">= 1.0"
         | 
| 25 25 | 
             
              spec.add_development_dependency "rake"
         | 
| 26 26 | 
             
              spec.add_development_dependency "rspec"
         | 
| 27 27 | 
             
            end
         | 
    
        data/spec/multisax_spec.rb
    CHANGED
    
    | @@ -8,7 +8,7 @@ class MultiSAXTester | |
| 8 8 | 
             
            	end
         | 
| 9 9 | 
             
            	def sax_tag_start(tag,attrs)
         | 
| 10 10 | 
             
            		@result<<tag
         | 
| 11 | 
            -
            		@attrib=attrs[' | 
| 11 | 
            +
            		@attrib=attrs['class'] if tag=='span'
         | 
| 12 12 | 
             
            	end
         | 
| 13 13 | 
             
            	def sax_tag_end(tag)
         | 
| 14 14 | 
             
            		@result<<tag
         | 
| @@ -22,13 +22,16 @@ class MultiSAXTester | |
| 22 22 | 
             
            	end
         | 
| 23 23 | 
             
            	attr_reader :result,:attrib,:xmlencoding
         | 
| 24 24 | 
             
            end
         | 
| 25 | 
            +
             | 
| 25 26 | 
             
            input_xml=<<"EOM"
         | 
| 26 27 | 
             
            <?xml version="1.0" encoding="UTF-8"?>
         | 
| 27 | 
            -
            < | 
| 28 | 
            +
            <ns xmlns:zzz="http://example.com/">
         | 
| 29 | 
            +
            <zzz:hello><span class="foo">world</span></zzz:hello>
         | 
| 30 | 
            +
            </ns>
         | 
| 28 31 | 
             
            EOM
         | 
| 29 | 
            -
             | 
| 32 | 
            +
            xml_answer=['ns','zzz:hello','span','world','span','zzz:hello','ns']
         | 
| 30 33 |  | 
| 31 | 
            -
            describe "MultiSAX::Sax.parse | 
| 34 | 
            +
            describe "[XML] MultiSAX::Sax.parse(String)" do
         | 
| 32 35 | 
             
            	it "fails on :unknown" do
         | 
| 33 36 | 
             
            		MultiSAX::Sax.reset
         | 
| 34 37 | 
             
            		MultiSAX::Sax.open(:unknown).should be_false
         | 
| @@ -38,8 +41,8 @@ describe "MultiSAX::Sax.parse (String)" do | |
| 38 41 | 
             
            		MultiSAX::Sax.open(:rexmlstream)
         | 
| 39 42 | 
             
            		MultiSAX::Sax.parser.should eq :rexmlstream
         | 
| 40 43 | 
             
            		listener=MultiSAX::Sax.parse(input_xml,MultiSAXTester.new)
         | 
| 41 | 
            -
            		listener.result.should eq  | 
| 42 | 
            -
            		listener.attrib.should eq ' | 
| 44 | 
            +
            		listener.result.should eq xml_answer
         | 
| 45 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 43 46 | 
             
            		listener.xmlencoding.should eq 'UTF-8'
         | 
| 44 47 | 
             
            	end
         | 
| 45 48 | 
             
            	it "uses :rexmlsax2" do
         | 
| @@ -47,8 +50,8 @@ describe "MultiSAX::Sax.parse (String)" do | |
| 47 50 | 
             
            		MultiSAX::Sax.open(:rexmlsax2)
         | 
| 48 51 | 
             
            		MultiSAX::Sax.parser.should eq :rexmlsax2
         | 
| 49 52 | 
             
            		listener=MultiSAX::Sax.parse(input_xml,MultiSAXTester.new)
         | 
| 50 | 
            -
            		listener.result.should eq  | 
| 51 | 
            -
            		listener.attrib.should eq ' | 
| 53 | 
            +
            		listener.result.should eq xml_answer
         | 
| 54 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 52 55 | 
             
            		listener.xmlencoding.should eq 'UTF-8'
         | 
| 53 56 | 
             
            	end
         | 
| 54 57 | 
             
            	it "uses :ox" do
         | 
| @@ -56,8 +59,8 @@ describe "MultiSAX::Sax.parse (String)" do | |
| 56 59 | 
             
            		MultiSAX::Sax.open(:ox)
         | 
| 57 60 | 
             
            		MultiSAX::Sax.parser.should eq :ox
         | 
| 58 61 | 
             
            		listener=MultiSAX::Sax.parse(input_xml,MultiSAXTester.new)
         | 
| 59 | 
            -
            		listener.result.should eq  | 
| 60 | 
            -
            		listener.attrib.should eq ' | 
| 62 | 
            +
            		listener.result.should eq xml_answer
         | 
| 63 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 61 64 | 
             
            		listener.xmlencoding.should eq 'UTF-8'
         | 
| 62 65 | 
             
            	end
         | 
| 63 66 | 
             
            	it "uses :libxml" do
         | 
| @@ -65,8 +68,8 @@ describe "MultiSAX::Sax.parse (String)" do | |
| 65 68 | 
             
            		MultiSAX::Sax.open(:libxml)
         | 
| 66 69 | 
             
            		MultiSAX::Sax.parser.should eq :libxml
         | 
| 67 70 | 
             
            		listener=MultiSAX::Sax.parse(input_xml,MultiSAXTester.new)
         | 
| 68 | 
            -
            		listener.result.should eq  | 
| 69 | 
            -
            		listener.attrib.should eq ' | 
| 71 | 
            +
            		listener.result.should eq xml_answer
         | 
| 72 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 70 73 | 
             
            		#listener.xmlencoding.should eq 'UTF-8'
         | 
| 71 74 | 
             
            	end
         | 
| 72 75 | 
             
            	it "uses :nokogiri" do
         | 
| @@ -74,20 +77,20 @@ describe "MultiSAX::Sax.parse (String)" do | |
| 74 77 | 
             
            		MultiSAX::Sax.open(:nokogiri)
         | 
| 75 78 | 
             
            		MultiSAX::Sax.parser.should eq :nokogiri
         | 
| 76 79 | 
             
            		listener=MultiSAX::Sax.parse(input_xml,MultiSAXTester.new)
         | 
| 77 | 
            -
            		listener.result.should eq  | 
| 78 | 
            -
            		listener.attrib.should eq ' | 
| 80 | 
            +
            		listener.result.should eq xml_answer
         | 
| 81 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 79 82 | 
             
            		listener.xmlencoding.should eq 'UTF-8'
         | 
| 80 83 | 
             
            	end
         | 
| 81 84 | 
             
            end
         | 
| 82 85 |  | 
| 83 | 
            -
            describe "MultiSAX::Sax.parse | 
| 86 | 
            +
            describe "[XML] MultiSAX::Sax.parse(IO)" do
         | 
| 84 87 | 
             
            	it "uses :rexmlstream" do
         | 
| 85 88 | 
             
            		MultiSAX::Sax.reset
         | 
| 86 89 | 
             
            		MultiSAX::Sax.open(:rexmlstream)
         | 
| 87 90 | 
             
            		MultiSAX::Sax.parser.should eq :rexmlstream
         | 
| 88 91 | 
             
            		listener=MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new)
         | 
| 89 | 
            -
            		listener.result.should eq  | 
| 90 | 
            -
            		listener.attrib.should eq ' | 
| 92 | 
            +
            		listener.result.should eq xml_answer
         | 
| 93 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 91 94 | 
             
            		listener.xmlencoding.should eq 'UTF-8'
         | 
| 92 95 | 
             
            	end
         | 
| 93 96 | 
             
            	it "uses :rexmlsax2" do
         | 
| @@ -95,8 +98,8 @@ describe "MultiSAX::Sax.parse (IO)" do | |
| 95 98 | 
             
            		MultiSAX::Sax.open(:rexmlsax2)
         | 
| 96 99 | 
             
            		MultiSAX::Sax.parser.should eq :rexmlsax2
         | 
| 97 100 | 
             
            		listener=MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new)
         | 
| 98 | 
            -
            		listener.result.should eq  | 
| 99 | 
            -
            		listener.attrib.should eq ' | 
| 101 | 
            +
            		listener.result.should eq xml_answer
         | 
| 102 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 100 103 | 
             
            		listener.xmlencoding.should eq 'UTF-8'
         | 
| 101 104 | 
             
            	end
         | 
| 102 105 | 
             
            	it "uses :ox" do
         | 
| @@ -104,8 +107,8 @@ describe "MultiSAX::Sax.parse (IO)" do | |
| 104 107 | 
             
            		MultiSAX::Sax.open(:ox)
         | 
| 105 108 | 
             
            		MultiSAX::Sax.parser.should eq :ox
         | 
| 106 109 | 
             
            		listener=MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new)
         | 
| 107 | 
            -
            		listener.result.should eq  | 
| 108 | 
            -
            		listener.attrib.should eq ' | 
| 110 | 
            +
            		listener.result.should eq xml_answer
         | 
| 111 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 109 112 | 
             
            		listener.xmlencoding.should eq 'UTF-8'
         | 
| 110 113 | 
             
            	end
         | 
| 111 114 | 
             
            	it "uses :libxml" do
         | 
| @@ -113,8 +116,8 @@ describe "MultiSAX::Sax.parse (IO)" do | |
| 113 116 | 
             
            		MultiSAX::Sax.open(:libxml)
         | 
| 114 117 | 
             
            		MultiSAX::Sax.parser.should eq :libxml
         | 
| 115 118 | 
             
            		listener=MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new)
         | 
| 116 | 
            -
            		listener.result.should eq  | 
| 117 | 
            -
            		listener.attrib.should eq ' | 
| 119 | 
            +
            		listener.result.should eq xml_answer
         | 
| 120 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 118 121 | 
             
            		#listener.xmlencoding.should eq 'UTF-8'
         | 
| 119 122 | 
             
            	end
         | 
| 120 123 | 
             
            	it "uses :nokogiri" do
         | 
| @@ -122,8 +125,56 @@ describe "MultiSAX::Sax.parse (IO)" do | |
| 122 125 | 
             
            		MultiSAX::Sax.open(:nokogiri)
         | 
| 123 126 | 
             
            		MultiSAX::Sax.parser.should eq :nokogiri
         | 
| 124 127 | 
             
            		listener=MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new)
         | 
| 125 | 
            -
            		listener.result.should eq  | 
| 126 | 
            -
            		listener.attrib.should eq ' | 
| 128 | 
            +
            		listener.result.should eq xml_answer
         | 
| 129 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 127 130 | 
             
            		listener.xmlencoding.should eq 'UTF-8'
         | 
| 128 131 | 
             
            	end
         | 
| 129 132 | 
             
            end
         | 
| 133 | 
            +
             | 
| 134 | 
            +
            # broken intentionally
         | 
| 135 | 
            +
            input_html=<<"EOM"
         | 
| 136 | 
            +
            <html>
         | 
| 137 | 
            +
            <body>
         | 
| 138 | 
            +
            <span class="foo">hello
         | 
| 139 | 
            +
            </body>
         | 
| 140 | 
            +
            </html>
         | 
| 141 | 
            +
            EOM
         | 
| 142 | 
            +
            html_answer=['html','body','span','hello','span','body','html']
         | 
| 143 | 
            +
             | 
| 144 | 
            +
            describe "[HTML] MultiSAX::Sax.parse(String)" do
         | 
| 145 | 
            +
            	it "uses :oxhtml" do
         | 
| 146 | 
            +
            		MultiSAX::Sax.reset
         | 
| 147 | 
            +
            		MultiSAX::Sax.open(:oxhtml)
         | 
| 148 | 
            +
            		MultiSAX::Sax.parser.should eq :oxhtml
         | 
| 149 | 
            +
            		listener=MultiSAX::Sax.parse(input_html,MultiSAXTester.new)
         | 
| 150 | 
            +
            		listener.result.should eq html_answer
         | 
| 151 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 152 | 
            +
            	end
         | 
| 153 | 
            +
            	it "uses :nokogirihtml" do
         | 
| 154 | 
            +
            		MultiSAX::Sax.reset
         | 
| 155 | 
            +
            		MultiSAX::Sax.open(:nokogirihtml)
         | 
| 156 | 
            +
            		MultiSAX::Sax.parser.should eq :nokogirihtml
         | 
| 157 | 
            +
            		listener=MultiSAX::Sax.parse(input_html,MultiSAXTester.new)
         | 
| 158 | 
            +
            		listener.result.should eq html_answer
         | 
| 159 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 160 | 
            +
            	end
         | 
| 161 | 
            +
            end
         | 
| 162 | 
            +
             | 
| 163 | 
            +
            describe "[HTML] MultiSAX::Sax.parse(IO)" do
         | 
| 164 | 
            +
            	it "uses :oxhtml" do
         | 
| 165 | 
            +
            		MultiSAX::Sax.reset
         | 
| 166 | 
            +
            		MultiSAX::Sax.open(:oxhtml)
         | 
| 167 | 
            +
            		MultiSAX::Sax.parser.should eq :oxhtml
         | 
| 168 | 
            +
            		listener=MultiSAX::Sax.parse(StringIO.new(input_html),MultiSAXTester.new)
         | 
| 169 | 
            +
            		listener.result.should eq html_answer
         | 
| 170 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 171 | 
            +
            	end
         | 
| 172 | 
            +
            	it "uses :nokogirihtml" do
         | 
| 173 | 
            +
            		MultiSAX::Sax.reset
         | 
| 174 | 
            +
            		MultiSAX::Sax.open(:nokogirihtml)
         | 
| 175 | 
            +
            		MultiSAX::Sax.parser.should eq :nokogirihtml
         | 
| 176 | 
            +
            		listener=MultiSAX::Sax.parse(StringIO.new(input_html),MultiSAXTester.new)
         | 
| 177 | 
            +
            		listener.result.should eq html_answer
         | 
| 178 | 
            +
            		listener.attrib.should eq 'foo'
         | 
| 179 | 
            +
            	end
         | 
| 180 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: multisax
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - cielavenir
         | 
| @@ -16,14 +16,14 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - '>='
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: '0'
         | 
| 19 | 
            +
                    version: '1.0'
         | 
| 20 20 | 
             
              type: :development
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - '>='
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: '0'
         | 
| 26 | 
            +
                    version: '1.0'
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: rake
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         |