summaryrefslogtreecommitdiff
path: root/test/rss/test_dublincore.rb
blob: e1ee929afb9231958bd4236a2cbbec14fae23fec (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
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
require "cgi"
require "rexml/document"

require "rss-testcase"

require "rss/1.0"
require "rss/dublincore"

module RSS
  class TestDublinCore < TestCase

    def setup
      @prefix = "dc"
      @uri = "http://purl.org/dc/elements/1.1/"
      
      @parents = %w(channel image item textinput)
      
      t = Time.iso8601("2000-01-01T12:00:05+00:00")
      class << t
        alias_method(:to_s, :iso8601)
      end
      
      @elems = {
        :title => "hoge",
        :description =>
          " XML is placing increasingly heavy loads on
          the existing technical infrastructure of the Internet.",
        :creator => "Rael Dornfest (mailto:rael@oreilly.com)",
        :subject => "XML",
        :publisher => "The O'Reilly Network",
        :contributor => "hogehoge",
        :type => "fugafuga",
        :format => "hohoho",
        :identifier => "fufufu",
        :source => "barbar",
        :language => "ja",
        :relation => "cococo",
        :rights => "Copyright (c) 2000 O'Reilly &amp; Associates, Inc.",
        :date => t,
      }

      @dc_nodes = @elems.collect do |name, value|
        "<#{@prefix}:#{name}>#{value}</#{@prefix}:#{name}>"
      end.join("\n")

      @rss_source = make_RDF(<<-EOR, {@prefix =>  @uri})
#{make_channel(@dc_nodes)}
#{make_image(@dc_nodes)}
#{make_item(@dc_nodes)}
#{make_textinput(@dc_nodes)}
EOR

      @rss = Parser.parse(@rss_source)
    end
  
    def test_parser

      assert_nothing_raised do
        Parser.parse(@rss_source)
      end
    
      @elems.each do |tag, value|
        assert_too_much_tag(tag.to_s, "channel") do
          Parser.parse(make_RDF(<<-EOR, {@prefix => @uri}))
#{make_channel(("<" + @prefix + ":" + tag.to_s + ">" +
  value.to_s +
  "</" + @prefix + ":" + tag.to_s + ">") * 2)}
#{make_item}
EOR
        end
      end

    end
  
    def test_accessor
    
      new_value = "hoge"

      @elems.each do |name, value|
        @parents.each do |parent|
          parsed_value = @rss.send(parent).send("dc_#{name}")
          if parsed_value.kind_of?(String)
            parsed_value = CGI.escapeHTML(parsed_value)
          end
          assert_equal(value, parsed_value)
          if name == :date
            t = Time.iso8601("2003-01-01T02:30:23+09:00")
            class << t
              alias_method(:to_s, :iso8601)
            end
            @rss.send(parent).send("dc_#{name}=", t.iso8601)
            assert_equal(t, @rss.send(parent).send("dc_#{name}"))
            assert_equal(t, @rss.send(parent).date)
            
            @rss.send(parent).date = value
            assert_equal(value, @rss.send(parent).date)
            assert_equal(value, @rss.send(parent).send("dc_#{name}"))
          else
            @rss.send(parent).send("dc_#{name}=", new_value)
            assert_equal(new_value, @rss.send(parent).send("dc_#{name}"))
          end
        end
      end

    end

    def test_to_s
      
      @elems.each do |name, value|
        excepted = "<#{@prefix}:#{name}>#{value}</#{@prefix}:#{name}>"
        @parents.each do |parent|
          assert_equal(excepted, @rss.send(parent).send("dc_#{name}_element"))
        end
      end
      
      REXML::Document.new(@rss_source).root.each_element do |parent|
        if @parents.include?(parent.name)
          parent.each_element do |elem|
            if elem.namespace == @uri
              assert_equal(CGI.escapeHTML(elem.text), @elems[elem.name.intern].to_s)
            end
          end
        end
      end
      
    end

  end
end