1require "rss-testcase" 2 3require "rss/maker" 4 5module RSS 6 class TestMaker09 < TestCase 7 def test_supported? 8 assert(RSS::Maker.supported?("0.9")) 9 assert(RSS::Maker.supported?("rss0.9")) 10 assert(RSS::Maker.supported?("0.91")) 11 assert(RSS::Maker.supported?("rss0.91")) 12 assert(RSS::Maker.supported?("0.92")) 13 assert(RSS::Maker.supported?("rss0.92")) 14 assert(!RSS::Maker.supported?("0.93")) 15 assert(!RSS::Maker.supported?("rss0.93")) 16 end 17 18 def test_find_class 19 assert_equal(RSS::Maker::RSS091, RSS::Maker["0.91"]) 20 assert_equal(RSS::Maker::RSS091, RSS::Maker["rss0.91"]) 21 assert_equal(RSS::Maker::RSS092, RSS::Maker["0.9"]) 22 assert_equal(RSS::Maker::RSS092, RSS::Maker["0.92"]) 23 assert_equal(RSS::Maker::RSS092, RSS::Maker["rss0.92"]) 24 end 25 26 def test_rss 27 assert_raise(LocalJumpError) do 28 RSS::Maker.make("0.91") 29 end 30 31 rss = RSS::Maker.make("0.9") do |maker| 32 setup_dummy_channel(maker) 33 setup_dummy_image(maker) 34 end 35 assert_equal("0.92", rss.rss_version) 36 37 rss = RSS::Maker.make("0.91") do |maker| 38 setup_dummy_channel(maker) 39 setup_dummy_image(maker) 40 end 41 assert_equal("0.91", rss.rss_version) 42 43 44 rss = RSS::Maker.make("0.91") do |maker| 45 setup_dummy_channel(maker) 46 setup_dummy_image(maker) 47 48 maker.encoding = "EUC-JP" 49 end 50 assert_equal("0.91", rss.rss_version) 51 assert_equal("EUC-JP", rss.encoding) 52 53 rss = RSS::Maker.make("0.91") do |maker| 54 setup_dummy_channel(maker) 55 setup_dummy_image(maker) 56 57 maker.standalone = "yes" 58 end 59 assert_equal("0.91", rss.rss_version) 60 assert_equal("yes", rss.standalone) 61 62 rss = RSS::Maker.make("0.91") do |maker| 63 setup_dummy_channel(maker) 64 setup_dummy_image(maker) 65 66 maker.encoding = "EUC-JP" 67 maker.standalone = "yes" 68 end 69 assert_equal("0.91", rss.rss_version) 70 assert_equal("EUC-JP", rss.encoding) 71 assert_equal("yes", rss.standalone) 72 end 73 74 def test_channel 75 title = "fugafuga" 76 link = "http://hoge.com" 77 description = "fugafugafugafuga" 78 language = "ja" 79 copyright = "foo" 80 managingEditor = "bar" 81 webMaster = "web master" 82 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))' 83 docs = "http://foo.com/doc" 84 skipDays = [ 85 "Sunday", 86 "Monday", 87 ] 88 skipHours = [ 89 "0", 90 "13", 91 ] 92 pubDate = Time.now 93 lastBuildDate = Time.now 94 95 image_url = "http://example.com/logo.png" 96 image_title = "Logo" 97 98 rss = RSS::Maker.make("0.91") do |maker| 99 maker.channel.title = title 100 maker.channel.link = link 101 maker.channel.description = description 102 maker.channel.language = language 103 maker.channel.copyright = copyright 104 maker.channel.managingEditor = managingEditor 105 maker.channel.webMaster = webMaster 106 maker.channel.rating = rating 107 maker.channel.docs = docs 108 maker.channel.pubDate = pubDate 109 maker.channel.lastBuildDate = lastBuildDate 110 111 skipDays.each do |day| 112 maker.channel.skipDays.new_day do |new_day| 113 new_day.content = day 114 end 115 end 116 skipHours.each do |hour| 117 maker.channel.skipHours.new_hour do |new_hour| 118 new_hour.content = hour 119 end 120 end 121 122 maker.image.url = image_url 123 maker.image.title = image_title 124 end 125 channel = rss.channel 126 127 assert_equal(title, channel.title) 128 assert_equal(link, channel.link) 129 assert_equal(description, channel.description) 130 assert_equal(language, channel.language) 131 assert_equal(copyright, channel.copyright) 132 assert_equal(managingEditor, channel.managingEditor) 133 assert_equal(webMaster, channel.webMaster) 134 assert_equal(rating, channel.rating) 135 assert_equal(docs, channel.docs) 136 assert_equal(pubDate, channel.pubDate) 137 assert_equal(pubDate, channel.date) 138 assert_equal(lastBuildDate, channel.lastBuildDate) 139 140 skipDays.each_with_index do |day, i| 141 assert_equal(day, channel.skipDays.days[i].content) 142 end 143 skipHours.each_with_index do |hour, i| 144 assert_equal(hour.to_i, channel.skipHours.hours[i].content) 145 end 146 147 assert(channel.items.empty?) 148 149 assert_equal(image_url, channel.image.url) 150 assert_equal(image_title, channel.image.title) 151 assert_equal(link, channel.image.link) 152 153 assert_nil(channel.textInput) 154 end 155 156 def test_not_valid_channel 157 title = "fugafuga" 158 link = "http://hoge.com" 159 description = "fugafugafugafuga" 160 language = "ja" 161 162 assert_not_set_error("maker.channel", %w(title)) do 163 RSS::Maker.make("0.91") do |maker| 164 # maker.channel.title = title 165 maker.channel.link = link 166 maker.channel.description = description 167 maker.channel.language = language 168 end 169 end 170 171 assert_not_set_error("maker.channel", %w(link)) do 172 RSS::Maker.make("0.91") do |maker| 173 maker.channel.title = title 174 # maker.channel.link = link 175 maker.channel.link = nil 176 maker.channel.description = description 177 maker.channel.language = language 178 end 179 end 180 181 assert_not_set_error("maker.channel", %w(description)) do 182 RSS::Maker.make("0.91") do |maker| 183 maker.channel.title = title 184 maker.channel.link = link 185 # maker.channel.description = description 186 maker.channel.language = language 187 end 188 end 189 190 assert_not_set_error("maker.channel", %w(language)) do 191 RSS::Maker.make("0.91") do |maker| 192 maker.channel.title = title 193 maker.channel.link = link 194 maker.channel.description = description 195 # maker.channel.language = language 196 end 197 end 198 end 199 200 def test_image 201 title = "fugafuga" 202 link = "http://hoge.com" 203 url = "http://hoge.com/hoge.png" 204 width = "144" 205 height = "400" 206 description = "an image" 207 208 rss = RSS::Maker.make("0.91") do |maker| 209 setup_dummy_channel(maker) 210 maker.channel.link = link 211 212 maker.image.title = title 213 maker.image.url = url 214 maker.image.width = width 215 maker.image.height = height 216 maker.image.description = description 217 end 218 image = rss.image 219 assert_equal(title, image.title) 220 assert_equal(link, image.link) 221 assert_equal(url, image.url) 222 assert_equal(width.to_i, image.width) 223 assert_equal(height.to_i, image.height) 224 assert_equal(description, image.description) 225 226 assert_not_set_error("maker.channel", %w(description title language)) do 227 RSS::Maker.make("0.91") do |maker| 228 # setup_dummy_channel(maker) 229 maker.channel.link = link 230 231 maker.image.title = title 232 maker.image.url = url 233 maker.image.width = width 234 maker.image.height = height 235 maker.image.description = description 236 end 237 end 238 end 239 240 def test_not_valid_image 241 title = "fugafuga" 242 link = "http://hoge.com" 243 url = "http://hoge.com/hoge.png" 244 width = "144" 245 height = "400" 246 description = "an image" 247 248 assert_not_set_error("maker.image", %w(title)) do 249 RSS::Maker.make("0.91") do |maker| 250 setup_dummy_channel(maker) 251 maker.channel.link = link 252 253 # maker.image.title = title 254 maker.image.url = url 255 maker.image.width = width 256 maker.image.height = height 257 maker.image.description = description 258 end 259 end 260 261 assert_not_set_error("maker.channel", %w(link)) do 262 RSS::Maker.make("0.91") do |maker| 263 setup_dummy_channel(maker) 264 # maker.channel.link = link 265 maker.channel.link = nil 266 267 maker.image.title = title 268 maker.image.url = url 269 maker.image.width = width 270 maker.image.height = height 271 maker.image.description = description 272 end 273 end 274 275 assert_not_set_error("maker.image", %w(url)) do 276 RSS::Maker.make("0.91") do |maker| 277 setup_dummy_channel(maker) 278 maker.channel.link = link 279 280 maker.image.title = title 281 # maker.image.url = url 282 maker.image.width = width 283 maker.image.height = height 284 maker.image.description = description 285 end 286 end 287 end 288 289 def test_items(with_convenience_way=true) 290 title = "TITLE" 291 link = "http://hoge.com/" 292 description = "text hoge fuga" 293 294 rss = RSS::Maker.make("0.91") do |maker| 295 setup_dummy_channel(maker) 296 setup_dummy_image(maker) 297 end 298 assert(rss.channel.items.empty?) 299 300 rss = RSS::Maker.make("0.91") do |maker| 301 setup_dummy_channel(maker) 302 303 maker.items.new_item do |item| 304 item.title = title 305 item.link = link 306 # item.description = description 307 end 308 309 setup_dummy_image(maker) 310 end 311 assert_equal(1, rss.channel.items.size) 312 item = rss.channel.items.first 313 assert_equal(title, item.title) 314 assert_equal(link, item.link) 315 assert_nil(item.description) 316 317 318 item_size = 5 319 rss = RSS::Maker.make("0.91") do |maker| 320 setup_dummy_channel(maker) 321 322 item_size.times do |i| 323 maker.items.new_item do |_item| 324 _item.title = "#{title}#{i}" 325 _item.link = "#{link}#{i}" 326 _item.description = "#{description}#{i}" 327 end 328 end 329 maker.items.do_sort = true 330 331 setup_dummy_image(maker) 332 end 333 assert_equal(item_size, rss.items.size) 334 rss.channel.items.each_with_index do |_item, i| 335 assert_equal("#{title}#{i}", _item.title) 336 assert_equal("#{link}#{i}", _item.link) 337 assert_equal("#{description}#{i}", _item.description) 338 end 339 340 rss = RSS::Maker.make("0.91") do |maker| 341 setup_dummy_channel(maker) 342 343 item_size.times do |i| 344 maker.items.new_item do |_item| 345 _item.title = "#{title}#{i}" 346 _item.link = "#{link}#{i}" 347 _item.description = "#{description}#{i}" 348 end 349 end 350 maker.items.do_sort = Proc.new do |x, y| 351 if with_convenience_way 352 y.title[-1] <=> x.title[-1] 353 else 354 y.title {|t| t.content[-1]} <=> x.title {|t| t.content[-1]} 355 end 356 end 357 358 setup_dummy_image(maker) 359 end 360 assert_equal(item_size, rss.items.size) 361 rss.channel.items.reverse.each_with_index do |_item, i| 362 assert_equal("#{title}#{i}", _item.title) 363 assert_equal("#{link}#{i}", _item.link) 364 assert_equal("#{description}#{i}", _item.description) 365 end 366 end 367 368 def test_items_with_new_api_since_018 369 test_items(false) 370 end 371 372 def test_textInput 373 title = "fugafuga" 374 description = "text hoge fuga" 375 name = "hoge" 376 link = "http://hoge.com" 377 378 rss = RSS::Maker.make("0.91") do |maker| 379 setup_dummy_channel(maker) 380 setup_dummy_image(maker) 381 382 maker.textinput.title = title 383 maker.textinput.description = description 384 maker.textinput.name = name 385 maker.textinput.link = link 386 end 387 textInput = rss.channel.textInput 388 assert_equal(title, textInput.title) 389 assert_equal(description, textInput.description) 390 assert_equal(name, textInput.name) 391 assert_equal(link, textInput.link) 392 393 assert_not_set_error("maker.channel", 394 %w(link language description title)) do 395 RSS::Maker.make("0.91") do |maker| 396 # setup_dummy_channel(maker) 397 398 maker.textinput.title = title 399 maker.textinput.description = description 400 maker.textinput.name = name 401 maker.textinput.link = link 402 end 403 end 404 end 405 406 def test_not_valid_textInput 407 title = "fugafuga" 408 description = "text hoge fuga" 409 name = "hoge" 410 link = "http://hoge.com" 411 412 rss = RSS::Maker.make("0.91") do |maker| 413 setup_dummy_channel(maker) 414 setup_dummy_image(maker) 415 416 # maker.textinput.title = title 417 maker.textinput.description = description 418 maker.textinput.name = name 419 maker.textinput.link = link 420 end 421 assert_nil(rss.channel.textInput) 422 423 rss = RSS::Maker.make("0.91") do |maker| 424 setup_dummy_channel(maker) 425 setup_dummy_image(maker) 426 427 maker.textinput.title = title 428 # maker.textinput.description = description 429 maker.textinput.name = name 430 maker.textinput.link = link 431 end 432 assert_nil(rss.channel.textInput) 433 434 rss = RSS::Maker.make("0.91") do |maker| 435 setup_dummy_channel(maker) 436 setup_dummy_image(maker) 437 438 maker.textinput.title = title 439 maker.textinput.description = description 440 # maker.textinput.name = name 441 maker.textinput.link = link 442 end 443 assert_nil(rss.channel.textInput) 444 445 rss = RSS::Maker.make("0.91") do |maker| 446 setup_dummy_channel(maker) 447 setup_dummy_image(maker) 448 449 maker.textinput.title = title 450 maker.textinput.description = description 451 maker.textinput.name = name 452 # maker.textinput.link = link 453 end 454 assert_nil(rss.channel.textInput) 455 end 456 457 def test_date_in_string 458 date = Time.now 459 460 rss = RSS::Maker.make("0.91") do |maker| 461 setup_dummy_channel(maker) 462 setup_dummy_image(maker) 463 464 maker.items.new_item do |item| 465 item.title = "The first item" 466 item.link = "http://example.com/blog/1.html" 467 item.date = date.rfc822 468 end 469 end 470 471 assert_equal(date.iso8601, rss.items[0].date.iso8601) 472 end 473 end 474end 475