diff --git a/lib/oga/xml/lexer.rb b/lib/oga/xml/lexer.rb index 655d36e..8021bdc 100644 --- a/lib/oga/xml/lexer.rb +++ b/lib/oga/xml/lexer.rb @@ -347,7 +347,7 @@ module Oga # Called on the closing `>` of the open tag of an element. # def on_element_open_end - if html? and HTML_VOID_ELEMENTS.include?(current_element) + if html? and HTML_VOID_ELEMENTS.include?(current_element.downcase) add_token(:T_ELEM_END) @elements.pop end diff --git a/spec/oga/xml/lexer/html_void_elements_spec.rb b/spec/oga/xml/lexer/html_void_elements_spec.rb index aac509f..69fc97a 100644 --- a/spec/oga/xml/lexer/html_void_elements_spec.rb +++ b/spec/oga/xml/lexer/html_void_elements_spec.rb @@ -10,6 +10,14 @@ describe Oga::XML::Lexer do ] end + example 'lex a upper case void element' do + lex('
', :html => true).should == [ + [:T_ELEM_START, nil, 1], + [:T_ELEM_NAME, "BR", 1], + [:T_ELEM_END, nil, 1] + ] + end + example 'lex text after a void element' do lex('foo', :html => true).should == [ [:T_ELEM_START, nil, 1], diff --git a/spec/oga/xml/parser/html_void_elements_spec.rb b/spec/oga/xml/parser/html_void_elements_spec.rb index 9166746..24a661e 100644 --- a/spec/oga/xml/parser/html_void_elements_spec.rb +++ b/spec/oga/xml/parser/html_void_elements_spec.rb @@ -29,6 +29,20 @@ describe Oga::XML::Parser do end end + context 'void elements with different casing' do + before :all do + @node_uc = parse_html('
').children[0] + end + + example 'parse void elements with different casing' do + @node_uc.is_a?(Oga::XML::Element).should == true + end + + example 'set the name of the void element to match casing' do + @node_uc.name.should == 'BR' + end + end + context 'void elements with attributes' do before :all do @node = parse('', :html => true).children[0]