From 456ba712fe921f2387611055b67090d70dfad071 Mon Sep 17 00:00:00 2001 From: kou Date: Fri, 25 Nov 2005 03:43:48 +0000 Subject: * lib/rss/rss.rb: improved type conversion. * lib/rss/1.0.rb: ditto. * lib/rss/0.9.rb: ditto. * lib/rss/2.0.rb: ditto. * lib/rss/image.rb: ditto. * lib/rss/syndication.rb: ditto. * test/rss/test_2.0.rb: added type conversion tests. * test/rss/test_accessor.rb: ditto. * test/rss/test_to_s.rb: ditto. * test/rss/test_syndication.rb: ditto. * test/rss/test_setup_maker_2.0.rb: ditto. * test/rss/test_setup_maker_1.0.rb: ditto. * test/rss/test_setup_maker_0.9.rb: ditto. * test/rss/test_maker_sy.rb: ditto. * test/rss/test_maker_image.rb: ditto. * test/rss/test_maker_2.0.rb: ditto. * test/rss/test_maker_0.9.rb: ditto. * test/rss/test_image.rb: ditto. * test/rss/test_maker_1.0.rb: use assert instead of assert_equal. * test/rss/rss-assertions.rb: improved type conversion assertions. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 26 ++++++++++ lib/rss/0.9.rb | 78 +++++++++++++++--------------- lib/rss/1.0.rb | 14 +++--- lib/rss/2.0.rb | 29 ++++++----- lib/rss/image.rb | 53 ++++++++++---------- lib/rss/rss.rb | 102 +++++++++++++++++++++++++++++++++++---- lib/rss/syndication.rb | 23 +++------ test/rss/rss-assertions.rb | 42 ++++++++++++---- test/rss/test_2.0.rb | 53 ++++++++++++-------- test/rss/test_accessor.rb | 83 ++++++++++++++++++++++++++++++- test/rss/test_image.rb | 42 +++++++++++++--- test/rss/test_maker_0.9.rb | 20 ++++---- test/rss/test_maker_1.0.rb | 2 +- test/rss/test_maker_2.0.rb | 32 ++++++------ test/rss/test_maker_image.rb | 8 +-- test/rss/test_maker_sy.rb | 2 +- test/rss/test_setup_maker_0.9.rb | 16 +++--- test/rss/test_setup_maker_1.0.rb | 4 +- test/rss/test_setup_maker_2.0.rb | 26 +++++----- test/rss/test_syndication.rb | 14 +++--- test/rss/test_to_s.rb | 10 ++-- 21 files changed, 461 insertions(+), 218 deletions(-) diff --git a/ChangeLog b/ChangeLog index 08b3221136..001ccf18a8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,29 @@ +Fri Nov 25 12:39:56 2005 Kouhei Sutou + + * lib/rss/rss.rb: improved type conversion. + * lib/rss/1.0.rb: ditto. + * lib/rss/0.9.rb: ditto. + * lib/rss/2.0.rb: ditto. + * lib/rss/image.rb: ditto. + * lib/rss/syndication.rb: ditto. + + * test/rss/test_2.0.rb: added type conversion tests. + * test/rss/test_accessor.rb: ditto. + * test/rss/test_to_s.rb: ditto. + * test/rss/test_syndication.rb: ditto. + * test/rss/test_setup_maker_2.0.rb: ditto. + * test/rss/test_setup_maker_1.0.rb: ditto. + * test/rss/test_setup_maker_0.9.rb: ditto. + * test/rss/test_maker_sy.rb: ditto. + * test/rss/test_maker_image.rb: ditto. + * test/rss/test_maker_2.0.rb: ditto. + * test/rss/test_maker_0.9.rb: ditto. + * test/rss/test_image.rb: ditto. + + * test/rss/test_maker_1.0.rb: use assert instead of assert_equal. + + * test/rss/rss-assertions.rb: improved type conversion assertions. + Fri Nov 25 10:38:20 2005 Kouhei Sutou * lib/rss/image.rb: added Image prefix. diff --git a/lib/rss/0.9.rb b/lib/rss/0.9.rb index a4b2ba9b8f..f0060cbad5 100644 --- a/lib/rss/0.9.rb +++ b/lib/rss/0.9.rb @@ -269,7 +269,7 @@ module RSS def initialize(content=nil) super() - @content = content + self.content = content end end @@ -310,18 +310,12 @@ module RSS class Hour < Element include RSS09 - content_setup + content_setup(:integer) def initialize(content=nil) super() - @content = content - end - - remove_method :content= - def content=(value) - @content = value.to_i + self.content = content end - end end @@ -334,20 +328,24 @@ module RSS install_text_element(name) install_model(name, nil) end - %w(width height description).each do |name| - install_text_element(name) + [ + ["width", :integer], + ["height", :integer], + ["description"], + ].each do |name, type| + install_text_element(name, type) install_model(name, "?") end def initialize(url=nil, title=nil, link=nil, width=nil, height=nil, description=nil) super() - @url = url - @title = title - @link = link - @width = width - @height = height - @description = description + self.url = url + self.title = title + self.link = link + self.width = width + self.height = height + self.description = description end def to_s(need_convert=true, indent=calc_indent) @@ -386,21 +384,21 @@ module RSS [ ["domain", nil, true], - ["port", nil, true], + ["port", nil, true, :integer], ["path", nil, true], ["registerProcedure", nil, true], - ["protocol", nil ,true], - ].each do |name, uri, required| - install_get_attribute(name, uri, required) + ["protocol", nil, true], + ].each do |name, uri, required, type| + install_get_attribute(name, uri, required, type) end def initialize(domain=nil, port=nil, path=nil, rp=nil, protocol=nil) super() - @domain = domain - @port = port - @path = path - @registerProcedure = rp - @protocol = protocol + self.domain = domain + self.port = port + self.path = path + self.registerProcedure = rp + self.protocol = protocol end def to_s(need_convert=true, indent=calc_indent) @@ -511,8 +509,8 @@ module RSS def initialize(url=nil, content=nil) super() - @url = url - @content = content + self.url = url + self.content = content end private @@ -543,17 +541,17 @@ module RSS [ ["url", nil, true], - ["length", nil, true], + ["length", nil, true, :integer], ["type", nil, true], - ].each do |name, uri, required| - install_get_attribute(name, uri, required) + ].each do |name, uri, required, type| + install_get_attribute(name, uri, required, type) end def initialize(url=nil, length=nil, type=nil) super() - @url = url - @length = length - @type = type + self.url = url + self.length = length + self.type = type end def to_s(need_convert=true, indent=calc_indent) @@ -596,8 +594,8 @@ module RSS def initialize(domain=nil, content=nil) super() - @domain = domain - @content = content + self.domain = domain + self.content = content end private @@ -631,10 +629,10 @@ module RSS def initialize(title=nil, description=nil, name=nil, link=nil) super() - @title = title - @description = description - @name = name - @link = link + self.title = title + self.description = description + self.name = name + self.link = link end def to_s(need_convert=true, indent=calc_indent) diff --git a/lib/rss/1.0.rb b/lib/rss/1.0.rb index 6603d525d3..36d6f5df87 100644 --- a/lib/rss/1.0.rb +++ b/lib/rss/1.0.rb @@ -113,7 +113,7 @@ module RSS def initialize(resource=nil) super() - @resource = resource + self.resource = resource end def full_name @@ -293,7 +293,7 @@ module RSS def initialize(about=nil) super() - @about = about + self.about = about end def to_s(need_convert=true, indent=calc_indent) @@ -364,7 +364,7 @@ module RSS def initialize(resource=nil) super() - @resource = resource + self.resource = resource end def to_s(need_convert=true, indent=calc_indent) @@ -401,7 +401,7 @@ module RSS def initialize(resource=nil) super() - @resource = resource + self.resource = resource end def to_s(need_convert=true, indent=calc_indent) @@ -509,7 +509,7 @@ module RSS def initialize(about=nil) super() - @about = about + self.about = about end def to_s(need_convert=true, indent=calc_indent) @@ -579,7 +579,7 @@ module RSS def initialize(about=nil) super() - @about = about + self.about = about end def to_s(need_convert=true, indent=calc_indent) @@ -654,7 +654,7 @@ module RSS def initialize(about=nil) super() - @about = about + self.about = about end def to_s(need_convert=true, indent=calc_indent) diff --git a/lib/rss/2.0.rb b/lib/rss/2.0.rb index 66474ff76d..1c3c22ee70 100644 --- a/lib/rss/2.0.rb +++ b/lib/rss/2.0.rb @@ -6,16 +6,14 @@ module RSS class Channel - %w(generator ttl).each do |name| - install_text_element(name) + [ + ["generator"], + ["ttl", :integer], + ].each do |name, type| + install_text_element(name, type) install_model(name, '?') end - remove_method :ttl= - def ttl=(value) - @ttl = value.to_i - end - [ %w(category categories), ].each do |name, plural_name| @@ -126,17 +124,24 @@ EOT include RSS09 [ - ["isPermaLink", nil, false] - ].each do |name, uri, required| - install_get_attribute(name, uri, required) + ["isPermaLink", nil, false, :boolean] + ].each do |name, uri, required, type| + install_get_attribute(name, uri, required, type) end content_setup def initialize(isPermaLink=nil, content=nil) super() - @isPermaLink = isPermaLink - @content = content + self.isPermaLink = isPermaLink + self.content = content + end + + alias_method :_PermaLink?, :PermaLink? + private :_PermaLink? + def PermaLink? + perma = _PermaLink? + perma or perma.nil? end private diff --git a/lib/rss/image.rb b/lib/rss/image.rb index 818edd4f2c..9d3326efca 100644 --- a/lib/rss/image.rb +++ b/lib/rss/image.rb @@ -63,14 +63,20 @@ module RSS %w(width height).each do |tag| full_name = "#{IMAGE_PREFIX}_#{tag}" - install_text_element(full_name) + disp_name = "#{IMAGE_PREFIX}:#{tag}" + install_text_element(full_name, :integer, disp_name) BaseListener.install_get_text_element(IMAGE_URI, tag, "#{full_name}=") end + alias width= image_width= + alias width image_width + alias height= image_height= + alias height image_height + def initialize(about=nil, resource=nil) super() - @about = about - @resource = resource + self.about = about + self.resource = resource end def full_name @@ -87,29 +93,6 @@ module RSS rv end - alias _image_width= image_width= - def image_width=(new_value) - if @do_validate - self._image_width = Integer(new_value) - else - self._image_width = new_value.to_i - end - end - - alias _image_height= image_height= - def image_height=(new_value) - if @do_validate - self._image_height = Integer(new_value) - else - self._image_height = new_value.to_i - end - end - - alias width= image_width= - alias width image_width - alias height= image_height= - alias height image_height - private def _tags [ @@ -177,13 +160,27 @@ module RSS install_get_attribute(name, uri, required) end + AVAILABLE_SIZES = %w(small medium large) + alias_method :_size=, :size= + private :_size= + def size=(new_value) + if @do_validate and !new_value.nil? + new_value = new_value.strip + unless AVAILABLE_SIZES.include?(new_value) + attr_name = "#{IMAGE_PREFIX}:size" + raise NotAvailableValueError.new(full_name, new_value, attr_name) + end + end + funcall(:_size=, new_value) + end + alias image_size= size= alias image_size size def initialize(about=nil, size=nil) super() - @about = about - @size = size + self.about = about + self.size = size end def full_name diff --git a/lib/rss/rss.rb b/lib/rss/rss.rb index 17e56d5a7d..589478665c 100644 --- a/lib/rss/rss.rb +++ b/lib/rss/rss.rb @@ -117,10 +117,13 @@ module RSS end class NotAvailableValueError < InvalidRSSError - attr_reader :tag, :value - def initialize(tag, value) - @tag, @value = tag, value - super("value <#{value}> of tag <#{tag}> is not available.") + attr_reader :tag, :value, :attribute + def initialize(tag, value, attribute=nil) + @tag, @value, @attribute = tag, value, attribute + message = "value <#{value}> of " + message << "attribute <#{attribute}> of " if attribute + message << "tag <#{tag}> is not available." + super(message) end end @@ -192,11 +195,11 @@ EOC end end - def install_text_element(name) + def install_text_element(name, type=nil, disp_name=name) self::ELEMENTS << name add_need_initialize_variable(name) - attr_writer name + def_corresponded_attr_writer name, type, disp_name convert_attr_reader name install_element(name) do |n, elem_name| <<-EOC @@ -306,6 +309,68 @@ EOC EOC end + def integer_writer(name, disp_name=name) + module_eval(<<-EOC, *get_file_and_line_from_caller(2)) + def #{name}=(new_value) + if new_value.nil? + @#{name} = new_value + else + if @do_validate + begin + @#{name} = Integer(new_value) + rescue ArgumentError + raise NotAvailableValueError.new('#{disp_name}', new_value) + end + else + @#{name} = new_value.to_i + end + end + end +EOC + end + + def positive_integer_writer(name, disp_name=name) + module_eval(<<-EOC, *get_file_and_line_from_caller(2)) + def #{name}=(new_value) + if new_value.nil? + @#{name} = new_value + else + if @do_validate + begin + tmp = Integer(new_value) + raise ArgumentError if tmp <= 0 + @#{name} = tmp + rescue ArgumentError + raise NotAvailableValueError.new('#{disp_name}', new_value) + end + else + @#{name} = new_value.to_i + end + end + end +EOC + end + + def boolean_writer(name, disp_name=name) + module_eval(<<-EOC, *get_file_and_line_from_caller(2)) + def #{name}=(new_value) + if new_value.nil? + @#{name} = new_value + else + if @do_validate and + ![true, false, "true", "false"].include?(new_value) + raise NotAvailableValueError.new('#{disp_name}', new_value) + end + if [true, false].include?(new_value) + @#{name} = new_value + else + @#{name} = new_value == "true" + end + end + end +EOC + end + def def_children_accessor(accessor_name, plural_name) module_eval(<<-EOC, *get_file_and_line_from_caller(2)) def #{plural_name} @@ -437,14 +502,31 @@ EOC end end - def self.install_get_attribute(name, uri, required=true) - attr_writer name + def self.install_get_attribute(name, uri, required=true, + type=nil, disp_name=name) + def_corresponded_attr_writer name, type, disp_name convert_attr_reader name + if type == :boolean and /^is/ =~ name + alias_method "\#{$POSTMATCH}?", name + end GET_ATTRIBUTES << [name, uri, required] end - def self.content_setup - attr_writer :content + def self.def_corresponded_attr_writer(name, type=nil, disp_name=name) + case type + when :integer + integer_writer name, disp_name + when :positive_integer + positive_integer_writer name, disp_name + when :boolean + boolean_writer name, disp_name + else + attr_writer name + end + end + + def self.content_setup(type=nil) + def_corresponded_attr_writer "content", type convert_attr_reader :content def_content_only_to_s @have_content = true diff --git a/lib/rss/syndication.rb b/lib/rss/syndication.rb index 56976085a1..8791ec24fc 100644 --- a/lib/rss/syndication.rb +++ b/lib/rss/syndication.rb @@ -17,8 +17,12 @@ module RSS super klass.module_eval(<<-EOC, *get_file_and_line_from_caller(1)) - %w(updatePeriod updateFrequency).each do |name| - install_text_element("\#{SY_PREFIX}_\#{name}") + [ + ["updatePeriod"], + ["updateFrequency", :positive_integer] + ].each do |name, type| + install_text_element("\#{SY_PREFIX}_\#{name}", type, + "\#{SY_PREFIX}:\#{name}") end %w(updateBase).each do |name| @@ -31,12 +35,6 @@ module RSS validate_sy_updatePeriod(new_value) if @do_validate self._sy_updatePeriod = new_value end - - alias_method(:_sy_updateFrequency=, :sy_updateFrequency=) - def sy_updateFrequency=(new_value) - validate_sy_updateFrequency(new_value) if @do_validate - self._sy_updateFrequency = new_value.to_i - end EOC end @@ -61,15 +59,6 @@ module RSS raise NotAvailableValueError.new("updatePeriod", value) end end - - SY_UPDATEFREQUENCY_AVAILABLE_RE = /\A\s*\+?\d+\s*\z/ - def validate_sy_updateFrequency(value) - value = value.to_s.strip - if SY_UPDATEFREQUENCY_AVAILABLE_RE !~ value - raise NotAvailableValueError.new("updateFrequency", value) - end - end - end class RDF diff --git a/test/rss/rss-assertions.rb b/test/rss/rss-assertions.rb index cb757a9ae4..f90eb7f3f2 100644 --- a/test/rss/rss-assertions.rb +++ b/test/rss/rss-assertions.rb @@ -83,7 +83,7 @@ module RSS end end - def assert_not_available_value(tag, value) + def assert_not_available_value(tag, value, attribute=nil) _wrap_assertion do begin yield @@ -91,6 +91,7 @@ module RSS rescue ::RSS::NotAvailableValueError => e assert_equal(tag, e.tag) assert_equal(value, e.value) + assert_equal(attribute, e.attribute) end end end @@ -256,14 +257,16 @@ module RSS _wrap_assertion do hours = skipHours.hours contents.each_with_index do |content, i| - assert_equal(content, hours[i].content) + assert_equal(content.to_i, hours[i].content) end end end def assert_image09(attrs, image) _wrap_assertion do - names = %w(url link title description width height) + names = %w(url link title description) + names << ["width", :integer] + names << ["height", :integer] assert_attributes(attrs, names, image) end end @@ -291,7 +294,8 @@ module RSS names = %w(title link description language copyright managingEditor webMaster pubDate - lastBuildDate generator docs ttl rating) + lastBuildDate generator docs rating) + names << ["ttl", :integer] assert_attributes(attrs, names, channel) %w(cloud categories skipHours skipDays).each do |name| @@ -314,7 +318,8 @@ module RSS def assert_channel20_cloud(attrs, cloud) _wrap_assertion do - names = %w(domain port path registerProcedure protocol) + names = %w(domain path registerProcedure protocol) + names << ["port", :integer] assert_attributes(attrs, names, cloud) end end @@ -330,7 +335,9 @@ module RSS def assert_image20(attrs, image) _wrap_assertion do - names = %w(url link title description width height) + names = %w(url link title description) + names << ["width", :integer] + names << ["height", :integer] assert_attributes(attrs, names, image) end end @@ -362,7 +369,7 @@ module RSS def assert_items20_enclosure(attrs, enclosure) _wrap_assertion do - names = %w(url length type) + names = ["url", ["length", :integer], "type"] assert_attributes(attrs, names, enclosure) end end @@ -375,7 +382,8 @@ module RSS def assert_items20_guid(attrs, guid) _wrap_assertion do - assert_attributes(attrs, %w(isPermaLink content), guid) + names = [["isPermaLink", :boolean], ["content"]] + assert_attributes(attrs, names, guid) end end @@ -408,7 +416,9 @@ module RSS def assert_syndication(elems, target) _wrap_assertion do elems.each do |name, value| - assert_equal(value, target.__send__("sy_#{name}")) + meth = "sy_#{name}" + value = value.to_i if meth == "sy_updateFrequency" + assert_equal(value, target.__send__(meth )) end end end @@ -458,13 +468,25 @@ module RSS def assert_attributes(attrs, names, target) _wrap_assertion do n_attrs = normalized_attrs(attrs) - names.each do |name| + names.each do |info| + if info.is_a?(String) + name = info + type = nil + else + name, type = info + end value = n_attrs[name] if value.is_a?(Time) actual = target.__send__(name) assert_instance_of(Time, actual) assert_equal(value.to_i, actual.to_i) elsif value + case type + when :integer + value = value.to_i + when :boolean + value = value == "true" if value.is_a?(String) + end assert_equal(value, target.__send__(name)) end end diff --git a/test/rss/test_2.0.rb b/test/rss/test_2.0.rb index 238d3efaa9..5e2e6bd851 100644 --- a/test/rss/test_2.0.rb +++ b/test/rss/test_2.0.rb @@ -75,9 +75,9 @@ module RSS generator = "MightyInHouse Content System v2.3" docs = "http://blogs.law.harvard.edu/tech/rss" - ttl = 60 + ttl = "60" - rating = 6 + rating = '(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true comment "RSACi North America Server" for "http://www.rsac.org" on "1996.04.16T08:15-0500" r (n 0 s 0 v 0 l 0))' channel = Rss::Channel.new @@ -85,7 +85,9 @@ module RSS managingEditor webMaster pubDate lastBuildDate generator docs ttl rating) elems.each do |x| - channel.__send__("#{x}=", instance_eval(x)) + value = instance_eval(x) + value = value.rfc822 if %w(pubDate lastBuildDate).include?(x) + channel.__send__("#{x}=", value) end categories.each do |cat| channel.categories << Rss::Channel::Category.new(cat[:domain], @@ -103,7 +105,8 @@ module RSS case x when "pubDate", "lastBuildDate" assert_equal(expected, Time.parse(elem.text)) - when "ttl", "rating" + when "ttl" + expected = channel.__send__(x) assert_equal(expected, elem.text.to_i) else assert_equal(expected, elem.text) @@ -124,7 +127,7 @@ module RSS def test_channel_cloud cloud_params = { :domain => "rpc.sys.com", - :port => 80, + :port => "80", :path => "/RPC2", :registerProcedure => "myCloud.rssPleaseNotify", :protocol => "xml-rpc", @@ -134,7 +137,8 @@ module RSS cloud_params[:path], cloud_params[:registerProcedure], cloud_params[:protocol]) - + cloud_params[:port] = cloud.port + doc = REXML::Document.new(cloud.to_s) cloud_elem = doc.root @@ -151,8 +155,8 @@ module RSS :url => "http://hoge.com/hoge.png", :title => "fugafuga", :link => "http://hoge.com", - :width => 144, - :height => 400, + :width => "144", + :height => "400", :description => "an image", } image = Rss::Channel::Image.new(image_params[:url], @@ -166,6 +170,7 @@ module RSS image_elem = doc.root image_params.each do |name, value| + value = image.__send__(name) actual = image_elem.elements[name.to_s].text actual = actual.to_i if [:width, :height].include?(name) assert_equal(value, actual) @@ -213,8 +218,8 @@ module RSS def test_channel_skip_hours skipHours_values = [ - 0, - 13, + "0", + "13", ] skipHours = Rss::Channel::SkipHours.new skipHours_values.each do |value| @@ -225,7 +230,8 @@ module RSS hours_elem = doc.root skipHours_values.each_with_index do |value, i| - assert_equal(value, hours_elem.elements[i + 1].text.to_i) + expected = skipHours.hours[i].content + assert_equal(expected, hours_elem.elements[i + 1].text.to_i) end end @@ -252,7 +258,9 @@ module RSS elems = %w(title link description author comments pubDate) elems.each do |x| - item.__send__("#{x}=", instance_eval(x)) + value = instance_eval(x) + value = value.rfc822 if x == "pubDate" + item.__send__("#{x}=", value) end categories.each do |cat| item.categories << Rss::Channel::Category.new(cat[:domain], @@ -290,23 +298,21 @@ module RSS def test_item_enclosure enclosure_params = { :url => "http://www.scripting.com/mp3s/weatherReportSuite.mp3", - :length => 12216320, + :length => "12216320", :type => "audio/mpeg", } enclosure = Rss::Channel::Item::Enclosure.new(enclosure_params[:url], enclosure_params[:length], enclosure_params[:type]) - + enclosure_params[:length] = enclosure.length + doc = REXML::Document.new(enclosure.to_s) enclosure_elem = doc.root actual = {} enclosure_elem.attributes.each do |name, value| - if name == "length" - enclosure_params[name.to_sym] = value.to_i - value = value.to_i - end + value = value.to_i if name == "length" actual[name.to_sym] = value end assert_equal(enclosure_params, actual) @@ -326,13 +332,22 @@ module RSS test_params.each do |guid_params| guid = Rss::Channel::Item::Guid.new(guid_params[:isPermaLink], guid_params[:content]) - + if guid_params.has_key?(:isPermaLink) + guid_params[:isPermaLink] = guid.isPermaLink + end + if guid.isPermaLink.nil? + assert_equal(true, guid.PermaLink?) + else + assert_equal(guid.isPermaLink, guid.PermaLink?) + end + doc = REXML::Document.new(guid.to_s) guid_elem = doc.root actual = {} actual[:content] = guid_elem.text if guid_elem.text guid_elem.attributes.each do |name, value| + value = value == "true" if name == "isPermaLink" actual[name.to_sym] = value end assert_equal(guid_params, actual) diff --git a/test/rss/test_accessor.rb b/test/rss/test_accessor.rb index 5281a81c2c..ceb31fc9c2 100644 --- a/test/rss/test_accessor.rb +++ b/test/rss/test_accessor.rb @@ -2,13 +2,13 @@ require "rss-testcase" require "rss/1.0" require "rss/2.0" +require "rss/syndication" +require "rss/image" module RSS class TestAccessor < TestCase - def test_date channel = Rss::Channel.new - channel.do_validate = false channel.pubDate = nil assert_nil(channel.pubDate) @@ -16,9 +16,88 @@ module RSS channel.pubDate = time assert_equal(time, channel.pubDate) + time = Time.parse(Time.now.rfc822) + channel.pubDate = time.rfc822 + assert_equal(time, channel.pubDate) + + time = Time.parse(Time.now.iso8601) + value = time.iso8601 + assert_not_available_value("pubDate", value) do + channel.pubDate = value + end + + channel.do_validate = false + time = Time.parse(Time.now.iso8601) + value = time.iso8601 + channel.pubDate = value + assert_equal(time, channel.pubDate) + channel.pubDate = nil assert_nil(channel.pubDate) end + def test_integer + image_item = RDF::Item::ImageItem.new + + image_item.width = nil + assert_nil(image_item.width) + + width = 10 + image_item.width = width + assert_equal(width, image_item.width) + + width = 10.0 + image_item.width = width + assert_equal(width, image_item.width) + + width = "10" + image_item.width = width + assert_equal(width.to_i, image_item.width) + + width = "10.0" + assert_not_available_value("image:width", width) do + image_item.width = width + end + + image_item.do_validate = false + width = "10.0" + image_item.width = width + assert_equal(width.to_i, image_item.width) + + image_item.width = nil + assert_nil(image_item.width) + end + + def test_positive_integer + channel = RDF::Channel.new + + channel.sy_updateFrequency = nil + assert_nil(channel.sy_updateFrequency) + + freq = 10 + channel.sy_updateFrequency = freq + assert_equal(freq, channel.sy_updateFrequency) + + freq = 10.0 + channel.sy_updateFrequency = freq + assert_equal(freq, channel.sy_updateFrequency) + + freq = "10" + channel.sy_updateFrequency = freq + assert_equal(freq.to_i, channel.sy_updateFrequency) + + freq = "10.0" + assert_not_available_value("sy:updateFrequency", freq) do + channel.sy_updateFrequency = freq + end + + channel.do_validate = false + freq = "10.0" + channel.sy_updateFrequency = freq + assert_equal(freq.to_i, channel.sy_updateFrequency) + + channel.sy_updateFrequency = nil + assert_nil(channel.sy_updateFrequency) + end end end diff --git a/test/rss/test_image.rb b/test/rss/test_image.rb index e268205004..0fb9fce276 100644 --- a/test/rss/test_image.rb +++ b/test/rss/test_image.rb @@ -26,8 +26,8 @@ module RSS }, { "dc:title" => "Example Image", - "#{@prefix}:width" => 100, - "#{@prefix}:height" => 65, + "#{@prefix}:width" => "100", + "#{@prefix}:height" => "65", }, ], [ @@ -36,8 +36,8 @@ module RSS }, { "dc:title" => "Culture", - "#{@prefix}:width" => 80, - "#{@prefix}:height" => 50, + "#{@prefix}:width" => "80", + "#{@prefix}:height" => "50", }, ] ] @@ -93,6 +93,23 @@ EOR assert_equal(@favicon_attrs[full_name], favicon.__send__(name)) end + %w(small medium large).each do |value| + assert_nothing_raised do + favicon.size = value + favicon.image_size = value + end + end + + %w(aaa AAA SMALL MEDIUM LARGE).each do |value| + args = ["#{@prefix}:favicon", value, "#{@prefix}:size"] + assert_not_available_value(*args) do + favicon.size = value + end + assert_not_available_value(*args) do + favicon.image_size = value + end + end + [ %w(dc_title dc:title sample-favicon), ].each do |name, full_name, new_value| @@ -120,10 +137,19 @@ EOR end [ - ["width", "image:width", 111], - ["image_width", "image:width", 44], - ["height", "image:height", 222], - ["image_height", "image:height", 88], + ["width", "image:width", "111"], + ["image_width", "image:width", "44"], + ["height", "image:height", "222"], + ["image_height", "image:height", "88"], + ].each do |name, full_name, new_value| + assert_equal(contents[full_name].to_i, image_item.__send__(name)) + image_item.__send__("#{name}=", new_value) + assert_equal(new_value.to_i, image_item.__send__(name)) + image_item.__send__("#{name}=", contents[full_name]) + assert_equal(contents[full_name].to_i, image_item.__send__(name)) + end + + [ ["dc_title", "dc:title", "sample-image"], ].each do |name, full_name, new_value| assert_equal(contents[full_name], image_item.__send__(name)) diff --git a/test/rss/test_maker_0.9.rb b/test/rss/test_maker_0.9.rb index 8fdd5f2d68..d8556887e1 100644 --- a/test/rss/test_maker_0.9.rb +++ b/test/rss/test_maker_0.9.rb @@ -55,15 +55,15 @@ module RSS copyright = "foo" managingEditor = "bar" webMaster = "web master" - rating = "6" + rating = '(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true comment "RSACi North America Server" for "http://www.rsac.org" on "1996.04.16T08:15-0500" r (n 0 s 0 v 0 l 0))' docs = "http://foo.com/doc" skipDays = [ "Sunday", "Monday", ] skipHours = [ - 0, - 13, + "0", + "13", ] pubDate = Time.now lastBuildDate = Time.now @@ -109,7 +109,7 @@ module RSS assert_equal(day, channel.skipDays.days[i].content) end skipHours.each_with_index do |hour, i| - assert_equal(hour, channel.skipHours.hours[i].content) + assert_equal(hour.to_i, channel.skipHours.hours[i].content) end assert(channel.items.empty?) @@ -165,8 +165,8 @@ module RSS title = "fugafuga" link = "http://hoge.com" url = "http://hoge.com/hoge.png" - width = 144 - height = 400 + width = "144" + height = "400" description = "an image" rss = RSS::Maker.make("0.91") do |maker| @@ -183,8 +183,8 @@ module RSS assert_equal(title, image.title) assert_equal(link, image.link) assert_equal(url, image.url) - assert_equal(width, image.width) - assert_equal(height, image.height) + assert_equal(width.to_i, image.width) + assert_equal(height.to_i, image.height) assert_equal(description, image.description) assert_not_set_error("maker.channel", %w(description title language)) do @@ -205,8 +205,8 @@ module RSS title = "fugafuga" link = "http://hoge.com" url = "http://hoge.com/hoge.png" - width = 144 - height = 400 + width = "144" + height = "400" description = "an image" rss = RSS::Maker.make("0.91") do |maker| diff --git a/test/rss/test_maker_1.0.rb b/test/rss/test_maker_1.0.rb index dca50f7e69..9d90f3bedd 100644 --- a/test/rss/test_maker_1.0.rb +++ b/test/rss/test_maker_1.0.rb @@ -55,7 +55,7 @@ module RSS assert_equal(title, channel.title) assert_equal(link, channel.link) assert_equal(description, channel.description) - assert_equal(true, channel.items.Seq.lis.empty?) + assert(channel.items.Seq.lis.empty?) assert_nil(channel.image) assert_nil(channel.textinput) diff --git a/test/rss/test_maker_2.0.rb b/test/rss/test_maker_2.0.rb index b4d402a83e..2c581f75ea 100644 --- a/test/rss/test_maker_2.0.rb +++ b/test/rss/test_maker_2.0.rb @@ -49,15 +49,15 @@ module RSS copyright = "foo" managingEditor = "bar" webMaster = "web master" - rating = "6" + rating = '(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true comment "RSACi North America Server" for "http://www.rsac.org" on "1996.04.16T08:15-0500" r (n 0 s 0 v 0 l 0))' docs = "http://foo.com/doc" skipDays = [ "Sunday", "Monday", ] skipHours = [ - 0, - 13, + "0", + "13", ] pubDate = Time.now lastBuildDate = Time.now @@ -66,7 +66,7 @@ module RSS "misc", ] generator = "RSS Maker" - ttl = 60 + ttl = "60" rss = RSS::Maker.make("2.0") do |maker| maker.channel.title = title @@ -117,7 +117,7 @@ module RSS assert_equal(day, channel.skipDays.days[i].content) end skipHours.each_with_index do |hour, i| - assert_equal(hour, channel.skipHours.hours[i].content) + assert_equal(hour.to_i, channel.skipHours.hours[i].content) end channel.categories.each_with_index do |category, i| @@ -125,7 +125,7 @@ module RSS end assert_equal(generator, channel.generator) - assert_equal(ttl, channel.ttl) + assert_equal(ttl.to_i, channel.ttl) assert(channel.items.empty?) assert_nil(channel.image) @@ -193,7 +193,7 @@ module RSS end cloud = rss.channel.cloud assert_equal(domain, cloud.domain) - assert_equal(port, cloud.port) + assert_equal(port.to_i, cloud.port) assert_equal(path, cloud.path) assert_equal(registerProcedure, cloud.registerProcedure) assert_equal(protocol, cloud.protocol) @@ -267,8 +267,8 @@ module RSS title = "fugafuga" link = "http://hoge.com" url = "http://hoge.com/hoge.png" - width = 144 - height = 400 + width = "144" + height = "400" description = "an image" rss = RSS::Maker.make("2.0") do |maker| @@ -285,8 +285,8 @@ module RSS assert_equal(title, image.title) assert_equal(link, image.link) assert_equal(url, image.url) - assert_equal(width, image.width) - assert_equal(height, image.height) + assert_equal(width.to_i, image.width) + assert_equal(height.to_i, image.height) assert_equal(description, image.description) assert_not_set_error("maker.channel", %w(title description)) do @@ -307,8 +307,8 @@ module RSS title = "fugafuga" link = "http://hoge.com" url = "http://hoge.com/hoge.png" - width = 144 - height = 400 + width = "144" + height = "400" description = "an image" rss = RSS::Maker.make("2.0") do |maker| @@ -418,7 +418,7 @@ module RSS end def test_guid - isPermaLink = true + isPermaLink = "true" content = "http://inessential.com/2002/09/01.php#a2" rss = RSS::Maker.make("2.0") do |maker| @@ -430,7 +430,7 @@ module RSS guid.content = content end guid = rss.channel.items.last.guid - assert_equal(isPermaLink, guid.isPermaLink) + assert_equal(isPermaLink == "true", guid.isPermaLink) assert_equal(content, guid.content) end @@ -463,7 +463,7 @@ module RSS end enclosure = rss.channel.items.last.enclosure assert_equal(url, enclosure.url) - assert_equal(length, enclosure.length) + assert_equal(length.to_i, enclosure.length) assert_equal(type, enclosure.type) end diff --git a/test/rss/test_maker_image.rb b/test/rss/test_maker_image.rb index 1c161b2593..1fc8076c46 100644 --- a/test/rss/test_maker_image.rb +++ b/test/rss/test_maker_image.rb @@ -17,8 +17,8 @@ module RSS "about" => "http://www.example.org/item.png", "resource" => "http://www.example.org/item", "dc_title" => "Example Image", - "image_width" => 100, - "image_height" => 65, + "image_width" => "100", + "image_height" => "65", } end @@ -53,8 +53,8 @@ module RSS item = target.items.last.image_item assert_equal(@item_infos["about"], item.about) assert_equal(@item_infos["resource"], item.resource) - assert_equal(@item_infos["image_width"], item.image_width) - assert_equal(@item_infos["image_height"], item.image_height) + assert_equal(@item_infos["image_width"].to_i, item.image_width) + assert_equal(@item_infos["image_height"].to_i, item.image_height) assert_equal(@item_infos["dc_title"], item.dc_title) end end diff --git a/test/rss/test_maker_sy.rb b/test/rss/test_maker_sy.rb index 58e95d917a..fd6df9a0eb 100644 --- a/test/rss/test_maker_sy.rb +++ b/test/rss/test_maker_sy.rb @@ -15,7 +15,7 @@ module RSS @elements = { :updatePeriod => "hourly", - :updateFrequency => 2, + :updateFrequency => "2", :updateBase => t, } end diff --git a/test/rss/test_setup_maker_0.9.rb b/test/rss/test_setup_maker_0.9.rb index 217ea8bf63..086065c2bc 100644 --- a/test/rss/test_setup_maker_0.9.rb +++ b/test/rss/test_setup_maker_0.9.rb @@ -13,15 +13,15 @@ module RSS copyright = "foo" managingEditor = "bar" webMaster = "web master" - rating = "6" + rating = '(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true comment "RSACi North America Server" for "http://www.rsac.org" on "1996.04.16T08:15-0500" r (n 0 s 0 v 0 l 0))' docs = "http://foo.com/doc" skipDays = [ "Sunday", "Monday", ] skipHours = [ - 0, - 13, + "0", + "13", ] pubDate = Time.now lastBuildDate = Time.now @@ -70,7 +70,7 @@ module RSS assert_equal(day, channel.skipDays.days[i].content) end skipHours.each_with_index do |hour, i| - assert_equal(hour, channel.skipHours.hours[i].content) + assert_equal(hour.to_i, channel.skipHours.hours[i].content) end assert(channel.items.empty?) @@ -82,8 +82,8 @@ module RSS title = "fugafuga" link = "http://hoge.com" url = "http://hoge.com/hoge.png" - width = 144 - height = 400 + width = "144" + height = "400" description = "an image" rss = RSS::Maker.make("0.91") do |maker| @@ -106,8 +106,8 @@ module RSS assert_equal(title, image.title) assert_equal(link, image.link) assert_equal(url, image.url) - assert_equal(width, image.width) - assert_equal(height, image.height) + assert_equal(width.to_i, image.width) + assert_equal(height.to_i, image.height) assert_equal(description, image.description) end diff --git a/test/rss/test_setup_maker_1.0.rb b/test/rss/test_setup_maker_1.0.rb index cd0958afde..95d8b310ba 100644 --- a/test/rss/test_setup_maker_1.0.rb +++ b/test/rss/test_setup_maker_1.0.rb @@ -32,7 +32,7 @@ module RSS @sy_elems = { :updatePeriod => "hourly", - :updateFrequency => 2, + :updateFrequency => "2", :updateBase => t, } @@ -107,6 +107,7 @@ module RSS end @sy_elems.each do |var, value| + value = value.to_i if var == :updateFrequency assert_equal(value, channel.__send__("sy_#{var}")) end @@ -473,6 +474,7 @@ module RSS assert_equal(value, channel.__send__("dc_#{var}")) end @sy_elems.each do |var, value| + value = value.to_i if var == :updateFrequency assert_equal(value, channel.__send__("sy_#{var}")) end diff --git a/test/rss/test_setup_maker_2.0.rb b/test/rss/test_setup_maker_2.0.rb index 6bf27d4682..a35096cf16 100644 --- a/test/rss/test_setup_maker_2.0.rb +++ b/test/rss/test_setup_maker_2.0.rb @@ -13,15 +13,15 @@ module RSS copyright = "foo" managingEditor = "bar" webMaster = "web master" - rating = "6" + rating = '(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true comment "RSACi North America Server" for "http://www.rsac.org" on "1996.04.16T08:15-0500" r (n 0 s 0 v 0 l 0))' docs = "http://foo.com/doc" skipDays = [ "Sunday", "Monday", ] skipHours = [ - 0, - 13, + "0", + "13", ] pubDate = Time.now lastBuildDate = Time.now @@ -30,7 +30,7 @@ module RSS "misc", ] generator = "RSS Maker" - ttl = 60 + ttl = "60" rss = RSS::Maker.make("2.0") do |maker| maker.channel.title = title @@ -85,7 +85,7 @@ module RSS assert_equal(day, channel.skipDays.days[i].content) end skipHours.each_with_index do |hour, i| - assert_equal(hour, channel.skipHours.hours[i].content) + assert_equal(hour.to_i, channel.skipHours.hours[i].content) end @@ -94,7 +94,7 @@ module RSS end assert_equal(generator, channel.generator) - assert_equal(ttl, channel.ttl) + assert_equal(ttl.to_i, channel.ttl) assert(channel.items.empty?) @@ -106,8 +106,8 @@ module RSS title = "fugafuga" link = "http://hoge.com" url = "http://hoge.com/hoge.png" - width = 144 - height = 400 + width = "144" + height = "400" description = "an image" rss = RSS::Maker.make("2.0") do |maker| @@ -130,8 +130,8 @@ module RSS assert_equal(title, image.title) assert_equal(link, image.link) assert_equal(url, image.url) - assert_equal(width, image.width) - assert_equal(height, image.height) + assert_equal(width.to_i, image.width) + assert_equal(height.to_i, image.height) assert_equal(description, image.description) end @@ -170,7 +170,7 @@ module RSS comments = "http://www.myblog.org/cgi-local/mt/mt-comments.cgi?entry_id=290" pubDate = Time.now - guid_isPermaLink = true + guid_isPermaLink = "true" guid_content = "http://inessential.com/2002/09/01.php#a2" enclosure_url = "http://www.scripting.com/mp3s/weatherReportSuite.mp3" @@ -234,11 +234,11 @@ module RSS assert_equal("#{comments}#{i}", item.comments) assert_equal(pubDate, item.pubDate) - assert_equal(guid_isPermaLink, item.guid.isPermaLink) + assert_equal(guid_isPermaLink == "true", item.guid.isPermaLink) assert_equal(guid_content, item.guid.content) assert_equal(enclosure_url, item.enclosure.url) - assert_equal(enclosure_length, item.enclosure.length) + assert_equal(enclosure_length.to_i, item.enclosure.length) assert_equal(enclosure_type, item.enclosure.type) assert_equal(source_url, item.source.url) diff --git a/test/rss/test_syndication.rb b/test/rss/test_syndication.rb index 0a3a21fa9e..894a7855ac 100644 --- a/test/rss/test_syndication.rb +++ b/test/rss/test_syndication.rb @@ -22,7 +22,7 @@ module RSS @elems = { :updatePeriod => "hourly", - :updateFrequency => 2, + :updateFrequency => "2", :updateBase => t, } @@ -68,16 +68,18 @@ EOR new_value = { :updatePeriod => "daily", - :updateFrequency => +11, + :updateFrequency => "11", :updateBase => t, } @elems.each do |name, value| + value = value.to_i if name == :updateFrequency @parents.each do |parent| - assert_equal(value, @rss.__send__(parent).funcall("sy_#{name}")) - @rss.__send__(parent).funcall("sy_#{name}=", new_value[name].to_s) - assert_equal(new_value[name], - @rss.__send__(parent).funcall("sy_#{name}")) + assert_equal(value, @rss.__send__(parent).__send__("sy_#{name}")) + @rss.__send__(parent).__send__("sy_#{name}=", new_value[name]) + new_val = new_value[name] + new_val = new_val.to_i if name == :updateFrequency + assert_equal(new_val, @rss.__send__(parent).__send__("sy_#{name}")) end end diff --git a/test/rss/test_to_s.rb b/test/rss/test_to_s.rb index d6c761e7ef..1538534034 100644 --- a/test/rss/test_to_s.rb +++ b/test/rss/test_to_s.rb @@ -146,13 +146,13 @@ module RSS "Friday", ], "skipHours" => [ - 12, - 23, + "12", + "23", ], "date" => Time.now, "lastBuildDate" => Time.now - 3600, "generator" => "RSS Maker", - "ttl" => 60, + "ttl" => "60", "cloud" => { "domain" => "rpc.sys.com", "port" => "80", @@ -187,7 +187,7 @@ module RSS "author" => "foo@example.com", "comments" => "http://example.com/1/comments", "guid" => { - "isPermaLink" => "ture", + "isPermaLink" => "true", "content" => "http://example.com/1", }, "enclosure" => { @@ -275,7 +275,7 @@ module RSS def setup_syndication_info @sy_info = { "updatePeriod" => "hourly", - "updateFrequency" => 2, + "updateFrequency" => "2", "updateBase" => Time.now - 3600, } end -- cgit v1.2.3