/XML-FeedPP-Plugin-DumpJSON/t/42_slim_pp.t

http://xml-treepp.googlecode.com/ · Raku · 183 lines · 176 code · 1 blank · 6 comment · 4 complexity · a6e8926d63fc267d49182f11194b6e8c MD5 · raw file

  1. # ----------------------------------------------------------------
  2. use strict;
  3. use Test::More;
  4. # ----------------------------------------------------------------
  5. {
  6. plan skip_all => 'JSON.pm is not supported at the moment.' unless exists $ENV{USE_JSON_PP};
  7. local $@;
  8. eval { require JSON; };
  9. plan skip_all => 'JSON.pm is not loaded.' if $@;
  10. plan tests => 62;
  11. use_ok('XML::FeedPP');
  12. ok( defined $JSON::VERSION, "JSON $JSON::VERSION" );
  13. }
  14. # ----------------------------------------------------------------
  15. sub __decode_json {
  16. my $data = shift;
  17. my $ver = ( $JSON::VERSION =~ /^([\d\.]+)/ )[0];
  18. if ( $ver < 1.99 ) {
  19. my $json = JSON->new();
  20. return $json->jsonToObj($data);
  21. }
  22. my $json = JSON->new();
  23. # $json->allow_singlequote(1);
  24. # $json->relaxed();
  25. $json->decode($data);
  26. }
  27. # ----------------------------------------------------------------
  28. my $ftitle = "Title of the site";
  29. my $fdesc = "Description of the site";
  30. my $fright = "Owner of the site";
  31. my $flink = "http://www.kawa.net/";
  32. my $flang = "ja";
  33. my $link1 = "http://www.perl.org/";
  34. my $link2 = "http://use.perl.org/";
  35. my $title1 = "The Perl Directory - perl.org";
  36. my $title2 = "use Perl: All the Perl that's Practical to Extract and Report";
  37. # ----------------------------------------------------------------
  38. my $date110w = "2004-11-09T11:33:20Z"; # 1100000000
  39. my $date110h = "Tue, 09 Nov 2004 11:33:20 GMT";
  40. my $date111w = "2005-03-05T14:20:00+09:00"; # 1110000000
  41. my $date111h = "Sat, 05 Mar 2005 14:20:00 +0900";
  42. my $date112w = "2005-06-29T08:06:30-09:00"; # 1120000000
  43. my $date112h = "Wed, 29 Jun 2005 08:06:30 -0900";
  44. # ----------------------------------------------------------------
  45. my $orig1key = 'kawanet:foo';
  46. my $orig1val = 'AAA';
  47. my $orig2key = 'kawanet:foo/kawanet:bar';
  48. my $orig2val = 'BBB';
  49. my $orig3key = 'kawanet:hoge@pomu';
  50. my $orig3val = 'CCC';
  51. my $mostslim = [ 'link' ];
  52. # ----------------------------------------------------------------
  53. &test_slim();
  54. &test_more_slim();
  55. # ----------------------------------------------------------------
  56. sub test_slim {
  57. my $opt = {};
  58. $opt->{slim} = 1;
  59. $opt->{slim_element_add} = [ $orig1key, $orig2key, $orig3key ];
  60. $opt->{use_json_syck} = 0;
  61. $opt->{use_json_pp} = 1;
  62. my $rssfeed = &init_feed( XML::FeedPP::RSS->new() );
  63. my $rssjson = $rssfeed->call( DumpJSON => %$opt );
  64. my $rssslim = __decode_json($rssjson);
  65. is( $rssslim->{rss}->{channel}->{link}, $flink, 'rss channel link' );
  66. is( $rssslim->{rss}->{channel}->{title}, $ftitle, 'rss channel title' );
  67. is( $rssslim->{rss}->{channel}->{pubDate}, $date110h, 'rss channel pubDate' );
  68. is( $rssslim->{rss}->{channel}->{item}->[0]->{link}, $link1, 'rss item0 link' );
  69. is( $rssslim->{rss}->{channel}->{item}->[1]->{link}, $link2, 'rss item1 link' );
  70. is( $rssslim->{rss}->{channel}->{item}->[0]->{title}, $title1, 'rss item0 title' );
  71. is( $rssslim->{rss}->{channel}->{item}->[1]->{title}, $title2, 'rss item1 title' );
  72. is( $rssslim->{rss}->{channel}->{item}->[0]->{pubDate}, $date111h, 'rss item0 pubDate' );
  73. is( $rssslim->{rss}->{channel}->{item}->[1]->{pubDate}, $date112h, 'rss item1 pubDate' );
  74. my $rdffeed = &init_feed( XML::FeedPP::RDF->new() );
  75. my $rdfjson = $rdffeed->call( DumpJSON => %$opt );
  76. my $rdfslim = __decode_json($rdfjson);
  77. is( $rdfslim->{'rdf:RDF'}->{channel}->{link}, $flink, 'rdf channel link' );
  78. is( $rdfslim->{'rdf:RDF'}->{channel}->{title}, $ftitle, 'rdf channel title' );
  79. is( $rdfslim->{'rdf:RDF'}->{channel}->{'dc:date'}, $date110w, 'rdf channel dc:date' );
  80. is( $rdfslim->{'rdf:RDF'}->{item}->[0]->{link}, $link1, 'rdf item0 link' );
  81. is( $rdfslim->{'rdf:RDF'}->{item}->[1]->{link}, $link2, 'rdf item1 link' );
  82. is( $rdfslim->{'rdf:RDF'}->{item}->[0]->{title}, $title1, 'rdf item0 title' );
  83. is( $rdfslim->{'rdf:RDF'}->{item}->[1]->{title}, $title2, 'rdf item1 title' );
  84. is( $rdfslim->{'rdf:RDF'}->{item}->[0]->{'dc:date'}, $date111w, 'rdf item0 dc:date' );
  85. is( $rdfslim->{'rdf:RDF'}->{item}->[1]->{'dc:date'}, $date112w, 'rdf item1 dc:date' );
  86. my $atomfeed = &init_feed( XML::FeedPP::Atom->new() );
  87. my $atomjson = $atomfeed->call( DumpJSON => %$opt );
  88. my $atomslim = __decode_json($atomjson);
  89. is( $atomslim->{feed}->{link}, $flink, 'atom channel link' );
  90. is( $atomslim->{feed}->{title}, $ftitle, 'atom channel title' );
  91. is( $atomslim->{feed}->{modified}, $date110w, 'atom channel modified' );
  92. is( $atomslim->{feed}->{entry}->[0]->{link}, $link1, 'atom item0 link' );
  93. is( $atomslim->{feed}->{entry}->[1]->{link}, $link2, 'atom item1 link' );
  94. is( $atomslim->{feed}->{entry}->[0]->{title}, $title1, 'atom item0 title' );
  95. is( $atomslim->{feed}->{entry}->[1]->{title}, $title2, 'atom item1 title' );
  96. is( $atomslim->{feed}->{entry}->[0]->{issued}, $date111w, 'atom item0 issued' );
  97. is( $atomslim->{feed}->{entry}->[1]->{issued}, $date112w, 'atom item1 issued' );
  98. is( $rssslim->{rss}->{channel}->{$orig1key}, $orig1val, 'rss channel orig' );
  99. is( $rssslim->{rss}->{channel}->{item}->[0]->{$orig2key}, $orig2val, 'rss item0 orig' );
  100. is( $rssslim->{rss}->{channel}->{item}->[1]->{$orig3key}, $orig3val, 'rss item1 orig' );
  101. is( $rdfslim->{'rdf:RDF'}->{channel}->{$orig1key}, $orig1val, 'rdf channel orig' );
  102. is( $rdfslim->{'rdf:RDF'}->{item}->[0]->{$orig2key}, $orig2val, 'rdf item0 orig' );
  103. is( $rdfslim->{'rdf:RDF'}->{item}->[1]->{$orig3key}, $orig3val, 'rdf item1 orig' );
  104. is( $atomslim->{feed}->{$orig1key}, $orig1val, 'atom channel orig' );
  105. is( $atomslim->{feed}->{entry}->[0]->{$orig2key}, $orig2val, 'atom item0 orig' );
  106. is( $atomslim->{feed}->{entry}->[1]->{$orig3key}, $orig3val, 'atom item1 orig' );
  107. ok( ! exists $rssslim->{rss}->{'-xmlns'}, 'rss channel xmlns' );
  108. ok( ! exists $rssslim->{rss}->{'-version'}, 'rss channel version' );
  109. ok( ! exists $rdfslim->{'rdf:RDF'}->{'-xmlns'}, 'rdf channel xmlns' );
  110. ok( ! exists $rdfslim->{'rdf:RDF'}->{'-version'}, 'rdf channel version' );
  111. ok( ! exists $atomslim->{feed}->{'-xmlns'}, 'atom channel xmlns' );
  112. ok( ! exists $atomslim->{feed}->{'-version'}, 'atom channel version' );
  113. }
  114. # ----------------------------------------------------------------
  115. sub test_more_slim {
  116. my $opt = {};
  117. $opt->{slim_element} = $mostslim;
  118. $opt->{use_json_syck} = 0;
  119. $opt->{use_json_pp} = 1;
  120. my $rssfeed = &init_feed( XML::FeedPP::RSS->new() );
  121. my $rssjson = $rssfeed->call( DumpJSON => %$opt );
  122. my $rssslim = __decode_json($rssjson);
  123. is( $rssslim->{rss}->{channel}->{link}, $flink, 'rss channel link' );
  124. is( $rssslim->{rss}->{channel}->{item}->[0]->{link}, $link1, 'rss item0 link' );
  125. is( $rssslim->{rss}->{channel}->{item}->[1]->{link}, $link2, 'rss item1 link' );
  126. ok( ! exists $rssslim->{rss}->{channel}->{title}, 'rss channel title' );
  127. ok( ! exists $rssslim->{rss}->{channel}->{item}->[0]->{title}, 'rss item0 title' );
  128. ok( ! exists $rssslim->{rss}->{channel}->{item}->[1]->{title}, 'rss item1 title' );
  129. my $rdffeed = &init_feed( XML::FeedPP::RDF->new() );
  130. my $rdfjson = $rdffeed->call( DumpJSON => %$opt );
  131. my $rdfslim = __decode_json($rdfjson);
  132. is( $rdfslim->{'rdf:RDF'}->{channel}->{link}, $flink, 'rdf channel link' );
  133. is( $rdfslim->{'rdf:RDF'}->{item}->[0]->{link}, $link1, 'rdf item0 link' );
  134. is( $rdfslim->{'rdf:RDF'}->{item}->[1]->{link}, $link2, 'rdf item1 link' );
  135. ok( ! exists $rdfslim->{'rdf:RDF'}->{channel}->{title}, 'rdf channel title' );
  136. ok( ! exists $rdfslim->{'rdf:RDF'}->{item}->[0]->{title}, 'rdf item0 title' );
  137. ok( ! exists $rdfslim->{'rdf:RDF'}->{item}->[1]->{title}, 'rdf item1 title' );
  138. my $atomfeed = &init_feed( XML::FeedPP::Atom->new() );
  139. my $atomjson = $atomfeed->call( DumpJSON => %$opt );
  140. my $atomslim = __decode_json($atomjson);
  141. is( $atomslim->{feed}->{link}, $flink, 'atom channel link' );
  142. is( $atomslim->{feed}->{entry}->[0]->{link}, $link1, 'atom item0 link' );
  143. is( $atomslim->{feed}->{entry}->[1]->{link}, $link2, 'atom item1 link' );
  144. ok( ! exists $atomslim->{feed}->{title}, 'atom channel title' );
  145. ok( ! exists $atomslim->{feed}->{entry}->[0]->{title}, 'atom item0 title' );
  146. ok( ! exists $atomslim->{feed}->{entry}->[1]->{title}, 'atom item1 title' );
  147. }
  148. # ----------------------------------------------------------------
  149. sub init_feed {
  150. my $feed = shift;
  151. $feed->title( $ftitle );
  152. $feed->description( $fdesc );
  153. $feed->pubDate( $date110w );
  154. $feed->copyright( $fright );
  155. $feed->link( $flink );
  156. $feed->language( $flang );
  157. my $item1 = $feed->add_item( $link1 );
  158. $item1->title( $title1 );
  159. $item1->pubDate( $date111w );
  160. my $item2 = $feed->add_item( $link2 );
  161. $item2->title( $title2 );
  162. $item2->pubDate( $date112h );
  163. $feed->set( $orig1key, $orig1val );
  164. $item1->set( $orig2key, $orig2val );
  165. $item2->set( $orig3key, $orig3val );
  166. $feed;
  167. }
  168. # ----------------------------------------------------------------
  169. ;1;
  170. # ----------------------------------------------------------------