class TestHTreeGet

Public Instance Methods

ok(e, s) click to toggle source
# File vendor/qwik/lib/qwik/htree-get.rb, line 145
def ok(e, s)
  return '' if s.nil?
  ok_eq(e, s.format_xml)
end
test_all() click to toggle source
# File vendor/qwik/lib/qwik/htree-get.rb, line 150
    def test_all
      # test_get_tag
      e = HTree::Elem.new('e')

      # test_split_name_num
      ok_eq(['sidebar', 1], e.split_name_num('sidebar'))
      ok_eq(['sidebar', 1], e.split_name_num("sidebar[1]"))
      ok_eq(['sidebar', 2], e.split_name_num("sidebar[2]"))

      # test_get_tag
      h = HTree("<a><b><c>")
      ok("<c/>", h.get_tag('c'))
      ok("<b><c/></b>", h.get_tag('b'))

      # test_each_in_class
      h = HTree("<p class='a'><ta/></p><p class='b'><tb/></p><p class='b'><tb2/></p>")
      h.each_in_class('a') {|l|
        ok_eq("doc()/p[1]/ta", l.path)
        ok("<ta/>", l.to_node)
      }
      h.each_in_class('b') {|l|
        ok_eq("doc()/p[2]/tb", l.path)
        ok("<tb/>", l.to_node)
      }
      h.each_in_class("b[2]") {|l|
        ok_eq("doc()/p[3]/tb2", l.path)
        ok("<tb2/>", l.to_node)
      }

      ok("<ta/>", h.get_class_tag('a', 'ta'))
      ok("<tb/>", h.get_class_tag('b', 'tb'))
      ok("<tb2/>", h.get_class_tag("b[2]", 'tb2'))

      str = <<'EOS'    
<html><div class='main'>
<div class='day'><h2>bh2</h2></div>
<div class='sidebar'><h2>sh2</h2></div>
</div></html>
EOS
      h = HTree(str)
      ok("<html><div class=\"main\">\n<div class=\"day\"><h2>bh2</h2></div>\n<div class=\"sidebar\"><h2>sh2</h2></div>\n</div></html>\n", h)
      ok("<h2>bh2</h2>", h.get_tag('h2'))
      ok("<h2>sh2</h2>", h.get_tag("h2[2]"))
      ok("<h2>bh2</h2>", h.get_class_tag('day', 'h2'))
      ok("<h2>sh2</h2>", h.get_class_tag('sidebar', 'h2'))

      # test_get_tag2
      h = HTree("<a><b>tb</b><b>tb2</b><c>")
      ok("<b>tb</b>", h.get_tag('b'))
      ok_eq(nil, h.get_tag('nosuchtag'))
      ok("<b>tb</b>", h.get_tag("b[1]"))
      ok("<b>tb2</b>", h.get_tag("b[2]"))
      ok("<b>tb</b>", h.get_tag("//b"))

      # test_xpath
      str = <<'EOS'
<html><div class='main'>
<div class='day'><h2>bh2</h2></div>
<div class='sidebar'><h2>sh2<b>a</b>sh2a</h2></div>
</div></html>
EOS
      h = HTree(str)
      #ok("<html><div class=\"main\">\n<div class=\"day\"><h2>bh2</h2></div>\n<div class=\"sidebar\"><h2>sh2</h2></div>\n</div></html>\n", h)
      #ok("<h2>sh2</h2>", h.get_class_tag('sidebar', 'h2'))
      #ok("<h2>sh2<b>a</b>sh2a</h2>", h.get_class('sidebar'))
      ok("<div class=\"sidebar\"><h2>sh2<b>a</b>sh2a</h2></div>",
         h.get_class('sidebar'))
      ok_instance_of(HTree::Elem, h.get_class('sidebar'))
      ok("<b>a</b>", h.get_class('sidebar').get_tag('b'))
      ok("<div class=\"sidebar\"><h2>sh2<b>a</b>sh2a</h2></div>",
         h.get_a_path("div[@class='sidebar']"))
      ok("<b>a</b>", h.get_a_path("div[@class='sidebar']").get_a_path('b'))
      ok("<div class=\"sidebar\"><h2>sh2<b>a</b>sh2a</h2></div>",
         h.get_path("//div[@class='sidebar']"))
      ok("<b>a</b>", h.get_path("//div[@class='sidebar']/b"))

      str = <<'EOS'
<a href='t1' alt='t2'>t3</a>
EOS
      h = HTree(str)
      ok_instance_of(HTree::Doc, h)
      e = h.get_tag('a')
      ok_instance_of(HTree::Elem, e)
      ok("<a href=\"t1\" alt=\"t2\">t3</a>", e)
      #ok_eq({href=>{text 't1'}, alt=>{text 't2'}}, e.attributes)
      ok_eq({'href'=>'t1', 'alt'=>'t2'}, e.attributes_str)

      # test_xpath_attr
      str = <<'EOS'
<html><div class='main'>
<div id='menu'><h2>menuh2</h2></div>
</div></html>
EOS
      h = HTree(str)
      ok("<div id=\"menu\"><h2>menuh2</h2></div>",
         h.get_has_attr('id', 'menu'))
      ok_instance_of(HTree::Elem, h.get_has_attr('id', 'menu'))
      ok("<div id=\"menu\"><h2>menuh2</h2></div>",
         h.get_path("//div[@id='menu']"))
    end