1require "rss-testcase" 2 3require "rss/maker" 4 5module RSS 6 class TestSetupMaker10 < TestCase 7 8 def setup 9 t = Time.iso8601("2000-01-01T12:00:05+00:00") 10 class << t 11 alias_method(:to_s, :iso8601) 12 end 13 14 @dc_elems = { 15 :title => "hoge", 16 :description => 17 " XML is placing increasingly heavy loads on 18 the existing technical infrastructure of the Internet.", 19 :creator => "Rael Dornfest (mailto:rael@oreilly.com)", 20 :subject => "XML", 21 :publisher => "The O'Reilly Network", 22 :contributor => "hogehoge", 23 :type => "fugafuga", 24 :format => "hohoho", 25 :identifier => "fufufu", 26 :source => "barbar", 27 :language => "ja", 28 :relation => "cococo", 29 :rights => "Copyright (c) 2000 O'Reilly & Associates, Inc.", 30 :date => t, 31 } 32 33 @sy_elems = { 34 :updatePeriod => "hourly", 35 :updateFrequency => "2", 36 :updateBase => t, 37 } 38 39 @content_elems = { 40 :encoded => "<em>ATTENTION</em>", 41 } 42 43 @trackback_elems = { 44 :ping => "http://bar.com/tb.cgi?tb_id=rssplustrackback", 45 :about => [ 46 "http://foo.com/trackback/tb.cgi?tb_id=20020923", 47 "http://foo.com/trackback/tb.cgi?tb_id=20021010", 48 ], 49 } 50 51 @taxo_topic_elems = [ 52 { 53 :link => "http://meerkat.oreillynet.com/?c=cat23", 54 :title => "Data: XML", 55 :description => "A Meerkat channel", 56 }, 57 { 58 :link => "http://dmoz.org/Computers/Data_Formats/Markup_Languages/XML/", 59 :title => "XML", 60 :subject => "XML", 61 :description => "DMOZ category", 62 :topics => [ 63 "http://meerkat.oreillynet.com/?c=cat23", 64 "http://dmoz.org/Computers/Data_Formats/Markup_Languages/SGML/", 65 "http://dmoz.org/Computers/Programming/Internet/", 66 ] 67 }, 68 ] 69 end 70 71 def test_setup_maker_channel 72 about = "http://hoge.com" 73 title = "fugafuga" 74 link = "http://hoge.com" 75 description = "fugafugafugafuga" 76 77 rss = RSS::Maker.make("1.0") do |maker| 78 maker.channel.about = about 79 maker.channel.title = title 80 maker.channel.link = link 81 maker.channel.description = description 82 83 @dc_elems.each do |var, value| 84 maker.channel.__send__("dc_#{var}=", value) 85 end 86 87 @sy_elems.each do |var, value| 88 maker.channel.__send__("sy_#{var}=", value) 89 end 90 91 setup_dummy_item(maker) 92 end 93 94 new_rss = RSS::Maker.make("1.0") do |maker| 95 rss.channel.setup_maker(maker) 96 rss.items.each do |item| 97 item.setup_maker(maker) 98 end 99 end 100 channel = new_rss.channel 101 102 assert_equal(about, channel.about) 103 assert_equal(title, channel.title) 104 assert_equal(link, channel.link) 105 assert_equal(description, channel.description) 106 assert_equal(1, channel.items.Seq.lis.size) 107 assert_nil(channel.image) 108 assert_nil(channel.textinput) 109 110 @dc_elems.each do |var, value| 111 assert_equal(value, channel.__send__("dc_#{var}")) 112 end 113 114 @sy_elems.each do |var, value| 115 value = value.to_i if var == :updateFrequency 116 assert_equal(value, channel.__send__("sy_#{var}")) 117 end 118 119 end 120 121 def test_setup_maker_image 122 title = "fugafuga" 123 link = "http://hoge.com" 124 url = "http://hoge.com/hoge.png" 125 126 rss = RSS::Maker.make("1.0") do |maker| 127 setup_dummy_channel(maker) 128 maker.channel.link = link 129 130 maker.image.title = title 131 maker.image.url = url 132 133 @dc_elems.each do |var, value| 134 maker.image.__send__("dc_#{var}=", value) 135 end 136 137 setup_dummy_item(maker) 138 end 139 140 new_rss = RSS::Maker.make("1.0") do |maker| 141 rss.channel.setup_maker(maker) 142 rss.image.setup_maker(maker) 143 rss.items.each do |item| 144 item.setup_maker(maker) 145 end 146 end 147 148 image = new_rss.image 149 assert_equal(url, image.about) 150 assert_equal(url, new_rss.channel.image.resource) 151 assert_equal(title, image.title) 152 assert_equal(link, image.link) 153 assert_equal(url, image.url) 154 155 @dc_elems.each do |var, value| 156 assert_equal(image.__send__("dc_#{var}"), value) 157 end 158 end 159 160 def test_setup_maker_textinput 161 title = "fugafuga" 162 description = "text hoge fuga" 163 name = "hoge" 164 link = "http://hoge.com" 165 166 rss = RSS::Maker.make("1.0") do |maker| 167 setup_dummy_channel(maker) 168 169 maker.textinput.link = link 170 maker.textinput.title = title 171 maker.textinput.description = description 172 maker.textinput.name = name 173 174 @dc_elems.each do |var, value| 175 maker.textinput.__send__("dc_#{var}=", value) 176 end 177 178 setup_dummy_item(maker) 179 end 180 181 new_rss = RSS::Maker.make("1.0") do |maker| 182 rss.channel.setup_maker(maker) 183 rss.textinput.setup_maker(maker) 184 rss.items.each do |item| 185 item.setup_maker(maker) 186 end 187 end 188 189 textinput = new_rss.textinput 190 assert_equal(link, textinput.about) 191 assert_equal(link, new_rss.channel.textinput.resource) 192 assert_equal(title, textinput.title) 193 assert_equal(name, textinput.name) 194 assert_equal(description, textinput.description) 195 assert_equal(link, textinput.link) 196 197 @dc_elems.each do |var, value| 198 assert_equal(textinput.__send__("dc_#{var}"), value) 199 end 200 end 201 202 def test_setup_maker_items(for_backward_compatibility=false) 203 title = "TITLE" 204 link = "http://hoge.com/" 205 description = "text hoge fuga" 206 207 item_size = 5 208 209 rss = RSS::Maker.make("1.0") do |maker| 210 setup_dummy_channel(maker) 211 212 item_size.times do |i| 213 maker.items.new_item do |item| 214 item.title = "#{title}#{i}" 215 item.link = "#{link}#{i}" 216 item.description = "#{description}#{i}" 217 218 @dc_elems.each do |var, value| 219 item.__send__("dc_#{var}=", value) 220 end 221 222 @content_elems.each do |var, value| 223 item.__send__("content_#{var}=", value) 224 end 225 226 item.trackback_ping = @trackback_elems[:ping] 227 @trackback_elems[:about].each do |value| 228 item.trackback_abouts.new_about do |new_about| 229 new_about.value = value 230 end 231 end 232 end 233 end 234 end 235 236 new_rss = RSS::Maker.make("1.0") do |maker| 237 rss.channel.setup_maker(maker) 238 239 rss.items.each do |item| 240 if for_backward_compatibility 241 item.setup_maker(maker) 242 else 243 item.setup_maker(maker.items) 244 end 245 end 246 end 247 248 assert_equal(item_size, new_rss.items.size) 249 new_rss.items.each_with_index do |item, i| 250 assert_equal("#{link}#{i}", item.about) 251 assert_equal("#{title}#{i}", item.title) 252 assert_equal("#{link}#{i}", item.link) 253 assert_equal("#{description}#{i}", item.description) 254 255 @dc_elems.each do |var, value| 256 assert_equal(item.__send__("dc_#{var}"), value) 257 end 258 259 @content_elems.each do |var, value| 260 assert_equal(item.__send__("content_#{var}"), value) 261 end 262 263 assert_equal(@trackback_elems[:ping], item.trackback_ping) 264 assert_equal(@trackback_elems[:about].size, item.trackback_abouts.size) 265 item.trackback_abouts.each_with_index do |about, j| 266 assert_equal(@trackback_elems[:about][j], about.value) 267 end 268 end 269 end 270 271 def test_setup_maker_items_sort 272 title = "TITLE" 273 link = "http://hoge.com/" 274 description = "text hoge fuga" 275 276 item_size = 5 277 278 rss = RSS::Maker.make("1.0") do |maker| 279 setup_dummy_channel(maker) 280 281 item_size.times do |i| 282 item = RSS::RDF::Item.new("#{link}#{i}") 283 item.title = "#{title}#{i}" 284 item.link = "#{link}#{i}" 285 item.description = "#{description}#{i}" 286 item.dc_date = Time.now + i * 60 287 item.setup_maker(maker.items) 288 end 289 maker.items.do_sort = false 290 end 291 assert_equal(item_size, rss.items.size) 292 rss.items.each_with_index do |item, i| 293 assert_equal("#{link}#{i}", item.about) 294 assert_equal("#{title}#{i}", item.title) 295 assert_equal("#{link}#{i}", item.link) 296 assert_equal("#{description}#{i}", item.description) 297 end 298 299 300 rss = RSS::Maker.make("1.0") do |maker| 301 setup_dummy_channel(maker) 302 303 item_size.times do |i| 304 item = RSS::RDF::Item.new("#{link}#{i}") 305 item.title = "#{title}#{i}" 306 item.link = "#{link}#{i}" 307 item.description = "#{description}#{i}" 308 item.dc_date = Time.now + i * 60 309 item.setup_maker(maker.items) 310 end 311 maker.items.do_sort = true 312 end 313 assert_equal(item_size, rss.items.size) 314 rss.items.reverse.each_with_index do |item, i| 315 assert_equal("#{link}#{i}", item.about) 316 assert_equal("#{title}#{i}", item.title) 317 assert_equal("#{link}#{i}", item.link) 318 assert_equal("#{description}#{i}", item.description) 319 end 320 end 321 322 def test_setup_maker_items_backward_compatibility 323 test_setup_maker_items(true) 324 end 325 326 def test_setup_maker 327 encoding = "EUC-JP" 328 standalone = true 329 330 href = 'a.xsl' 331 type = 'text/xsl' 332 title = 'sample' 333 media = 'printer' 334 charset = 'UTF-8' 335 alternate = 'yes' 336 337 rss = RSS::Maker.make("1.0") do |maker| 338 maker.encoding = encoding 339 maker.standalone = standalone 340 341 maker.xml_stylesheets.new_xml_stylesheet do |xss| 342 xss.href = href 343 xss.type = type 344 xss.title = title 345 xss.media = media 346 xss.charset = charset 347 xss.alternate = alternate 348 end 349 350 setup_dummy_channel(maker) 351 setup_dummy_item(maker) 352 end 353 354 new_rss = RSS::Maker.make("1.0") do |maker| 355 rss.setup_maker(maker) 356 end 357 358 assert_equal("1.0", new_rss.rss_version) 359 assert_equal(encoding, new_rss.encoding) 360 assert_equal(standalone, new_rss.standalone) 361 362 xss = new_rss.xml_stylesheets.first 363 assert_equal(1, new_rss.xml_stylesheets.size) 364 assert_equal(href, xss.href) 365 assert_equal(type, xss.type) 366 assert_equal(title, xss.title) 367 assert_equal(media, xss.media) 368 assert_equal(charset, xss.charset) 369 assert_equal(alternate, xss.alternate) 370 end 371 372 def test_setup_maker_full 373 encoding = "EUC-JP" 374 standalone = true 375 376 href = 'a.xsl' 377 type = 'text/xsl' 378 title = 'sample' 379 media = 'printer' 380 charset = 'UTF-8' 381 alternate = 'yes' 382 383 channel_about = "http://hoge.com" 384 channel_title = "fugafuga" 385 channel_link = "http://hoge.com" 386 channel_description = "fugafugafugafuga" 387 388 image_title = "fugafuga" 389 image_url = "http://hoge.com/hoge.png" 390 391 textinput_title = "fugafuga" 392 textinput_description = "text hoge fuga" 393 textinput_name = "hoge" 394 textinput_link = "http://hoge.com" 395 396 item_title = "TITLE" 397 item_link = "http://hoge.com/" 398 item_description = "text hoge fuga" 399 400 item_size = 5 401 402 rss = RSS::Maker.make("1.0") do |maker| 403 maker.encoding = encoding 404 maker.standalone = standalone 405 406 maker.xml_stylesheets.new_xml_stylesheet do |xss| 407 xss.href = href 408 xss.type = type 409 xss.title = title 410 xss.media = media 411 xss.charset = charset 412 xss.alternate = alternate 413 end 414 415 maker.channel.about = channel_about 416 maker.channel.title = channel_title 417 maker.channel.link = channel_link 418 maker.channel.description = channel_description 419 @dc_elems.each do |var, value| 420 maker.channel.__send__("dc_#{var}=", value) 421 end 422 @sy_elems.each do |var, value| 423 maker.channel.__send__("sy_#{var}=", value) 424 end 425 426 maker.image.title = image_title 427 maker.image.url = image_url 428 @dc_elems.each do |var, value| 429 maker.image.__send__("dc_#{var}=", value) 430 end 431 432 maker.textinput.link = textinput_link 433 maker.textinput.title = textinput_title 434 maker.textinput.description = textinput_description 435 maker.textinput.name = textinput_name 436 @dc_elems.each do |var, value| 437 maker.textinput.__send__("dc_#{var}=", value) 438 end 439 440 item_size.times do |i| 441 maker.items.new_item do |item| 442 item.title = "#{item_title}#{i}" 443 item.link = "#{item_link}#{i}" 444 item.description = "#{item_description}#{i}" 445 446 @dc_elems.each do |var, value| 447 item.__send__("dc_#{var}=", value) 448 end 449 450 @content_elems.each do |var, value| 451 item.__send__("content_#{var}=", value) 452 end 453 454 item.trackback_ping = @trackback_elems[:ping] 455 @trackback_elems[:about].each do |value| 456 item.trackback_abouts.new_about do |new_about| 457 new_about.value = value 458 end 459 end 460 end 461 end 462 463 setup_taxo_topic(maker, @taxo_topic_elems) 464 end 465 466 new_rss = RSS::Maker.make("1.0") do |maker| 467 rss.setup_maker(maker) 468 end 469 470 assert_equal("1.0", new_rss.rss_version) 471 assert_equal(encoding, new_rss.encoding) 472 assert_equal(standalone, new_rss.standalone) 473 474 xss = new_rss.xml_stylesheets.first 475 assert_equal(1, new_rss.xml_stylesheets.size) 476 assert_equal(href, xss.href) 477 assert_equal(type, xss.type) 478 assert_equal(title, xss.title) 479 assert_equal(media, xss.media) 480 assert_equal(charset, xss.charset) 481 assert_equal(alternate, xss.alternate) 482 483 channel = new_rss.channel 484 assert_equal(channel_about, channel.about) 485 assert_equal(channel_title, channel.title) 486 assert_equal(channel_link, channel.link) 487 assert_equal(channel_description, channel.description) 488 item_resources = [] 489 item_size.times do |i| 490 item_resources << "#{item_link}#{i}" 491 end 492 assert_equal(item_resources, channel.items.resources) 493 assert_equal(image_url, channel.image.resource) 494 assert_equal(textinput_link, channel.textinput.resource) 495 @dc_elems.each do |var, value| 496 assert_equal(value, channel.__send__("dc_#{var}")) 497 end 498 @sy_elems.each do |var, value| 499 value = value.to_i if var == :updateFrequency 500 assert_equal(value, channel.__send__("sy_#{var}")) 501 end 502 503 image = new_rss.image 504 assert_equal(image_url, image.about) 505 assert_equal(image_url, new_rss.channel.image.resource) 506 assert_equal(image_title, image.title) 507 assert_equal(channel_link, image.link) 508 assert_equal(image_url, image.url) 509 @dc_elems.each do |var, value| 510 assert_equal(image.__send__("dc_#{var}"), value) 511 end 512 513 textinput = new_rss.textinput 514 assert_equal(textinput_link, textinput.about) 515 assert_equal(textinput_link, new_rss.channel.textinput.resource) 516 assert_equal(textinput_title, textinput.title) 517 assert_equal(textinput_name, textinput.name) 518 assert_equal(textinput_description, textinput.description) 519 assert_equal(textinput_link, textinput.link) 520 @dc_elems.each do |var, value| 521 assert_equal(textinput.__send__("dc_#{var}"), value) 522 end 523 524 assert_equal(item_size, new_rss.items.size) 525 new_rss.items.each_with_index do |item, i| 526 assert_equal("#{item_link}#{i}", item.about) 527 assert_equal("#{item_title}#{i}", item.title) 528 assert_equal("#{item_link}#{i}", item.link) 529 assert_equal("#{item_description}#{i}", item.description) 530 531 @dc_elems.each do |var, value| 532 assert_equal(item.__send__("dc_#{var}"), value) 533 end 534 535 @content_elems.each do |var, value| 536 assert_equal(item.__send__("content_#{var}"), value) 537 end 538 539 assert_equal(@trackback_elems[:ping], item.trackback_ping) 540 assert_equal(@trackback_elems[:about].size, item.trackback_abouts.size) 541 item.trackback_abouts.each_with_index do |about, j| 542 assert_equal(@trackback_elems[:about][j], about.value) 543 end 544 end 545 546 assert_taxo_topic(@taxo_topic_elems, new_rss) 547 end 548 549 end 550end 551