/XML-TreePP/t/46_xml_deref.t

http://xml-treepp.googlecode.com/ · Raku · 122 lines · 115 code · 2 blank · 5 comment · 0 complexity · b6e94aae935e3ed3a2c5f10a77082c29 MD5 · raw file

  1. # ----------------------------------------------------------------
  2. # this test script is written in utf8 but does not "use utf8" for 5.005-compatibility
  3. # ----------------------------------------------------------------
  4. use strict;
  5. use Test::More;
  6. # ----------------------------------------------------------------
  7. {
  8. plan tests => 33;
  9. use_ok('XML::TreePP');
  10. &test_main();
  11. }
  12. # ----------------------------------------------------------------
  13. sub test_main {
  14. my $src = {};
  15. $src->{Plain} = <<"EOT";
  16. <root>
  17. <a>AA</a>
  18. <z>zz</z>
  19. <c>©©</c>
  20. <e>λλ</e>
  21. <n>??</n>
  22. <k>??</k>
  23. </root>
  24. EOT
  25. $src->{XMLref} = <<"EOT";
  26. <root>
  27. <a>&#x41;&#65;</a>
  28. <z>&#x7A;&#122;</z>
  29. <c>&#xA9;&#169;</c>
  30. <e>&#xEB;&#235;</e>
  31. <n>&#x3093;&#12435;</n>
  32. <k>&#x6F22;&#28450;</k>
  33. </root>
  34. EOT
  35. $src->{Mixed} = <<"EOT";
  36. <root>
  37. <a>A&#65;</a>
  38. <z>z&#122;</z>
  39. <c>©&#169;</c>
  40. <e>λ&#235;</e>
  41. <n>?&#12435;</n>
  42. <k>?&#28450;</k>
  43. </root>
  44. EOT
  45. foreach my $key ( keys %$src ) {
  46. phase2( "$key octets", $src->{$key} );
  47. }
  48. }
  49. # ----------------------------------------------------------------
  50. sub phase2 {
  51. my $subject = shift;
  52. my $srcxml = shift;
  53. my $srcref = ( $srcxml =~ /&#\w+;/ );
  54. foreach my $xml_deref ( 0, 1 ) {
  55. my $subj3 = $subject .( $xml_deref ? ' xml_deref' : '' );
  56. my $opt = {
  57. xml_deref => $xml_deref,
  58. };
  59. my $tpp = XML::TreePP->new( %$opt );
  60. my $tree = $tpp->parse( $srcxml );
  61. if ( $xml_deref ) {
  62. check_octets( $subj3, $tree );
  63. } else {
  64. if ( $srcref ) {
  65. check_has_ref( $subj3, $tree );
  66. } else {
  67. check_no_ref( $subj3, $tree );
  68. }
  69. }
  70. }
  71. }
  72. # ----------------------------------------------------------------
  73. sub check_has_ref {
  74. my $subject = shift;
  75. my $tree = shift;
  76. my $root = $tree->{root};
  77. my $HAS_REF = qr/&#\w+;/;
  78. # \x00-\x7F is always dereferenced.
  79. # like( $root->{a}, $HAS_REF, "$subject has_ref: a" );
  80. # like( $root->{z}, $HAS_REF, "$subject has_ref: z" );
  81. like( $root->{c}, $HAS_REF, "$subject has_ref: c" );
  82. like( $root->{e}, $HAS_REF, "$subject has_ref: e" );
  83. like( $root->{n}, $HAS_REF, "$subject has_ref: n" );
  84. like( $root->{k}, $HAS_REF, "$subject has_ref: k" );
  85. }
  86. # ----------------------------------------------------------------
  87. sub check_no_ref {
  88. my $subject = shift;
  89. my $tree = shift;
  90. my $root = $tree->{root};
  91. my $HAS_REF = qr/&#\w+;/;
  92. unlike( $root->{a}, $HAS_REF, "$subject no_ref: a" );
  93. unlike( $root->{z}, $HAS_REF, "$subject no_ref: z" );
  94. unlike( $root->{c}, $HAS_REF, "$subject no_ref: c" );
  95. unlike( $root->{e}, $HAS_REF, "$subject no_ref: e" );
  96. unlike( $root->{n}, $HAS_REF, "$subject no_ref: n" );
  97. unlike( $root->{k}, $HAS_REF, "$subject no_ref: k" );
  98. }
  99. # ----------------------------------------------------------------
  100. sub check_octets {
  101. my $subject = shift;
  102. my $tree = shift;
  103. my $root = $tree->{root};
  104. is( $root->{a}, 'AA', "$subject ok: a" );
  105. is( $root->{z}, 'zz', "$subject ok: z" );
  106. is( $root->{c}, '©©', "$subject ok: c" );
  107. is( $root->{e}, 'λλ', "$subject ok: e" );
  108. is( $root->{n}, '??', "$subject ok: n" );
  109. is( $root->{k}, '??', "$subject ok: k" );
  110. }
  111. # ----------------------------------------------------------------
  112. ;1;
  113. # ----------------------------------------------------------------