summaryrefslogtreecommitdiff
path: root/test/rexml/test_xpath_attribute_query.rb
blob: c0ad2c2e8ca2c413ff2fcbbff733f93d956c97f9 (plain)
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
# rexml_xpath_attribute_query.rb
# May 16, 2007
#

require 'test/unit'
require 'rexml/document'

class TestRexmlXpathAttributeQuery < Test::Unit::TestCase

  # xmlstr1 and xmlstr2 only differ in the second line - namespaces in the root element
  @@xmlstr1 = '<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:gd="http://schemas.google.com/g/2005" xmlns:gCal="http://schemas.google.com/gCal/2005">
  <id>http://www.google.com/calendar/feeds/me%40gmail.com</id>
  <entry>
    <id>http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com</id>
    <published>2007-05-16T13:42:27.942Z</published>
    <updated>2007-05-15T03:29:28.000Z</updated>
    <title type="text">My Calendar</title>
    <link rel="alternate" type="application/atom+xml" href="http://www.google.com/calendar/feeds/me%40gmail.com/private/full"/>
    <link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml" href="http://www.google.com/calendar/feeds/me%40gmail.com/acl/full"/>
    <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com"/>
    <author>
      <name>Me</name>
      <email>me@gmail.com</email>
    </author>
  </entry>
</feed>'


  @@xmlstr2 = '<?xml version="1.0" encoding="UTF-8"?>
<feed>
  <id>http://www.google.com/calendar/feeds/me%40gmail.com</id>
  <entry>
    <id>http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com</id>
    <published>2007-05-16T13:42:27.942Z</published>
    <updated>2007-05-15T03:29:28.000Z</updated>
    <title type="text">My Calendar</title>
    <link rel="alternate" type="application/atom+xml" href="http://www.google.com/calendar/feeds/me%40gmail.com/private/full"/>
    <link rel="http://schemas.google.com/acl/2007#accessControlList" type="application/atom+xml" href="http://www.google.com/calendar/feeds/me%40gmail.com/acl/full"/>
    <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com"/>
    <author>
      <name>Me</name>
      <email>me@gmail.com</email>
    </author>
  </entry>
</feed>'

  # Fails
  def test_xpath_query
    do_test @@xmlstr1
  end

  # Passes
  def test_xpath_query_no_namespace
    do_test @@xmlstr2
  end

  def do_test(xmlString)
    hrefs = [
      "http://www.google.com/calendar/feeds/me%40gmail.com/private/full",
      "http://www.google.com/calendar/feeds/me%40gmail.com/acl/full",
      "http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com"
    ]
    ctr=0
    REXML::Document.new(xmlString).elements.each("feed/entry") do |element|
      @alternate_link = element.elements["link[@rel='alternate']"]
      assert_not_nil( @alternate_link )
      assert_equal( hrefs[ctr], @alternate_link.attributes['href'])
      ctr += 1
    end
  end


  def test_another_way
    doc = REXML::Document.new(@@xmlstr1)
    hrefs = [
      "http://www.google.com/calendar/feeds/me%40gmail.com/private/full",
      "http://www.google.com/calendar/feeds/me%40gmail.com/acl/full",
      "http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com"
    ]
    ctr=0
    REXML::XPath.each(doc, "//link[@rel='alternate']") do |element|
      @alternate_link = element
      assert_not_nil @alternate_link
      assert_equal( hrefs[ctr], @alternate_link.attributes['href'])
      ctr += 1
    end
  end
end