magic_xml 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (287) hide show
  1. data/README +22 -0
  2. data/Rakefile +52 -0
  3. data/VERSION +1 -0
  4. data/doc/classes/Array.html +148 -0
  5. data/doc/classes/File.html +113 -0
  6. data/doc/classes/Hash.html +117 -0
  7. data/doc/classes/Patterns_all.html +145 -0
  8. data/doc/classes/Patterns_any.html +145 -0
  9. data/doc/classes/String.html +470 -0
  10. data/doc/classes/Symbol.html +145 -0
  11. data/doc/classes/XML.html +1881 -0
  12. data/doc/classes/XML_Comment.html +148 -0
  13. data/doc/classes/XML_PI.html +145 -0
  14. data/doc/classes/XML_Tests.html +1727 -0
  15. data/doc/files/magic_xml_rb.html +186 -0
  16. data/doc/files/simple_examples/xml_hello_f_rb.html +88 -0
  17. data/doc/files/simple_examples/xml_hello_m_rb.html +88 -0
  18. data/doc/files/simple_examples/xml_list_f_rb.html +88 -0
  19. data/doc/files/simple_examples/xml_list_m_rb.html +88 -0
  20. data/doc/files/tests_rb.html +94 -0
  21. data/doc/files/xquery_use_cases/parts/q1_rb.html +117 -0
  22. data/doc/files/xquery_use_cases/rdb/q10_rb.html +88 -0
  23. data/doc/files/xquery_use_cases/rdb/q11_rb.html +88 -0
  24. data/doc/files/xquery_use_cases/rdb/q12_rb.html +88 -0
  25. data/doc/files/xquery_use_cases/rdb/q13_rb.html +88 -0
  26. data/doc/files/xquery_use_cases/rdb/q14_rb.html +88 -0
  27. data/doc/files/xquery_use_cases/rdb/q15_rb.html +88 -0
  28. data/doc/files/xquery_use_cases/rdb/q16_rb.html +88 -0
  29. data/doc/files/xquery_use_cases/rdb/q17_rb.html +88 -0
  30. data/doc/files/xquery_use_cases/rdb/q18_rb.html +88 -0
  31. data/doc/files/xquery_use_cases/rdb/q1_rb.html +88 -0
  32. data/doc/files/xquery_use_cases/rdb/q2_rb.html +88 -0
  33. data/doc/files/xquery_use_cases/rdb/q3_rb.html +88 -0
  34. data/doc/files/xquery_use_cases/rdb/q4_rb.html +88 -0
  35. data/doc/files/xquery_use_cases/rdb/q5_rb.html +88 -0
  36. data/doc/files/xquery_use_cases/rdb/q6_rb.html +88 -0
  37. data/doc/files/xquery_use_cases/rdb/q7_rb.html +88 -0
  38. data/doc/files/xquery_use_cases/rdb/q8_rb.html +88 -0
  39. data/doc/files/xquery_use_cases/rdb/q9_rb.html +88 -0
  40. data/doc/files/xquery_use_cases/seq/q1_rb.html +88 -0
  41. data/doc/files/xquery_use_cases/seq/q2_rb.html +88 -0
  42. data/doc/files/xquery_use_cases/seq/q3_rb.html +88 -0
  43. data/doc/files/xquery_use_cases/seq/q4_rb.html +88 -0
  44. data/doc/files/xquery_use_cases/seq/q5_rb.html +88 -0
  45. data/doc/files/xquery_use_cases/sgml/q10_rb.html +88 -0
  46. data/doc/files/xquery_use_cases/sgml/q1_rb.html +88 -0
  47. data/doc/files/xquery_use_cases/sgml/q2_rb.html +88 -0
  48. data/doc/files/xquery_use_cases/sgml/q3_rb.html +88 -0
  49. data/doc/files/xquery_use_cases/sgml/q4_rb.html +88 -0
  50. data/doc/files/xquery_use_cases/sgml/q5_rb.html +88 -0
  51. data/doc/files/xquery_use_cases/sgml/q6_rb.html +88 -0
  52. data/doc/files/xquery_use_cases/sgml/q7_rb.html +88 -0
  53. data/doc/files/xquery_use_cases/sgml/q8a_rb.html +88 -0
  54. data/doc/files/xquery_use_cases/sgml/q8b_rb.html +88 -0
  55. data/doc/files/xquery_use_cases/sgml/q9_rb.html +88 -0
  56. data/doc/files/xquery_use_cases/solution_sizes_rb.html +88 -0
  57. data/doc/files/xquery_use_cases/string/q1_rb.html +88 -0
  58. data/doc/files/xquery_use_cases/string/q2_rb.html +93 -0
  59. data/doc/files/xquery_use_cases/string/q4_rb.html +88 -0
  60. data/doc/files/xquery_use_cases/string/q5_rb.html +88 -0
  61. data/doc/files/xquery_use_cases/test_driver_rb.html +92 -0
  62. data/doc/files/xquery_use_cases/tree/q1_rb.html +111 -0
  63. data/doc/files/xquery_use_cases/tree/q2_rb.html +88 -0
  64. data/doc/files/xquery_use_cases/tree/q3_rb.html +88 -0
  65. data/doc/files/xquery_use_cases/tree/q4_rb.html +88 -0
  66. data/doc/files/xquery_use_cases/tree/q5_rb.html +88 -0
  67. data/doc/files/xquery_use_cases/tree/q6_rb.html +113 -0
  68. data/doc/files/xquery_use_cases/xmp/q10_rb.html +88 -0
  69. data/doc/files/xquery_use_cases/xmp/q11_rb.html +88 -0
  70. data/doc/files/xquery_use_cases/xmp/q12_rb.html +88 -0
  71. data/doc/files/xquery_use_cases/xmp/q1_rb.html +88 -0
  72. data/doc/files/xquery_use_cases/xmp/q2_rb.html +88 -0
  73. data/doc/files/xquery_use_cases/xmp/q3_rb.html +88 -0
  74. data/doc/files/xquery_use_cases/xmp/q4_rb.html +88 -0
  75. data/doc/files/xquery_use_cases/xmp/q5_rb.html +92 -0
  76. data/doc/files/xquery_use_cases/xmp/q6_rb.html +88 -0
  77. data/doc/files/xquery_use_cases/xmp/q7_rb.html +88 -0
  78. data/doc/files/xquery_use_cases/xmp/q8_rb.html +88 -0
  79. data/doc/files/xquery_use_cases/xmp/q9_rb.html +88 -0
  80. data/doc/fr_class_index.html +56 -0
  81. data/doc/fr_file_index.html +110 -0
  82. data/doc/fr_method_index.html +159 -0
  83. data/doc/index.html +26 -0
  84. data/doc/rdoc-style.css +175 -0
  85. data/lib/magic_xml.rb +1400 -0
  86. data/simple_examples/README +14 -0
  87. data/simple_examples/xml_hello_f.rb +32 -0
  88. data/simple_examples/xml_hello_m.rb +32 -0
  89. data/simple_examples/xml_list_f.rb +36 -0
  90. data/simple_examples/xml_list_m.rb +36 -0
  91. data/test/helper.rb +9 -0
  92. data/test/test_magic_xml.rb +855 -0
  93. data/xquery_use_cases/README +17 -0
  94. data/xquery_use_cases/parts/README +12 -0
  95. data/xquery_use_cases/parts/partlist.xml +13 -0
  96. data/xquery_use_cases/parts/q1.out +16 -0
  97. data/xquery_use_cases/parts/q1.rb +38 -0
  98. data/xquery_use_cases/parts/q1.xquery +18 -0
  99. data/xquery_use_cases/rdb/README +50 -0
  100. data/xquery_use_cases/rdb/bids.xml +81 -0
  101. data/xquery_use_cases/rdb/items.xml +57 -0
  102. data/xquery_use_cases/rdb/q1.out +10 -0
  103. data/xquery_use_cases/rdb/q1.rb +31 -0
  104. data/xquery_use_cases/rdb/q1.xquery +14 -0
  105. data/xquery_use_cases/rdb/q10.out +27 -0
  106. data/xquery_use_cases/rdb/q10.rb +37 -0
  107. data/xquery_use_cases/rdb/q10.xquery +15 -0
  108. data/xquery_use_cases/rdb/q11.out +7 -0
  109. data/xquery_use_cases/rdb/q11.rb +38 -0
  110. data/xquery_use_cases/rdb/q11.xquery +15 -0
  111. data/xquery_use_cases/rdb/q12.out +12 -0
  112. data/xquery_use_cases/rdb/q12.rb +42 -0
  113. data/xquery_use_cases/rdb/q12.xquery +28 -0
  114. data/xquery_use_cases/rdb/q13.out +32 -0
  115. data/xquery_use_cases/rdb/q13.rb +45 -0
  116. data/xquery_use_cases/rdb/q13.xquery +15 -0
  117. data/xquery_use_cases/rdb/q14.out +14 -0
  118. data/xquery_use_cases/rdb/q14.rb +42 -0
  119. data/xquery_use_cases/rdb/q14.xquery +14 -0
  120. data/xquery_use_cases/rdb/q15.out +5 -0
  121. data/xquery_use_cases/rdb/q15.rb +31 -0
  122. data/xquery_use_cases/rdb/q15.xquery +9 -0
  123. data/xquery_use_cases/rdb/q16.out +35 -0
  124. data/xquery_use_cases/rdb/q16.rb +35 -0
  125. data/xquery_use_cases/rdb/q16.xquery +17 -0
  126. data/xquery_use_cases/rdb/q17.out +1 -0
  127. data/xquery_use_cases/rdb/q17.rb +35 -0
  128. data/xquery_use_cases/rdb/q17.xquery +11 -0
  129. data/xquery_use_cases/rdb/q18.out +32 -0
  130. data/xquery_use_cases/rdb/q18.rb +40 -0
  131. data/xquery_use_cases/rdb/q18.xquery +19 -0
  132. data/xquery_use_cases/rdb/q2.out +22 -0
  133. data/xquery_use_cases/rdb/q2.rb +36 -0
  134. data/xquery_use_cases/rdb/q2.xquery +14 -0
  135. data/xquery_use_cases/rdb/q3.out +8 -0
  136. data/xquery_use_cases/rdb/q3.rb +34 -0
  137. data/xquery_use_cases/rdb/q3.xquery +16 -0
  138. data/xquery_use_cases/rdb/q4.out +14 -0
  139. data/xquery_use_cases/rdb/q4.rb +31 -0
  140. data/xquery_use_cases/rdb/q4.xquery +11 -0
  141. data/xquery_use_cases/rdb/q5.out +12 -0
  142. data/xquery_use_cases/rdb/q5.rb +46 -0
  143. data/xquery_use_cases/rdb/q5.xquery +25 -0
  144. data/xquery_use_cases/rdb/q6.out +14 -0
  145. data/xquery_use_cases/rdb/q6.rb +38 -0
  146. data/xquery_use_cases/rdb/q6.xquery +15 -0
  147. data/xquery_use_cases/rdb/q7.out +1 -0
  148. data/xquery_use_cases/rdb/q7.rb +30 -0
  149. data/xquery_use_cases/rdb/q7.xquery +10 -0
  150. data/xquery_use_cases/rdb/q8.out +1 -0
  151. data/xquery_use_cases/rdb/q8.rb +23 -0
  152. data/xquery_use_cases/rdb/q8.xquery +8 -0
  153. data/xquery_use_cases/rdb/q9.out +22 -0
  154. data/xquery_use_cases/rdb/q9.rb +32 -0
  155. data/xquery_use_cases/rdb/q9.xquery +16 -0
  156. data/xquery_use_cases/rdb/users.xml +25 -0
  157. data/xquery_use_cases/seq/README +12 -0
  158. data/xquery_use_cases/seq/q1.out +1 -0
  159. data/xquery_use_cases/seq/q1.rb +25 -0
  160. data/xquery_use_cases/seq/q1.xquery +2 -0
  161. data/xquery_use_cases/seq/q2.out +2 -0
  162. data/xquery_use_cases/seq/q2.rb +25 -0
  163. data/xquery_use_cases/seq/q2.xquery +2 -0
  164. data/xquery_use_cases/seq/q3.out +2 -0
  165. data/xquery_use_cases/seq/q3.rb +26 -0
  166. data/xquery_use_cases/seq/q3.xquery +3 -0
  167. data/xquery_use_cases/seq/q4.out +0 -0
  168. data/xquery_use_cases/seq/q4.rb +27 -0
  169. data/xquery_use_cases/seq/q4.xquery +4 -0
  170. data/xquery_use_cases/seq/q5.out +5 -0
  171. data/xquery_use_cases/seq/q5.rb +29 -0
  172. data/xquery_use_cases/seq/q5.xquery +10 -0
  173. data/xquery_use_cases/seq/report1.xml +40 -0
  174. data/xquery_use_cases/sgml/README +53 -0
  175. data/xquery_use_cases/sgml/q1.out +44 -0
  176. data/xquery_use_cases/sgml/q1.rb +23 -0
  177. data/xquery_use_cases/sgml/q1.xquery +5 -0
  178. data/xquery_use_cases/sgml/q10.out +1 -0
  179. data/xquery_use_cases/sgml/q10.rb +28 -0
  180. data/xquery_use_cases/sgml/q10.xquery +7 -0
  181. data/xquery_use_cases/sgml/q2.out +26 -0
  182. data/xquery_use_cases/sgml/q2.rb +23 -0
  183. data/xquery_use_cases/sgml/q2.xquery +5 -0
  184. data/xquery_use_cases/sgml/q3.out +6 -0
  185. data/xquery_use_cases/sgml/q3.rb +28 -0
  186. data/xquery_use_cases/sgml/q3.xquery +7 -0
  187. data/xquery_use_cases/sgml/q4.out +4 -0
  188. data/xquery_use_cases/sgml/q4.rb +25 -0
  189. data/xquery_use_cases/sgml/q4.xquery +5 -0
  190. data/xquery_use_cases/sgml/q5.out +3 -0
  191. data/xquery_use_cases/sgml/q5.rb +23 -0
  192. data/xquery_use_cases/sgml/q5.xquery +5 -0
  193. data/xquery_use_cases/sgml/q6.out +1 -0
  194. data/xquery_use_cases/sgml/q6.rb +27 -0
  195. data/xquery_use_cases/sgml/q6.xquery +6 -0
  196. data/xquery_use_cases/sgml/q7.out +1 -0
  197. data/xquery_use_cases/sgml/q7.rb +27 -0
  198. data/xquery_use_cases/sgml/q7.xquery +7 -0
  199. data/xquery_use_cases/sgml/q8a.out +34 -0
  200. data/xquery_use_cases/sgml/q8a.rb +27 -0
  201. data/xquery_use_cases/sgml/q8a.xquery +5 -0
  202. data/xquery_use_cases/sgml/q8b.out +26 -0
  203. data/xquery_use_cases/sgml/q8b.rb +32 -0
  204. data/xquery_use_cases/sgml/q8b.xquery +5 -0
  205. data/xquery_use_cases/sgml/q9.out +9 -0
  206. data/xquery_use_cases/sgml/q9.rb +29 -0
  207. data/xquery_use_cases/sgml/q9.xquery +6 -0
  208. data/xquery_use_cases/sgml/sgml.xml +101 -0
  209. data/xquery_use_cases/solution_sizes.rb +48 -0
  210. data/xquery_use_cases/string/README +29 -0
  211. data/xquery_use_cases/string/company-data.xml +20 -0
  212. data/xquery_use_cases/string/q1.out +4 -0
  213. data/xquery_use_cases/string/q1.rb +25 -0
  214. data/xquery_use_cases/string/q1.xquery +1 -0
  215. data/xquery_use_cases/string/q2.out +13 -0
  216. data/xquery_use_cases/string/q2.rb +32 -0
  217. data/xquery_use_cases/string/q2.xquery +23 -0
  218. data/xquery_use_cases/string/q4.out +50 -0
  219. data/xquery_use_cases/string/q4.rb +34 -0
  220. data/xquery_use_cases/string/q4.xquery +14 -0
  221. data/xquery_use_cases/string/q5.out +12 -0
  222. data/xquery_use_cases/string/q5.rb +33 -0
  223. data/xquery_use_cases/string/q5.xquery +8 -0
  224. data/xquery_use_cases/string/string.xml +82 -0
  225. data/xquery_use_cases/test_driver.rb +60 -0
  226. data/xquery_use_cases/tree/README +23 -0
  227. data/xquery_use_cases/tree/book.xml +50 -0
  228. data/xquery_use_cases/tree/q1.out +23 -0
  229. data/xquery_use_cases/tree/q1.rb +31 -0
  230. data/xquery_use_cases/tree/q1.xquery +14 -0
  231. data/xquery_use_cases/tree/q2.out +11 -0
  232. data/xquery_use_cases/tree/q2.rb +27 -0
  233. data/xquery_use_cases/tree/q2.xquery +10 -0
  234. data/xquery_use_cases/tree/q3.out +2 -0
  235. data/xquery_use_cases/tree/q3.rb +26 -0
  236. data/xquery_use_cases/tree/q3.xquery +2 -0
  237. data/xquery_use_cases/tree/q4.out +1 -0
  238. data/xquery_use_cases/tree/q4.rb +23 -0
  239. data/xquery_use_cases/tree/q4.xquery +5 -0
  240. data/xquery_use_cases/tree/q5.out +9 -0
  241. data/xquery_use_cases/tree/q5.rb +30 -0
  242. data/xquery_use_cases/tree/q5.xquery +8 -0
  243. data/xquery_use_cases/tree/q6.out +30 -0
  244. data/xquery_use_cases/tree/q6.rb +35 -0
  245. data/xquery_use_cases/tree/q6.xquery +21 -0
  246. data/xquery_use_cases/xmp/README +41 -0
  247. data/xquery_use_cases/xmp/bib.xml +35 -0
  248. data/xquery_use_cases/xmp/books.xml +15 -0
  249. data/xquery_use_cases/xmp/prices.xml +32 -0
  250. data/xquery_use_cases/xmp/q1.out +8 -0
  251. data/xquery_use_cases/xmp/q1.rb +29 -0
  252. data/xquery_use_cases/xmp/q1.xquery +10 -0
  253. data/xquery_use_cases/xmp/q10.out +11 -0
  254. data/xquery_use_cases/xmp/q10.rb +36 -0
  255. data/xquery_use_cases/xmp/q10.xquery +11 -0
  256. data/xquery_use_cases/xmp/q11.out +35 -0
  257. data/xquery_use_cases/xmp/q11.rb +37 -0
  258. data/xquery_use_cases/xmp/q11.xquery +18 -0
  259. data/xquery_use_cases/xmp/q12.out +6 -0
  260. data/xquery_use_cases/xmp/q12.rb +35 -0
  261. data/xquery_use_cases/xmp/q12.xquery +20 -0
  262. data/xquery_use_cases/xmp/q2.out +37 -0
  263. data/xquery_use_cases/xmp/q2.rb +30 -0
  264. data/xquery_use_cases/xmp/q2.xquery +12 -0
  265. data/xquery_use_cases/xmp/q3.out +34 -0
  266. data/xquery_use_cases/xmp/q3.rb +27 -0
  267. data/xquery_use_cases/xmp/q3.xquery +10 -0
  268. data/xquery_use_cases/xmp/q4.out +31 -0
  269. data/xquery_use_cases/xmp/q4.rb +44 -0
  270. data/xquery_use_cases/xmp/q4.xquery +21 -0
  271. data/xquery_use_cases/xmp/q5.out +17 -0
  272. data/xquery_use_cases/xmp/q5.rb +38 -0
  273. data/xquery_use_cases/xmp/q5.xquery +13 -0
  274. data/xquery_use_cases/xmp/q6.out +28 -0
  275. data/xquery_use_cases/xmp/q6.rb +33 -0
  276. data/xquery_use_cases/xmp/q6.xquery +19 -0
  277. data/xquery_use_cases/xmp/q7.out +8 -0
  278. data/xquery_use_cases/xmp/q7.rb +30 -0
  279. data/xquery_use_cases/xmp/q7.xquery +12 -0
  280. data/xquery_use_cases/xmp/q8.out +7 -0
  281. data/xquery_use_cases/xmp/q8.rb +29 -0
  282. data/xquery_use_cases/xmp/q8.xquery +9 -0
  283. data/xquery_use_cases/xmp/q9.out +4 -0
  284. data/xquery_use_cases/xmp/q9.rb +29 -0
  285. data/xquery_use_cases/xmp/q9.xquery +7 -0
  286. data/xquery_use_cases/xmp/reviews.xml +24 -0
  287. metadata +342 -0
@@ -0,0 +1,1727 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html>
6
+ <head>
7
+ <title>Class: XML_Tests</title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
10
+
11
+ <script language="JavaScript" type="text/javascript">
12
+ // <![CDATA[
13
+
14
+ function toggleSource( id )
15
+ {
16
+ var elem
17
+ var link
18
+
19
+ if( document.getElementById )
20
+ {
21
+ elem = document.getElementById( id )
22
+ link = document.getElementById( "l_" + id )
23
+ }
24
+ else if ( document.all )
25
+ {
26
+ elem = eval( "document.all." + id )
27
+ link = eval( "document.all.l_" + id )
28
+ }
29
+ else
30
+ return false;
31
+
32
+ if( elem.style.display == "block" )
33
+ {
34
+ elem.style.display = "none"
35
+ link.innerHTML = "show source"
36
+ }
37
+ else
38
+ {
39
+ elem.style.display = "block"
40
+ link.innerHTML = "hide source"
41
+ }
42
+ }
43
+
44
+ function openCode( url )
45
+ {
46
+ window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
47
+ }
48
+ // ]]>
49
+ </script>
50
+ </head>
51
+
52
+ <body>
53
+ <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
54
+ <td class="file-title"><span class="file-title-prefix">Class</span><br />XML_Tests</td>
55
+ <td align="right">
56
+ <table cellspacing=0 cellpadding=2>
57
+ <tr valign="top">
58
+ <td>In:</td>
59
+ <td>
60
+ <a href="../files/tests_rb.html">tests.rb</a>
61
+ </td>
62
+ </tr>
63
+ <tr>
64
+ <td>Parent:</td>
65
+ <td>
66
+ Test::Unit::TestCase
67
+ </td>
68
+ </tr>
69
+ </table>
70
+ </td>
71
+ </tr>
72
+ </table>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+ <div id="content">
77
+
78
+
79
+
80
+
81
+ <div class="sectiontitle">Methods</div>
82
+ <ul>
83
+ <li><a href="#M000060">test_add</a></li>
84
+ <li><a href="#M000059">test_attr</a></li>
85
+ <li><a href="#M000077">test_child</a></li>
86
+ <li><a href="#M000074">test_chilrden</a></li>
87
+ <li><a href="#M000056">test_constructors</a></li>
88
+ <li><a href="#M000101">test_deep_map</a></li>
89
+ <li><a href="#M000078">test_descendant</a></li>
90
+ <li><a href="#M000075">test_descendants</a></li>
91
+ <li><a href="#M000064">test_dup</a></li>
92
+ <li><a href="#M000061">test_each</a></li>
93
+ <li><a href="#M000089">test_entities</a></li>
94
+ <li><a href="#M000063">test_eqeq</a></li>
95
+ <li><a href="#M000057">test_escapes</a></li>
96
+ <li><a href="#M000076">test_exec</a></li>
97
+ <li><a href="#M000086">test_inpsect</a></li>
98
+ <li><a href="#M000099">test_load</a></li>
99
+ <li><a href="#M000062">test_map</a></li>
100
+ <li><a href="#M000066">test_monadic</a></li>
101
+ <li><a href="#M000100">test_multielement_selectors</a></li>
102
+ <li><a href="#M000065">test_normalize</a></li>
103
+ <li><a href="#M000067">test_parse</a></li>
104
+ <li><a href="#M000085">test_parse_as_twigs</a></li>
105
+ <li><a href="#M000069">test_parse_extra_cdata</a></li>
106
+ <li><a href="#M000072">test_parse_extra_comment</a></li>
107
+ <li><a href="#M000071">test_parse_extra_dtd</a></li>
108
+ <li><a href="#M000068">test_parse_extra_escapes</a></li>
109
+ <li><a href="#M000070">test_parse_extra_qxml</a></li>
110
+ <li><a href="#M000073">test_parse_file</a></li>
111
+ <li><a href="#M000098">test_parsing_entities</a></li>
112
+ <li><a href="#M000096">test_parsing_extras</a></li>
113
+ <li><a href="#M000097">test_parsing_nopp</a></li>
114
+ <li><a href="#M000090">test_patterns</a></li>
115
+ <li><a href="#M000091">test_patterns_2</a></li>
116
+ <li><a href="#M000092">test_patterns_3</a></li>
117
+ <li><a href="#M000093">test_patterns_any_all</a></li>
118
+ <li><a href="#M000102">test_pretty_printer</a></li>
119
+ <li><a href="#M000087">test_pseudoattributes_read</a></li>
120
+ <li><a href="#M000088">test_pseudoattributes_write</a></li>
121
+ <li><a href="#M000081">test_range</a></li>
122
+ <li><a href="#M000084">test_real_method_missing</a></li>
123
+ <li><a href="#M000094">test_remove_pretty_printing</a></li>
124
+ <li><a href="#M000095">test_remove_pretty_printing_conditional</a></li>
125
+ <li><a href="#M000080">test_renormalize</a></li>
126
+ <li><a href="#M000058">test_sort_by</a></li>
127
+ <li><a href="#M000082">test_subsequence</a></li>
128
+ <li><a href="#M000079">test_text</a></li>
129
+ <li><a href="#M000083">test_xml_bang</a></li>
130
+ </ul>
131
+
132
+
133
+
134
+
135
+
136
+
137
+ <div class="sectiontitle">Public Instance methods</div>
138
+ <div class="method">
139
+ <div class="title">
140
+ <a name="M000060"></a><b>test_add</b>()
141
+ </div>
142
+ <div class="description">
143
+ <p>
144
+ Test <a href="XML.html">XML</a>#&lt;&lt; method for adding children
145
+ </p>
146
+ </div>
147
+ <div class="sourcecode">
148
+ <p class="source-link">[ <a href="javascript:toggleSource('M000060_source')" id="l_M000060_source">show source</a> ]</p>
149
+ <div id="M000060_source" class="dyn-source">
150
+ <pre>
151
+ <span class="ruby-comment cmt"># File tests.rb, line 53</span>
152
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_add</span>
153
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:p</span>, <span class="ruby-value str">&quot;Hello&quot;</span>)
154
+ <span class="ruby-identifier">a</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;, &quot;</span>
155
+ <span class="ruby-identifier">a</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;world!&quot;</span>
156
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;p&gt;Hello, world!&lt;/p&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#&lt;&lt; should work&quot;</span>)
157
+
158
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>)
159
+ <span class="ruby-identifier">b</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:bar</span>)
160
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#&lt;&lt; should work&quot;</span>)
161
+ <span class="ruby-keyword kw">end</span>
162
+ </pre>
163
+ </div>
164
+ </div>
165
+ </div>
166
+ <div class="method">
167
+ <div class="title">
168
+ <a name="M000059"></a><b>test_attr</b>()
169
+ </div>
170
+ <div class="description">
171
+ <p>
172
+ Test <a href="XML.html">XML</a>#[] and <a href="XML.html">XML</a>#[]= for
173
+ attribute access
174
+ </p>
175
+ </div>
176
+ <div class="sourcecode">
177
+ <p class="source-link">[ <a href="javascript:toggleSource('M000059_source')" id="l_M000059_source">show source</a> ]</p>
178
+ <div id="M000059_source" class="dyn-source">
179
+ <pre>
180
+ <span class="ruby-comment cmt"># File tests.rb, line 43</span>
181
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_attr</span>
182
+ <span class="ruby-identifier">foo</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, {<span class="ruby-identifier">:x</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;1&quot;</span>})
183
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;1&quot;</span>, <span class="ruby-identifier">foo</span>[<span class="ruby-identifier">:x</span>], <span class="ruby-value str">&quot;Attribute reading should work&quot;</span>)
184
+ <span class="ruby-identifier">foo</span>[<span class="ruby-identifier">:x</span>] = <span class="ruby-value str">&quot;2&quot;</span>
185
+ <span class="ruby-identifier">foo</span>[<span class="ruby-identifier">:y</span>] = <span class="ruby-value str">&quot;3&quot;</span>
186
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;2&quot;</span>, <span class="ruby-identifier">foo</span>[<span class="ruby-identifier">:x</span>], <span class="ruby-value str">&quot;Attribute writing should work&quot;</span>)
187
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;3&quot;</span>, <span class="ruby-identifier">foo</span>[<span class="ruby-identifier">:y</span>], <span class="ruby-value str">&quot;Attribute writing should work&quot;</span>)
188
+ <span class="ruby-keyword kw">end</span>
189
+ </pre>
190
+ </div>
191
+ </div>
192
+ </div>
193
+ <div class="method">
194
+ <div class="title">
195
+ <a name="M000077"></a><b>test_child</b>()
196
+ </div>
197
+ <div class="description">
198
+ <p>
199
+ Test <a href="XML.html#M000048">XML#child</a>
200
+ </p>
201
+ </div>
202
+ <div class="sourcecode">
203
+ <p class="source-link">[ <a href="javascript:toggleSource('M000077_source')" id="l_M000077_source">show source</a> ]</p>
204
+ <div id="M000077_source" class="dyn-source">
205
+ <pre>
206
+ <span class="ruby-comment cmt"># File tests.rb, line 294</span>
207
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_child</span>
208
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;/foo&gt;&quot;</span>)
209
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar a='1'/&gt;&lt;/foo&gt;&quot;</span>)
210
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar a='1'/&gt;&lt;bar a='2'/&gt;&lt;/foo&gt;&quot;</span>)
211
+
212
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">child</span>(<span class="ruby-identifier">:bar</span>), <span class="ruby-value str">&quot;XML#child should return nil if there are no matching children&quot;</span>)
213
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar a='1'/&gt;&quot;</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">child</span>(<span class="ruby-identifier">:bar</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#child should work&quot;</span>)
214
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar a='1'/&gt;&quot;</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">child</span>(<span class="ruby-identifier">:bar</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#child should return first child if there are many&quot;</span>)
215
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar a='2'/&gt;&quot;</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">child</span>({<span class="ruby-identifier">:a</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'2'</span>}).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#child should support patterns&quot;</span>)
216
+ <span class="ruby-keyword kw">end</span>
217
+ </pre>
218
+ </div>
219
+ </div>
220
+ </div>
221
+ <div class="method">
222
+ <div class="title">
223
+ <a name="M000074"></a><b>test_chilrden</b>()
224
+ </div>
225
+ <div class="description">
226
+ <p>
227
+ Test <a href="XML.html#M000050">XML#children</a> and <a
228
+ href="Array.html#M000103">Array#children</a>
229
+ </p>
230
+ </div>
231
+ <div class="sourcecode">
232
+ <p class="source-link">[ <a href="javascript:toggleSource('M000074_source')" id="l_M000074_source">show source</a> ]</p>
233
+ <div id="M000074_source" class="dyn-source">
234
+ <pre>
235
+ <span class="ruby-comment cmt"># File tests.rb, line 260</span>
236
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_chilrden</span>
237
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">bar</span>({<span class="ruby-identifier">:x=</span><span class="ruby-operator">&gt;</span><span class="ruby-value str">&quot;1&quot;</span>})
238
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">bar</span>({<span class="ruby-identifier">:x=</span><span class="ruby-operator">&gt;</span><span class="ruby-value str">&quot;3&quot;</span>})
239
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">bar</span>({<span class="ruby-identifier">:x=</span><span class="ruby-operator">&gt;</span><span class="ruby-value str">&quot;2&quot;</span>}, <span class="ruby-identifier">b</span>)
240
+ <span class="ruby-identifier">d</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">foo</span>(<span class="ruby-identifier">a</span>,<span class="ruby-identifier">c</span>)
241
+ <span class="ruby-identifier">e</span> = <span class="ruby-identifier">d</span>.<span class="ruby-identifier">children</span>(<span class="ruby-identifier">:bar</span>)
242
+ <span class="ruby-identifier">f</span> = <span class="ruby-identifier">e</span>.<span class="ruby-identifier">children</span>(<span class="ruby-identifier">:bar</span>)
243
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-identifier">a</span>,<span class="ruby-identifier">c</span>], <span class="ruby-identifier">e</span>, <span class="ruby-value str">&quot;XML#children(tag) should return tag-tagged children&quot;</span>)
244
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-identifier">b</span>], <span class="ruby-identifier">f</span>, <span class="ruby-value str">&quot;Array#children(tag) should return tag-tagged children of its elements&quot;</span>)
245
+ <span class="ruby-keyword kw">end</span>
246
+ </pre>
247
+ </div>
248
+ </div>
249
+ </div>
250
+ <div class="method">
251
+ <div class="title">
252
+ <a name="M000056"></a><b>test_constructors</b>()
253
+ </div>
254
+ <div class="description">
255
+ <p>
256
+ Test whether <a href="XML.html#M000026">XML.new</a> constructors work
257
+ (without monadic case)
258
+ </p>
259
+ </div>
260
+ <div class="sourcecode">
261
+ <p class="source-link">[ <a href="javascript:toggleSource('M000056_source')" id="l_M000056_source">show source</a> ]</p>
262
+ <div id="M000056_source" class="dyn-source">
263
+ <pre>
264
+ <span class="ruby-comment cmt"># File tests.rb, line 10</span>
265
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_constructors</span>
266
+ <span class="ruby-identifier">br</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:br</span>)
267
+ <span class="ruby-identifier">h3</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:h3</span>, <span class="ruby-value str">&quot;Hello&quot;</span>)
268
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:a</span>, {<span class="ruby-identifier">:href</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;http://www.google.com/&quot;</span>}, <span class="ruby-value str">&quot;Google&quot;</span>)
269
+ <span class="ruby-identifier">ul</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:ul</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:li</span>, <span class="ruby-value str">&quot;Hello&quot;</span>), <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:li</span>, <span class="ruby-value str">&quot;world&quot;</span>))
270
+
271
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;br/&gt;&quot;</span>, <span class="ruby-identifier">br</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Constructors should work&quot;</span>)
272
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;h3&gt;Hello&lt;/h3&gt;&quot;</span>, <span class="ruby-identifier">h3</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Constructors should work&quot;</span>)
273
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;a href='http://www.google.com/'&gt;Google&lt;/a&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Constructors should work&quot;</span>)
274
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;ul&gt;&lt;li&gt;Hello&lt;/li&gt;&lt;li&gt;world&lt;/li&gt;&lt;/ul&gt;&quot;</span>, <span class="ruby-identifier">ul</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Constructors should work&quot;</span>)
275
+ <span class="ruby-keyword kw">end</span>
276
+ </pre>
277
+ </div>
278
+ </div>
279
+ </div>
280
+ <div class="method">
281
+ <div class="title">
282
+ <a name="M000101"></a><b>test_deep_map</b>()
283
+ </div>
284
+ <div class="description">
285
+ <p>
286
+ Test deep_map
287
+ </p>
288
+ </div>
289
+ <div class="sourcecode">
290
+ <p class="source-link">[ <a href="javascript:toggleSource('M000101_source')" id="l_M000101_source">show source</a> ]</p>
291
+ <div id="M000101_source" class="dyn-source">
292
+ <pre>
293
+ <span class="ruby-comment cmt"># File tests.rb, line 801</span>
294
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_deep_map</span>
295
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar&gt;x&lt;/bar&gt; &lt;foo&gt;&lt;bar&gt;y&lt;/bar&gt;&lt;/foo&gt;&lt;/foo&gt;&quot;</span>)
296
+ <span class="ruby-identifier">b</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">deep_map</span>(<span class="ruby-identifier">:bar</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">c</span>.<span class="ruby-identifier">text</span>.<span class="ruby-identifier">to_sym</span>) }
297
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;x/&gt; &lt;foo&gt;&lt;y/&gt;&lt;/foo&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#deep_map should work&quot;</span>)
298
+
299
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar&gt;x&lt;/bar&gt; &lt;bar&gt;&lt;bar&gt;y&lt;/bar&gt;&lt;/bar&gt;&lt;/foo&gt;&quot;</span>)
300
+ <span class="ruby-identifier">d</span> = <span class="ruby-identifier">c</span>.<span class="ruby-identifier">deep_map</span>(<span class="ruby-identifier">:bar</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:xyz</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">attrs</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">c</span>.<span class="ruby-identifier">children</span>) }
301
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;xyz&gt;x&lt;/xyz&gt; &lt;xyz&gt;&lt;bar&gt;y&lt;/bar&gt;&lt;/xyz&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#deep_map should work&quot;</span>)
302
+ <span class="ruby-keyword kw">end</span>
303
+ </pre>
304
+ </div>
305
+ </div>
306
+ </div>
307
+ <div class="method">
308
+ <div class="title">
309
+ <a name="M000078"></a><b>test_descendant</b>()
310
+ </div>
311
+ <div class="description">
312
+ <p>
313
+ Test <a href="XML.html#M000049">XML#descendant</a>
314
+ </p>
315
+ </div>
316
+ <div class="sourcecode">
317
+ <p class="source-link">[ <a href="javascript:toggleSource('M000078_source')" id="l_M000078_source">show source</a> ]</p>
318
+ <div id="M000078_source" class="dyn-source">
319
+ <pre>
320
+ <span class="ruby-comment cmt"># File tests.rb, line 306</span>
321
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_descendant</span>
322
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;/foo&gt;&quot;</span>)
323
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar a='1'/&gt;&lt;/foo&gt;&quot;</span>)
324
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar a='1'/&gt;&lt;bar a='2'/&gt;&lt;/foo&gt;&quot;</span>)
325
+ <span class="ruby-identifier">d</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar a='1'&gt;&lt;bar a='2'/&gt;&lt;/bar&gt;&lt;bar a='3'/&gt;&lt;/foo&gt;&quot;</span>)
326
+ <span class="ruby-identifier">e</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;foo&gt;&lt;bar a='1'/&gt;&lt;/foo&gt;&lt;bar a='2'/&gt;&lt;/foo&gt;&quot;</span>)
327
+
328
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">descendant</span>(<span class="ruby-identifier">:bar</span>), <span class="ruby-value str">&quot;XML#descendant should return nil if there are no matching descendants&quot;</span>)
329
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar a='1'/&gt;&quot;</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">descendant</span>(<span class="ruby-identifier">:bar</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#descendant should work&quot;</span>)
330
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar a='1'/&gt;&quot;</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">descendant</span>(<span class="ruby-identifier">:bar</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#descendant should return first descendant if there are many&quot;</span>)
331
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar a='1'&gt;&lt;bar a='2'/&gt;&lt;/bar&gt;&quot;</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">descendant</span>(<span class="ruby-identifier">:bar</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#descendant should return first descendant if there are many&quot;</span>)
332
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar a='1'/&gt;&quot;</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">descendant</span>(<span class="ruby-identifier">:bar</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#descendant should return first descendant if there are many&quot;</span>)
333
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar a='2'/&gt;&quot;</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">descendant</span>({<span class="ruby-identifier">:a</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'2'</span>}).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#descendant should support patterns&quot;</span>)
334
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar a='2'/&gt;&quot;</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">descendant</span>({<span class="ruby-identifier">:a</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'2'</span>}).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#descendant should support patterns&quot;</span>)
335
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar a='2'/&gt;&quot;</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">descendant</span>({<span class="ruby-identifier">:a</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'2'</span>}).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#descendant should support patterns&quot;</span>)
336
+ <span class="ruby-keyword kw">end</span>
337
+ </pre>
338
+ </div>
339
+ </div>
340
+ </div>
341
+ <div class="method">
342
+ <div class="title">
343
+ <a name="M000075"></a><b>test_descendants</b>()
344
+ </div>
345
+ <div class="description">
346
+ <p>
347
+ Test <a href="XML.html#M000051">XML#descendants</a> and <a
348
+ href="Array.html#M000104">Array#descendants</a>
349
+ </p>
350
+ </div>
351
+ <div class="sourcecode">
352
+ <p class="source-link">[ <a href="javascript:toggleSource('M000075_source')" id="l_M000075_source">show source</a> ]</p>
353
+ <div id="M000075_source" class="dyn-source">
354
+ <pre>
355
+ <span class="ruby-comment cmt"># File tests.rb, line 272</span>
356
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_descendants</span>
357
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">bar</span>({<span class="ruby-identifier">:x=</span><span class="ruby-operator">&gt;</span><span class="ruby-value str">&quot;1&quot;</span>})
358
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">bar</span>({<span class="ruby-identifier">:x=</span><span class="ruby-operator">&gt;</span><span class="ruby-value str">&quot;3&quot;</span>})
359
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">bar</span>({<span class="ruby-identifier">:x=</span><span class="ruby-operator">&gt;</span><span class="ruby-value str">&quot;2&quot;</span>}, <span class="ruby-identifier">b</span>)
360
+ <span class="ruby-identifier">d</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">foo</span>(<span class="ruby-identifier">a</span>,<span class="ruby-identifier">c</span>)
361
+ <span class="ruby-identifier">e</span> = <span class="ruby-identifier">d</span>.<span class="ruby-identifier">descendants</span>(<span class="ruby-identifier">:bar</span>)
362
+ <span class="ruby-identifier">f</span> = <span class="ruby-identifier">e</span>.<span class="ruby-identifier">descendants</span>(<span class="ruby-identifier">:bar</span>)
363
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-identifier">a</span>,<span class="ruby-identifier">c</span>,<span class="ruby-identifier">b</span>], <span class="ruby-identifier">e</span>, <span class="ruby-value str">&quot;XML#descendants(tag) should return tag-tagged descendants&quot;</span>)
364
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-identifier">b</span>], <span class="ruby-identifier">f</span>, <span class="ruby-value str">&quot;Array#descendants(tag) should return tag-tagged descendants of its elements&quot;</span>)
365
+ <span class="ruby-keyword kw">end</span>
366
+ </pre>
367
+ </div>
368
+ </div>
369
+ </div>
370
+ <div class="method">
371
+ <div class="title">
372
+ <a name="M000064"></a><b>test_dup</b>()
373
+ </div>
374
+ <div class="description">
375
+ <p>
376
+ Test dup-with-block method
377
+ </p>
378
+ </div>
379
+ <div class="sourcecode">
380
+ <p class="source-link">[ <a href="javascript:toggleSource('M000064_source')" id="l_M000064_source">show source</a> ]</p>
381
+ <div id="M000064_source" class="dyn-source">
382
+ <pre>
383
+ <span class="ruby-comment cmt"># File tests.rb, line 136</span>
384
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_dup</span>
385
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, {<span class="ruby-identifier">:a</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;1&quot;</span>}, <span class="ruby-value str">&quot;Hello&quot;</span>)
386
+ <span class="ruby-identifier">b</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">dup</span>{ <span class="ruby-ivar">@name</span> = <span class="ruby-identifier">:bar</span> }
387
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">dup</span>{ <span class="ruby-keyword kw">self</span>[<span class="ruby-identifier">:a</span>] = <span class="ruby-value str">&quot;2&quot;</span> }
388
+ <span class="ruby-identifier">d</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">dup</span>{ <span class="ruby-keyword kw">self</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;, world!&quot;</span> }
389
+
390
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo a='1'&gt;Hello&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#dup{} should not modify its argument&quot;</span>)
391
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar a='1'&gt;Hello&lt;/bar&gt;&quot;</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#dup{} should work&quot;</span>)
392
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo a='2'&gt;Hello&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#dup{} should work&quot;</span>)
393
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo a='1'&gt;Hello, world!&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#dup{} should work&quot;</span>)
394
+
395
+ <span class="ruby-comment cmt"># Deep copy test</span>
396
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:h3</span>, <span class="ruby-value str">&quot;Hello&quot;</span>)
397
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:bar</span>, <span class="ruby-identifier">a</span>))
398
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">b</span>.<span class="ruby-identifier">dup</span>
399
+ <span class="ruby-identifier">a</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;, world!&quot;</span>
400
+
401
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar&gt;&lt;h3&gt;Hello, world!&lt;/h3&gt;&lt;/bar&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#dup should make a deep copy&quot;</span>)
402
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar&gt;&lt;h3&gt;Hello&lt;/h3&gt;&lt;/bar&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#dup should make a deep copy&quot;</span>)
403
+ <span class="ruby-keyword kw">end</span>
404
+ </pre>
405
+ </div>
406
+ </div>
407
+ </div>
408
+ <div class="method">
409
+ <div class="title">
410
+ <a name="M000061"></a><b>test_each</b>()
411
+ </div>
412
+ <div class="description">
413
+ <p>
414
+ Test <a href="XML.html#M000012">XML#each</a> method for iterating over
415
+ children
416
+ </p>
417
+ </div>
418
+ <div class="sourcecode">
419
+ <p class="source-link">[ <a href="javascript:toggleSource('M000061_source')" id="l_M000061_source">show source</a> ]</p>
420
+ <div id="M000061_source" class="dyn-source">
421
+ <pre>
422
+ <span class="ruby-comment cmt"># File tests.rb, line 65</span>
423
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_each</span>
424
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:p</span>, <span class="ruby-value str">&quot;Hello&quot;</span>, <span class="ruby-value str">&quot;, &quot;</span>, <span class="ruby-value str">&quot;world&quot;</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:br</span>))
425
+ <span class="ruby-identifier">b</span> = <span class="ruby-value str">&quot;&quot;</span>
426
+ <span class="ruby-identifier">a</span>.<span class="ruby-identifier">each</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-identifier">b</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">to_s</span>}
427
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;Hello, world&lt;br/&gt;&quot;</span>, <span class="ruby-identifier">b</span>, <span class="ruby-value str">&quot;XML#each should work&quot;</span>)
428
+ <span class="ruby-keyword kw">end</span>
429
+ </pre>
430
+ </div>
431
+ </div>
432
+ </div>
433
+ <div class="method">
434
+ <div class="title">
435
+ <a name="M000089"></a><b>test_entities</b>()
436
+ </div>
437
+ <div class="description">
438
+ <p>
439
+ Test entity unescaping
440
+ </p>
441
+ </div>
442
+ <div class="sourcecode">
443
+ <p class="source-link">[ <a href="javascript:toggleSource('M000089_source')" id="l_M000089_source">show source</a> ]</p>
444
+ <div id="M000089_source" class="dyn-source">
445
+ <pre>
446
+ <span class="ruby-comment cmt"># File tests.rb, line 534</span>
447
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_entities</span>
448
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&amp;#xA5;&amp;#xFC;&amp;#x2020;&lt;/foo&gt;&quot;</span>)
449
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&amp;#165;&amp;#252;&amp;#8224;&lt;/foo&gt;&quot;</span>)
450
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&amp;yen;&amp;uuml;&amp;dagger;&lt;/foo&gt;&quot;</span>)
451
+ <span class="ruby-identifier">d</span> = <span class="ruby-value str">&quot;&quot;</span>
452
+
453
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">b</span>.<span class="ruby-identifier">text</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">text</span>, <span class="ruby-value str">&quot;Entity unescaping on XML#Parse should work&quot;</span>)
454
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">c</span>.<span class="ruby-identifier">text</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">text</span>, <span class="ruby-value str">&quot;Entity unescaping on XML#Parse should work&quot;</span>)
455
+
456
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Entity escaping on XML#to_s should work&quot;</span>)
457
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">c</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Entity escaping on XML#to_s should work&quot;</span>)
458
+
459
+ <span class="ruby-comment cmt"># The escapes assume \XXX are byte escapes and the encoding is UTF-8</span>
460
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;\302\245\303\274\342\200\240&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">text</span>, <span class="ruby-value str">&quot;Entity unescaping on XML#Parse should work&quot;</span>)
461
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;\302\245\303\274\342\200\240&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Entity escaping on XML#to_s should work&quot;</span>)
462
+ <span class="ruby-keyword kw">end</span>
463
+ </pre>
464
+ </div>
465
+ </div>
466
+ </div>
467
+ <div class="method">
468
+ <div class="title">
469
+ <a name="M000063"></a><b>test_eqeq</b>()
470
+ </div>
471
+ <div class="description">
472
+ <p>
473
+ Test <a href="XML.html">XML</a>#==
474
+ </p>
475
+ </div>
476
+ <div class="sourcecode">
477
+ <p class="source-link">[ <a href="javascript:toggleSource('M000063_source')" id="l_M000063_source">show source</a> ]</p>
478
+ <div id="M000063_source" class="dyn-source">
479
+ <pre>
480
+ <span class="ruby-comment cmt"># File tests.rb, line 92</span>
481
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_eqeq</span>
482
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>)
483
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>)
484
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:bar</span>)
485
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">a</span><span class="ruby-operator">==</span><span class="ruby-identifier">a</span>, <span class="ruby-value str">&quot;XML#== should work&quot;</span>)
486
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">a</span><span class="ruby-operator">==</span><span class="ruby-identifier">b</span>, <span class="ruby-value str">&quot;XML#== should work&quot;</span>)
487
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">a!</span>=<span class="ruby-identifier">c</span>, <span class="ruby-value str">&quot;XML#== should work&quot;</span>)
488
+
489
+ <span class="ruby-identifier">d</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, {<span class="ruby-identifier">:bar</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;1&quot;</span>})
490
+ <span class="ruby-identifier">e</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, {<span class="ruby-identifier">:bar</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;1&quot;</span>})
491
+ <span class="ruby-identifier">f</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, {<span class="ruby-identifier">:bar</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;2&quot;</span>})
492
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">d</span><span class="ruby-operator">==</span><span class="ruby-identifier">d</span>, <span class="ruby-value str">&quot;XML#== should work&quot;</span>)
493
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">d</span><span class="ruby-operator">==</span><span class="ruby-identifier">e</span>, <span class="ruby-value str">&quot;XML#== should work&quot;</span>)
494
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">d!</span>=<span class="ruby-identifier">f</span>, <span class="ruby-value str">&quot;XML#== should work&quot;</span>)
495
+
496
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, <span class="ruby-value str">&quot;Hello, world!&quot;</span>)
497
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, <span class="ruby-value str">&quot;Hello, world!&quot;</span>)
498
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, <span class="ruby-value str">&quot;Hello&quot;</span>, <span class="ruby-value str">&quot;, world!&quot;</span>)
499
+ <span class="ruby-identifier">d</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, <span class="ruby-value str">&quot;Hello&quot;</span>)
500
+ <span class="ruby-identifier">e</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, <span class="ruby-value str">&quot;Hello&quot;</span>, <span class="ruby-value str">&quot;&quot;</span>)
501
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">a</span><span class="ruby-operator">==</span><span class="ruby-identifier">a</span>, <span class="ruby-value str">&quot;XML#== should work&quot;</span>)
502
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">a</span><span class="ruby-operator">==</span><span class="ruby-identifier">b</span>, <span class="ruby-value str">&quot;XML#== should work&quot;</span>)
503
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">a</span><span class="ruby-operator">==</span><span class="ruby-identifier">c</span>, <span class="ruby-value str">&quot;XML#== should work&quot;</span>)
504
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">a!</span>=<span class="ruby-identifier">d</span>, <span class="ruby-value str">&quot;XML#== should work&quot;</span>)
505
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">d</span><span class="ruby-operator">==</span><span class="ruby-identifier">e</span>, <span class="ruby-value str">&quot;Empty children should not affect XML#==&quot;</span>)
506
+
507
+ <span class="ruby-comment cmt"># Highly pathological case</span>
508
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, <span class="ruby-value str">&quot;ab&quot;</span>, <span class="ruby-value str">&quot;cde&quot;</span>, <span class="ruby-value str">&quot;&quot;</span>, <span class="ruby-value str">&quot;fg&quot;</span>, <span class="ruby-value str">&quot;hijk&quot;</span>, <span class="ruby-value str">&quot;&quot;</span>, <span class="ruby-value str">&quot;&quot;</span>)
509
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, <span class="ruby-value str">&quot;&quot;</span>, <span class="ruby-value str">&quot;abc&quot;</span>, <span class="ruby-value str">&quot;d&quot;</span>, <span class="ruby-value str">&quot;efg&quot;</span>, <span class="ruby-value str">&quot;h&quot;</span>, <span class="ruby-value str">&quot;ijk&quot;</span>)
510
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">a</span><span class="ruby-operator">==</span><span class="ruby-identifier">b</span>, <span class="ruby-value str">&quot;XML#== should work with differently split Strings too&quot;</span>)
511
+
512
+ <span class="ruby-comment cmt"># String vs XML</span>
513
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, <span class="ruby-value str">&quot;Hello&quot;</span>)
514
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>) {<span class="ruby-identifier">foo!</span>}
515
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>) {<span class="ruby-identifier">bar!</span>}
516
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">a!</span>=<span class="ruby-identifier">b</span>, <span class="ruby-value str">&quot;XML#== should work with children of different types&quot;</span>)
517
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">b!</span>=<span class="ruby-identifier">c</span>, <span class="ruby-value str">&quot;XML#== should work recursively&quot;</span>)
518
+
519
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>) {<span class="ruby-identifier">foo!</span>; <span class="ruby-identifier">bar!</span>}
520
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>) {<span class="ruby-identifier">foo!</span>; <span class="ruby-identifier">foo!</span>}
521
+ <span class="ruby-identifier">assert</span>(<span class="ruby-identifier">a!</span>=<span class="ruby-identifier">b</span>, <span class="ruby-value str">&quot;XML#== should work recursively&quot;</span>)
522
+ <span class="ruby-keyword kw">end</span>
523
+ </pre>
524
+ </div>
525
+ </div>
526
+ </div>
527
+ <div class="method">
528
+ <div class="title">
529
+ <a name="M000057"></a><b>test_escapes</b>()
530
+ </div>
531
+ <div class="description">
532
+ <p>
533
+ Test character escaping on output, in text and in attribute values
534
+ </p>
535
+ </div>
536
+ <div class="sourcecode">
537
+ <p class="source-link">[ <a href="javascript:toggleSource('M000057_source')" id="l_M000057_source">show source</a> ]</p>
538
+ <div id="M000057_source" class="dyn-source">
539
+ <pre>
540
+ <span class="ruby-comment cmt"># File tests.rb, line 23</span>
541
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_escapes</span>
542
+ <span class="ruby-identifier">p</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:p</span>, <span class="ruby-value str">&quot;&lt; &gt; &amp;&quot;</span>)
543
+ <span class="ruby-identifier">foo</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, {<span class="ruby-identifier">:bar=</span><span class="ruby-operator">&gt;</span><span class="ruby-value str">&quot;&lt; &gt; ' \&quot; &amp;&quot;</span>})
544
+
545
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;p&gt;&amp;lt; &amp;gt; &amp;amp;&lt;/p&gt;&quot;</span>, <span class="ruby-identifier">p</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Character escaping should work&quot;</span>)
546
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo bar='&amp;lt; &amp;gt; &amp;apos; &amp;quot; &amp;amp;'/&gt;&quot;</span>, <span class="ruby-identifier">foo</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Character escaping in attributes should work&quot;</span>)
547
+ <span class="ruby-keyword kw">end</span>
548
+ </pre>
549
+ </div>
550
+ </div>
551
+ </div>
552
+ <div class="method">
553
+ <div class="title">
554
+ <a name="M000076"></a><b>test_exec</b>()
555
+ </div>
556
+ <div class="description">
557
+ <p>
558
+ Test XML#exec! monadic interface
559
+ </p>
560
+ </div>
561
+ <div class="sourcecode">
562
+ <p class="source-link">[ <a href="javascript:toggleSource('M000076_source')" id="l_M000076_source">show source</a> ]</p>
563
+ <div id="M000076_source" class="dyn-source">
564
+ <pre>
565
+ <span class="ruby-comment cmt"># File tests.rb, line 284</span>
566
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_exec</span>
567
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">foo</span>
568
+ <span class="ruby-identifier">a</span>.<span class="ruby-identifier">exec!</span> {
569
+ <span class="ruby-identifier">bar!</span> { <span class="ruby-identifier">text!</span> <span class="ruby-value str">&quot;Hello&quot;</span> }
570
+ <span class="ruby-identifier">text!</span> <span class="ruby-value str">&quot;world&quot;</span>
571
+ }
572
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar&gt;Hello&lt;/bar&gt;world&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#exec! should work&quot;</span>)
573
+ <span class="ruby-keyword kw">end</span>
574
+ </pre>
575
+ </div>
576
+ </div>
577
+ </div>
578
+ <div class="method">
579
+ <div class="title">
580
+ <a name="M000086"></a><b>test_inpsect</b>()
581
+ </div>
582
+ <div class="description">
583
+ <p>
584
+ Test <a href="XML.html#M000028">XML#inspect</a>
585
+ </p>
586
+ </div>
587
+ <div class="sourcecode">
588
+ <p class="source-link">[ <a href="javascript:toggleSource('M000086_source')" id="l_M000086_source">show source</a> ]</p>
589
+ <div id="M000086_source" class="dyn-source">
590
+ <pre>
591
+ <span class="ruby-comment cmt"># File tests.rb, line 491</span>
592
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_inpsect</span>
593
+ <span class="ruby-identifier">a</span> = <span class="ruby-identifier">xml</span>(<span class="ruby-identifier">:a</span>, <span class="ruby-identifier">xml</span>(<span class="ruby-identifier">:b</span>, <span class="ruby-identifier">xml</span>(<span class="ruby-identifier">:c</span>)))
594
+ <span class="ruby-identifier">d</span> = <span class="ruby-identifier">xml</span>(<span class="ruby-identifier">:d</span>)
595
+
596
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;a&gt;...&lt;/a&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">inspect</span>, <span class="ruby-value str">&quot;XML#inspect should work&quot;</span>)
597
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;a&gt;...&lt;/a&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">inspect</span>(<span class="ruby-value">0</span>), <span class="ruby-value str">&quot;XML#inspect(levels) should work&quot;</span>)
598
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;a&gt;&lt;b&gt;...&lt;/b&gt;&lt;/a&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">inspect</span>(<span class="ruby-value">1</span>), <span class="ruby-value str">&quot;XML#inspect(levels) should work&quot;</span>)
599
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;a&gt;&lt;b&gt;&lt;c/&gt;&lt;/b&gt;&lt;/a&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">inspect</span>(<span class="ruby-value">2</span>), <span class="ruby-value str">&quot;XML#inspect(levels) should work&quot;</span>)
600
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;a&gt;&lt;b&gt;&lt;c/&gt;&lt;/b&gt;&lt;/a&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">inspect</span>(<span class="ruby-value">3</span>), <span class="ruby-value str">&quot;XML#inspect(levels) should work&quot;</span>)
601
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;d/&gt;&quot;</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">inspect</span>, <span class="ruby-value str">&quot;XML#inspect should work&quot;</span>)
602
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;d/&gt;&quot;</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">inspect</span>(<span class="ruby-value">0</span>), <span class="ruby-value str">&quot;XML#inspect should work&quot;</span>)
603
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;d/&gt;&quot;</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">inspect</span>(<span class="ruby-value">1</span>), <span class="ruby-value str">&quot;XML#inspect should work&quot;</span>)
604
+ <span class="ruby-keyword kw">end</span>
605
+ </pre>
606
+ </div>
607
+ </div>
608
+ </div>
609
+ <div class="method">
610
+ <div class="title">
611
+ <a name="M000099"></a><b>test_load</b>()
612
+ </div>
613
+ <div class="description">
614
+ <p>
615
+ Test <a href="XML.html#M000019">XML.load</a>
616
+ </p>
617
+ </div>
618
+ <div class="sourcecode">
619
+ <p class="source-link">[ <a href="javascript:toggleSource('M000099_source')" id="l_M000099_source">show source</a> ]</p>
620
+ <div id="M000099_source" class="dyn-source">
621
+ <pre>
622
+ <span class="ruby-comment cmt"># File tests.rb, line 778</span>
623
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_load</span>
624
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">load</span>(<span class="ruby-value str">&quot;test.xml&quot;</span>)
625
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">load</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-value str">&quot;test.xml&quot;</span>))
626
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">load</span>(<span class="ruby-value str">&quot;string:&lt;foo&gt;&lt;bar&gt;&lt;/bar&gt;&lt;/foo&gt;&quot;</span>)
627
+ <span class="ruby-identifier">d</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">load</span>(<span class="ruby-value str">&quot;file:test.xml&quot;</span>)
628
+
629
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#load should work&quot;</span>)
630
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#load should work&quot;</span>)
631
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#load should work&quot;</span>)
632
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#load should work&quot;</span>)
633
+ <span class="ruby-keyword kw">end</span>
634
+ </pre>
635
+ </div>
636
+ </div>
637
+ </div>
638
+ <div class="method">
639
+ <div class="title">
640
+ <a name="M000062"></a><b>test_map</b>()
641
+ </div>
642
+ <div class="description">
643
+ <p>
644
+ Test <a href="XML.html#M000053">XML#map</a> method
645
+ </p>
646
+ </div>
647
+ <div class="sourcecode">
648
+ <p class="source-link">[ <a href="javascript:toggleSource('M000062_source')" id="l_M000062_source">show source</a> ]</p>
649
+ <div id="M000062_source" class="dyn-source">
650
+ <pre>
651
+ <span class="ruby-comment cmt"># File tests.rb, line 73</span>
652
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_map</span>
653
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:body</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:h3</span>, <span class="ruby-value str">&quot;One&quot;</span>), <span class="ruby-value str">&quot;Hello&quot;</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:h3</span>, <span class="ruby-value str">&quot;Two&quot;</span>))
654
+ <span class="ruby-identifier">b</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
655
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">XML</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:h3</span>
656
+ <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:h2</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">attrs</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">c</span>.<span class="ruby-identifier">contents</span>)
657
+ <span class="ruby-keyword kw">else</span>
658
+ <span class="ruby-identifier">c</span>
659
+ <span class="ruby-keyword kw">end</span>
660
+ }
661
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;body&gt;&lt;h3&gt;One&lt;/h3&gt;Hello&lt;h3&gt;Two&lt;/h3&gt;&lt;/body&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#map should not modify the argument&quot;</span>)
662
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;body&gt;&lt;h2&gt;One&lt;/h2&gt;Hello&lt;h2&gt;Two&lt;/h2&gt;&lt;/body&gt;&quot;</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#map should work&quot;</span>)
663
+
664
+ <span class="ruby-identifier">d</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">map</span>(<span class="ruby-identifier">:h3</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
665
+ <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:h2</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">attrs</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">c</span>.<span class="ruby-identifier">contents</span>)
666
+ }
667
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;body&gt;&lt;h2&gt;One&lt;/h2&gt;Hello&lt;h2&gt;Two&lt;/h2&gt;&lt;/body&gt;&quot;</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#map should accept selectors&quot;</span>)
668
+ <span class="ruby-keyword kw">end</span>
669
+ </pre>
670
+ </div>
671
+ </div>
672
+ </div>
673
+ <div class="method">
674
+ <div class="title">
675
+ <a name="M000066"></a><b>test_monadic</b>()
676
+ </div>
677
+ <div class="description">
678
+ <p>
679
+ Test the &quot;monadic&quot; interface, that is constructors with
680
+ instance_eval&#8216;d blocks passed to them: <a
681
+ href="XML.html#M000026">XML.new</a>(:foo) { bar! } # -&gt;
682
+ &lt;foo&gt;&lt;bar/&gt;&lt;/foo&gt;
683
+ </p>
684
+ </div>
685
+ <div class="sourcecode">
686
+ <p class="source-link">[ <a href="javascript:toggleSource('M000066_source')" id="l_M000066_source">show source</a> ]</p>
687
+ <div id="M000066_source" class="dyn-source">
688
+ <pre>
689
+ <span class="ruby-comment cmt"># File tests.rb, line 175</span>
690
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_monadic</span>
691
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>) { <span class="ruby-identifier">bar!</span>; <span class="ruby-identifier">xml!</span>(<span class="ruby-identifier">:xxx</span>) }
692
+ <span class="ruby-identifier">b</span> = <span class="ruby-identifier">xml</span>(<span class="ruby-identifier">:div</span>) {
693
+ <span class="ruby-identifier">ul!</span> {
694
+ <span class="ruby-identifier">li!</span>(<span class="ruby-constant">XML</span>.<span class="ruby-identifier">a</span>(<span class="ruby-value str">&quot;Hello&quot;</span>))
695
+ }
696
+ }
697
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar/&gt;&lt;xxx/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Monadic interface should work&quot;</span>)
698
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a&gt;Hello&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&quot;</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Monadic interface should work&quot;</span>)
699
+ <span class="ruby-keyword kw">end</span>
700
+ </pre>
701
+ </div>
702
+ </div>
703
+ </div>
704
+ <div class="method">
705
+ <div class="title">
706
+ <a name="M000100"></a><b>test_multielement_selectors</b>()
707
+ </div>
708
+ <div class="description">
709
+ <p>
710
+ Test multielement selectors
711
+ </p>
712
+ </div>
713
+ <div class="sourcecode">
714
+ <p class="source-link">[ <a href="javascript:toggleSource('M000100_source')" id="l_M000100_source">show source</a> ]</p>
715
+ <div id="M000100_source" class="dyn-source">
716
+ <pre>
717
+ <span class="ruby-comment cmt"># File tests.rb, line 791</span>
718
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_multielement_selectors</span>
719
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar color='blue'&gt;&lt;x/&gt;&lt;/bar&gt;&lt;bar color='red'&gt;&lt;x&gt;&lt;y i='1'/&gt;&lt;/x&gt;&lt;y i='2'/&gt;&lt;/bar&gt;&lt;/foo&gt;&quot;</span>)
720
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;x/&gt;&lt;x&gt;&lt;y i='1'/&gt;&lt;/x&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">children</span>(<span class="ruby-identifier">:bar</span>, <span class="ruby-identifier">:x</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Multielement selectors should work&quot;</span>)
721
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;y i='2'/&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">children</span>(<span class="ruby-identifier">:bar</span>, <span class="ruby-identifier">:y</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Multielement selectors should work&quot;</span>)
722
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;y i='1'/&gt;&lt;y i='2'/&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">children</span>(<span class="ruby-identifier">:bar</span>, <span class="ruby-identifier">:*</span>, <span class="ruby-identifier">:y</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Multielement selectors should work&quot;</span>)
723
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;y i='1'/&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">descendants</span>(<span class="ruby-identifier">:x</span>, <span class="ruby-identifier">:y</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Multielement selectors should work&quot;</span>)
724
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;y i='1'/&gt;&lt;y i='2'/&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">children</span>(<span class="ruby-identifier">:bar</span>, <span class="ruby-identifier">:*</span>, <span class="ruby-identifier">:y</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Multielement selectors should work&quot;</span>)
725
+ <span class="ruby-keyword kw">end</span>
726
+ </pre>
727
+ </div>
728
+ </div>
729
+ </div>
730
+ <div class="method">
731
+ <div class="title">
732
+ <a name="M000065"></a><b>test_normalize</b>()
733
+ </div>
734
+ <div class="description">
735
+ <p>
736
+ Test XML#normalize! method
737
+ </p>
738
+ </div>
739
+ <div class="sourcecode">
740
+ <p class="source-link">[ <a href="javascript:toggleSource('M000065_source')" id="l_M000065_source">show source</a> ]</p>
741
+ <div id="M000065_source" class="dyn-source">
742
+ <pre>
743
+ <span class="ruby-comment cmt"># File tests.rb, line 158</span>
744
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_normalize</span>
745
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, <span class="ruby-value str">&quot;He&quot;</span>, <span class="ruby-value str">&quot;&quot;</span>, <span class="ruby-value str">&quot;llo&quot;</span>)
746
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, <span class="ruby-value str">&quot;&quot;</span>)
747
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>, <span class="ruby-value str">&quot;&quot;</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:bar</span>, <span class="ruby-value str">&quot;1&quot;</span>), <span class="ruby-value str">&quot;&quot;</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:bar</span>, <span class="ruby-value str">&quot;2&quot;</span>, <span class="ruby-value str">&quot;&quot;</span>), <span class="ruby-value str">&quot;X&quot;</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:bar</span>, <span class="ruby-value str">&quot;&quot;</span>, <span class="ruby-value str">&quot;3&quot;</span>), <span class="ruby-value str">&quot;&quot;</span>)
748
+
749
+ <span class="ruby-identifier">a</span>.<span class="ruby-identifier">normalize!</span>
750
+ <span class="ruby-identifier">b</span>.<span class="ruby-identifier">normalize!</span>
751
+ <span class="ruby-identifier">c</span>.<span class="ruby-identifier">normalize!</span>
752
+
753
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-value str">&quot;Hello&quot;</span>], <span class="ruby-identifier">a</span>.<span class="ruby-identifier">contents</span>, <span class="ruby-value str">&quot;XML#normalize! should work&quot;</span>)
754
+ <span class="ruby-identifier">assert_equal</span>([], <span class="ruby-identifier">b</span>.<span class="ruby-identifier">contents</span>, <span class="ruby-value str">&quot;XML#normalize! should work&quot;</span>)
755
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:bar</span>, <span class="ruby-value str">&quot;1&quot;</span>), <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:bar</span>, <span class="ruby-value str">&quot;2&quot;</span>), <span class="ruby-value str">&quot;X&quot;</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:bar</span>, <span class="ruby-value str">&quot;3&quot;</span>)], <span class="ruby-identifier">c</span>.<span class="ruby-identifier">contents</span>, <span class="ruby-value str">&quot;XML#normalize! should work&quot;</span>)
756
+ <span class="ruby-keyword kw">end</span>
757
+ </pre>
758
+ </div>
759
+ </div>
760
+ </div>
761
+ <div class="method">
762
+ <div class="title">
763
+ <a name="M000067"></a><b>test_parse</b>()
764
+ </div>
765
+ <div class="description">
766
+ <p>
767
+ Test if parsing and printing gives the right results We test mostly
768
+ round-trip
769
+ </p>
770
+ </div>
771
+ <div class="sourcecode">
772
+ <p class="source-link">[ <a href="javascript:toggleSource('M000067_source')" id="l_M000067_source">show source</a> ]</p>
773
+ <div id="M000067_source" class="dyn-source">
774
+ <pre>
775
+ <span class="ruby-comment cmt"># File tests.rb, line 188</span>
776
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_parse</span>
777
+ <span class="ruby-identifier">a</span> = <span class="ruby-value str">&quot;&lt;foo/&gt;&quot;</span>
778
+ <span class="ruby-identifier">b</span> = <span class="ruby-value str">&quot;&lt;foo a='1'/&gt;&quot;</span>
779
+ <span class="ruby-identifier">c</span> = <span class="ruby-value str">&quot;&lt;foo&gt;Hello&lt;/foo&gt;&quot;</span>
780
+ <span class="ruby-identifier">d</span> = <span class="ruby-value str">&quot;&lt;foo a='1'&gt;&lt;bar b='2'&gt;Hello&lt;/bar&gt;&lt;bar b='3'&gt;world&lt;/bar&gt;&lt;/foo&gt;&quot;</span>
781
+ <span class="ruby-identifier">e</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&amp;gt; &amp;lt; &amp;amp;&lt;/foo&gt;&quot;</span>
782
+ <span class="ruby-identifier">f</span> = <span class="ruby-value str">&quot;&lt;foo a='b&amp;amp;c'/&gt;&quot;</span>
783
+
784
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">a</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">a</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse(x).to_s should equal x for normalized x&quot;</span>)
785
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">b</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">b</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse(x).to_s should equal x for normalized x&quot;</span>)
786
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">c</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">c</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse(x).to_s should equal x for normalized x&quot;</span>)
787
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">d</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">d</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse(x).to_s should equal x for normalized x&quot;</span>)
788
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">e</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">e</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse(x).to_s should equal x for normalized x&quot;</span>)
789
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">f</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">f</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse(x).to_s should equal x for normalized x&quot;</span>)
790
+ <span class="ruby-keyword kw">end</span>
791
+ </pre>
792
+ </div>
793
+ </div>
794
+ </div>
795
+ <div class="method">
796
+ <div class="title">
797
+ <a name="M000085"></a><b>test_parse_as_twigs</b>()
798
+ </div>
799
+ <div class="description">
800
+ <p>
801
+ Test <a href="XML.html#M000020">XML#parse_as_twigs</a> interface
802
+ </p>
803
+ </div>
804
+ <div class="sourcecode">
805
+ <p class="source-link">[ <a href="javascript:toggleSource('M000085_source')" id="l_M000085_source">show source</a> ]</p>
806
+ <div id="M000085_source" class="dyn-source">
807
+ <pre>
808
+ <span class="ruby-comment cmt"># File tests.rb, line 471</span>
809
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_parse_as_twigs</span>
810
+ <span class="ruby-identifier">stream</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;1&lt;/li&gt;&lt;li&gt;2&lt;/li&gt;&lt;li&gt;3&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p/&gt;&lt;p&gt;&lt;bar/&gt;&lt;/p&gt;&lt;/foo&gt;&quot;</span>
811
+ <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
812
+ <span class="ruby-identifier">results</span> = []
813
+ <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse_as_twigs</span>(<span class="ruby-identifier">stream</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span>
814
+ <span class="ruby-identifier">n</span>.<span class="ruby-identifier">complete!</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">==</span> <span class="ruby-value">3</span>
815
+ <span class="ruby-identifier">results</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">n</span>
816
+ <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
817
+ }
818
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo/&gt;&quot;</span>, <span class="ruby-identifier">results</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse_as_twigs should work&quot;</span>)
819
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;p&gt;&lt;ul&gt;&lt;li&gt;1&lt;/li&gt;&lt;li&gt;2&lt;/li&gt;&lt;li&gt;3&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&quot;</span>, <span class="ruby-identifier">results</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse_as_twigs should work&quot;</span>)
820
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;p/&gt;&quot;</span>, <span class="ruby-identifier">results</span>[<span class="ruby-value">2</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse_as_twigs should work&quot;</span>)
821
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;br/&gt;&quot;</span>, <span class="ruby-identifier">results</span>[<span class="ruby-value">3</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse_as_twigs should work&quot;</span>)
822
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;p/&gt;&quot;</span>, <span class="ruby-identifier">results</span>[<span class="ruby-value">4</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse_as_twigs should work&quot;</span>)
823
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;p/&gt;&quot;</span>, <span class="ruby-identifier">results</span>[<span class="ruby-value">5</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse_as_twigs should work&quot;</span>)
824
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar/&gt;&quot;</span>, <span class="ruby-identifier">results</span>[<span class="ruby-value">6</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse_as_twigs should work&quot;</span>)
825
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value">7</span>, <span class="ruby-identifier">results</span>.<span class="ruby-identifier">size</span>, <span class="ruby-value str">&quot;XML.parse_as_twigs should work&quot;</span>)
826
+ <span class="ruby-keyword kw">end</span>
827
+ </pre>
828
+ </div>
829
+ </div>
830
+ </div>
831
+ <div class="method">
832
+ <div class="title">
833
+ <a name="M000069"></a><b>test_parse_extra_cdata</b>()
834
+ </div>
835
+ <div class="description">
836
+ <p>
837
+ Test handling extra cruft Some things are best ignored or normalized
838
+ </p>
839
+ </div>
840
+ <div class="sourcecode">
841
+ <p class="source-link">[ <a href="javascript:toggleSource('M000069_source')" id="l_M000069_source">show source</a> ]</p>
842
+ <div id="M000069_source" class="dyn-source">
843
+ <pre>
844
+ <span class="ruby-comment cmt"># File tests.rb, line 214</span>
845
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_parse_extra_cdata</span>
846
+ <span class="ruby-identifier">a</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&lt;![CDATA[&lt;greeting&gt;Hello, world!&lt;/greeting&gt;]]&gt;&lt;/foo&gt;&quot;</span>
847
+ <span class="ruby-identifier">a_out</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&amp;lt;greeting&amp;gt;Hello, world!&amp;lt;/greeting&amp;gt;&lt;/foo&gt;&quot;</span>
848
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">a_out</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">a</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse(x).to_s should equal normalized x&quot;</span>)
849
+ <span class="ruby-keyword kw">end</span>
850
+ </pre>
851
+ </div>
852
+ </div>
853
+ </div>
854
+ <div class="method">
855
+ <div class="title">
856
+ <a name="M000072"></a><b>test_parse_extra_comment</b>()
857
+ </div>
858
+ <div class="description">
859
+ <p>
860
+ Test handling (=ignoring) DTDs
861
+ </p>
862
+ </div>
863
+ <div class="sourcecode">
864
+ <p class="source-link">[ <a href="javascript:toggleSource('M000072_source')" id="l_M000072_source">show source</a> ]</p>
865
+ <div id="M000072_source" class="dyn-source">
866
+ <pre>
867
+ <span class="ruby-comment cmt"># File tests.rb, line 235</span>
868
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_parse_extra_comment</span>
869
+ <span class="ruby-identifier">c</span> = <span class="ruby-value str">&quot;&lt;!-- this is a comment --&gt;&lt;greeting&gt;Hello,&lt;!-- another comment --&gt; world!&lt;/greeting&gt;&quot;</span>
870
+ <span class="ruby-identifier">c_out</span> = <span class="ruby-value str">&quot;&lt;greeting&gt;Hello, world!&lt;/greeting&gt;&quot;</span>
871
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">c_out</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">c</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse(x).to_s should equal normalized x&quot;</span>)
872
+ <span class="ruby-keyword kw">end</span>
873
+ </pre>
874
+ </div>
875
+ </div>
876
+ </div>
877
+ <div class="method">
878
+ <div class="title">
879
+ <a name="M000071"></a><b>test_parse_extra_dtd</b>()
880
+ </div>
881
+ <div class="description">
882
+ <p>
883
+ Test handling (=ignoring) DTDs
884
+ </p>
885
+ </div>
886
+ <div class="sourcecode">
887
+ <p class="source-link">[ <a href="javascript:toggleSource('M000071_source')" id="l_M000071_source">show source</a> ]</p>
888
+ <div id="M000071_source" class="dyn-source">
889
+ <pre>
890
+ <span class="ruby-comment cmt"># File tests.rb, line 228</span>
891
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_parse_extra_dtd</span>
892
+ <span class="ruby-identifier">c</span> = <span class="ruby-value str">&quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot; ?&gt;&lt;!DOCTYPE greeting [&lt;!ELEMENT greeting (#PCDATA)&gt;]&gt;&lt;greeting&gt;Hello, world!&lt;/greeting&gt;&quot;</span>
893
+ <span class="ruby-identifier">c_out</span> = <span class="ruby-value str">&quot;&lt;greeting&gt;Hello, world!&lt;/greeting&gt;&quot;</span>
894
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">c_out</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">c</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse(x).to_s should equal normalized x&quot;</span>)
895
+ <span class="ruby-keyword kw">end</span>
896
+ </pre>
897
+ </div>
898
+ </div>
899
+ </div>
900
+ <div class="method">
901
+ <div class="title">
902
+ <a name="M000068"></a><b>test_parse_extra_escapes</b>()
903
+ </div>
904
+ <div class="description">
905
+ <p>
906
+ Test parsing &amp;-entities
907
+ </p>
908
+ </div>
909
+ <div class="sourcecode">
910
+ <p class="source-link">[ <a href="javascript:toggleSource('M000068_source')" id="l_M000068_source">show source</a> ]</p>
911
+ <div id="M000068_source" class="dyn-source">
912
+ <pre>
913
+ <span class="ruby-comment cmt"># File tests.rb, line 205</span>
914
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_parse_extra_escapes</span>
915
+ <span class="ruby-identifier">a</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&amp;quot; &amp;apos;&lt;/foo&gt;&quot;</span>
916
+ <span class="ruby-identifier">a_out</span> = <span class="ruby-value str">&quot;&lt;foo&gt;\&quot; '&lt;/foo&gt;&quot;</span>
917
+
918
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">a_out</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">a</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse(x).to_s should normalize entities in x&quot;</span>)
919
+ <span class="ruby-keyword kw">end</span>
920
+ </pre>
921
+ </div>
922
+ </div>
923
+ </div>
924
+ <div class="method">
925
+ <div class="title">
926
+ <a name="M000070"></a><b>test_parse_extra_qxml</b>()
927
+ </div>
928
+ <div class="description">
929
+ <p>
930
+ Test handling (=ignoring) <a href="XML.html">XML</a> declarations
931
+ </p>
932
+ </div>
933
+ <div class="sourcecode">
934
+ <p class="source-link">[ <a href="javascript:toggleSource('M000070_source')" id="l_M000070_source">show source</a> ]</p>
935
+ <div id="M000070_source" class="dyn-source">
936
+ <pre>
937
+ <span class="ruby-comment cmt"># File tests.rb, line 221</span>
938
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_parse_extra_qxml</span>
939
+ <span class="ruby-identifier">b</span> = <span class="ruby-value str">&quot;&lt;?xml version=\&quot;1.0\&quot;?&gt;&lt;greeting&gt;Hello, world!&lt;/greeting&gt;&quot;</span>
940
+ <span class="ruby-identifier">b_out</span> = <span class="ruby-value str">&quot;&lt;greeting&gt;Hello, world!&lt;/greeting&gt;&quot;</span>
941
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">b_out</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">b</span>).<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse(x).to_s should equal normalized x&quot;</span>)
942
+ <span class="ruby-keyword kw">end</span>
943
+ </pre>
944
+ </div>
945
+ </div>
946
+ </div>
947
+ <div class="method">
948
+ <div class="title">
949
+ <a name="M000073"></a><b>test_parse_file</b>()
950
+ </div>
951
+ <div class="description">
952
+ <p>
953
+ Test reading from a file
954
+ </p>
955
+ </div>
956
+ <div class="sourcecode">
957
+ <p class="source-link">[ <a href="javascript:toggleSource('M000073_source')" id="l_M000073_source">show source</a> ]</p>
958
+ <div id="M000073_source" class="dyn-source">
959
+ <pre>
960
+ <span class="ruby-comment cmt"># File tests.rb, line 242</span>
961
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_parse_file</span>
962
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-value str">&quot;test.xml&quot;</span>).<span class="ruby-identifier">xml_parse</span>
963
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">from_file</span>(<span class="ruby-value str">&quot;test.xml&quot;</span>)
964
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">from_url</span>(<span class="ruby-value str">&quot;file:test.xml&quot;</span>)
965
+ <span class="ruby-identifier">d</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">from_url</span>(<span class="ruby-value str">&quot;string:&lt;foo&gt;&lt;bar&gt;&lt;/bar&gt;&lt;/foo&gt;&quot;</span>)
966
+ <span class="ruby-identifier">e</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar&gt;&lt;/bar&gt;&lt;/foo&gt;&quot;</span>)
967
+ <span class="ruby-identifier">f</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar&gt;&lt;/bar&gt;&lt;/foo&gt;&quot;</span>.<span class="ruby-identifier">xml_parse</span>
968
+ <span class="ruby-identifier">g</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">foo</span> { <span class="ruby-identifier">bar!</span> }
969
+
970
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">g</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;File#xml_parse should work&quot;</span>)
971
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">g</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.from_file should work&quot;</span>)
972
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">g</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.from_url(\&quot;file:...\&quot;) should work&quot;</span>)
973
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">g</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.from_url(\&quot;string:...\&quot;) should work&quot;</span>)
974
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">g</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML.parse should work&quot;</span>)
975
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">g</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">f</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;String#xml_parse should work&quot;</span>)
976
+ <span class="ruby-keyword kw">end</span>
977
+ </pre>
978
+ </div>
979
+ </div>
980
+ </div>
981
+ <div class="method">
982
+ <div class="title">
983
+ <a name="M000098"></a><b>test_parsing_entities</b>()
984
+ </div>
985
+ <div class="description">
986
+ <p>
987
+ Test <a href="XML.html#M000022">XML.parse</a>(str, :extra_entities =&gt;
988
+ &#8230;)
989
+ </p>
990
+ </div>
991
+ <div class="sourcecode">
992
+ <p class="source-link">[ <a href="javascript:toggleSource('M000098_source')" id="l_M000098_source">show source</a> ]</p>
993
+ <div id="M000098_source" class="dyn-source">
994
+ <pre>
995
+ <span class="ruby-comment cmt"># File tests.rb, line 752</span>
996
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_parsing_entities</span>
997
+ <span class="ruby-identifier">a</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&amp;cat; &amp;amp; &amp;dog;&lt;/foo&gt;&quot;</span>
998
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">:extra_entities</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">lambda</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
999
+ <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">e</span>
1000
+ <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;cat&quot;</span>
1001
+ <span class="ruby-value str">&quot;neko&quot;</span>
1002
+ <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;dog&quot;</span>
1003
+ <span class="ruby-value str">&quot;inu&quot;</span>
1004
+ <span class="ruby-keyword kw">end</span>
1005
+ })
1006
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">:extra_entities</span> =<span class="ruby-operator">&gt;</span> {<span class="ruby-value str">&quot;cat&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;neko&quot;</span>, <span class="ruby-value str">&quot;dog&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;inu&quot;</span>})
1007
+
1008
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;neko &amp; inu&quot;</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">text</span>, <span class="ruby-value str">&quot;XML#parse(str, :extra_entities=&gt;Proc) should work&quot;</span>)
1009
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;neko &amp; inu&quot;</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">text</span>, <span class="ruby-value str">&quot;XML#parse(str, :extra_entities=&gt;Hash) should work&quot;</span>)
1010
+
1011
+ <span class="ruby-identifier">d</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">:extra_entities</span> =<span class="ruby-operator">&gt;</span> {<span class="ruby-value str">&quot;cat&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;neko&quot;</span>, <span class="ruby-value str">&quot;dog&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;inu&quot;</span>})
1012
+
1013
+ <span class="ruby-comment cmt"># Central European characters escapes</span>
1014
+ <span class="ruby-identifier">e</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&amp;zdot;&amp;oacute;&amp;lstrok;w&lt;/foo&gt;&quot;</span>
1015
+ <span class="ruby-identifier">f</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">e</span>, <span class="ruby-identifier">:extra_entities</span> =<span class="ruby-operator">&gt;</span> {<span class="ruby-value str">&quot;zdot&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">380</span>, <span class="ruby-value str">&quot;oacute&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">243</span>, <span class="ruby-value str">&quot;lstrok&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">322</span>})
1016
+
1017
+ <span class="ruby-comment cmt"># Assumes \number does bytes, UTF8</span>
1018
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;\305\274\303\263\305\202w&quot;</span>, <span class="ruby-identifier">f</span>.<span class="ruby-identifier">text</span>, <span class="ruby-value str">&quot;XML#parse(str, :extra_entities=&gt;...) should work with integer codepoints&quot;</span>)
1019
+ <span class="ruby-keyword kw">end</span>
1020
+ </pre>
1021
+ </div>
1022
+ </div>
1023
+ </div>
1024
+ <div class="method">
1025
+ <div class="title">
1026
+ <a name="M000096"></a><b>test_parsing_extras</b>()
1027
+ </div>
1028
+ <div class="description">
1029
+ <p>
1030
+ Test extra arguments to <a href="XML.html#M000022">XML#parse</a> -
1031
+ :comments and :pi
1032
+ </p>
1033
+ </div>
1034
+ <div class="sourcecode">
1035
+ <p class="source-link">[ <a href="javascript:toggleSource('M000096_source')" id="l_M000096_source">show source</a> ]</p>
1036
+ <div id="M000096_source" class="dyn-source">
1037
+ <pre>
1038
+ <span class="ruby-comment cmt"># File tests.rb, line 714</span>
1039
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_parsing_extras</span>
1040
+ <span class="ruby-identifier">a</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&lt;?xml-stylesheet href='http://www.blogger.com/styles/atom.css' type='text/css'?&gt;&lt;/foo&gt;&quot;</span>
1041
+ <span class="ruby-identifier">b</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&lt;!-- This is a comment --&gt;&lt;/foo&gt;&quot;</span>
1042
+
1043
+ <span class="ruby-identifier">ax</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">a</span>)
1044
+ <span class="ruby-identifier">bx</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">b</span>)
1045
+
1046
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo/&gt;&quot;</span>, <span class="ruby-identifier">ax</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#parse should drop PI by default&quot;</span>)
1047
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo/&gt;&quot;</span>, <span class="ruby-identifier">bx</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#parse should drop comments by default&quot;</span>)
1048
+
1049
+ <span class="ruby-identifier">ay</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">:comments</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">:pi</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>)
1050
+ <span class="ruby-identifier">by</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">b</span>, <span class="ruby-identifier">:comments</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">:pi</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>)
1051
+
1052
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">ay</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#parse(str, :pi=&gt;true) should include PI&quot;</span>)
1053
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">b</span>, <span class="ruby-identifier">by</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#parse(str, :comments=&gt;true) should include comments&quot;</span>)
1054
+ <span class="ruby-keyword kw">end</span>
1055
+ </pre>
1056
+ </div>
1057
+ </div>
1058
+ </div>
1059
+ <div class="method">
1060
+ <div class="title">
1061
+ <a name="M000097"></a><b>test_parsing_nopp</b>()
1062
+ </div>
1063
+ <div class="description">
1064
+ <p>
1065
+ Test extra arguments to <a href="XML.html#M000022">XML#parse</a> -
1066
+ :remove_pretty_printing. FIXME: How about a shorter (but still mnemonic)
1067
+ name for that ?
1068
+ </p>
1069
+ </div>
1070
+ <div class="sourcecode">
1071
+ <p class="source-link">[ <a href="javascript:toggleSource('M000097_source')" id="l_M000097_source">show source</a> ]</p>
1072
+ <div id="M000097_source" class="dyn-source">
1073
+ <pre>
1074
+ <span class="ruby-comment cmt"># File tests.rb, line 733</span>
1075
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_parsing_nopp</span>
1076
+ <span class="ruby-identifier">a</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar&gt;100&lt;/bar&gt;&lt;bar&gt;200&lt;/bar&gt;&lt;/foo&gt;&quot;</span>
1077
+ <span class="ruby-identifier">b</span> = <span class="ruby-value str">&quot;&lt;foo&gt;
1078
+ &lt;bar&gt;
1079
+ 100
1080
+ &lt;/bar&gt;
1081
+ &lt;bar&gt;
1082
+ 200
1083
+ &lt;/bar&gt;
1084
+ &lt;/foo&gt;&quot;</span>
1085
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">a</span>)
1086
+ <span class="ruby-identifier">d</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">b</span>)
1087
+ <span class="ruby-identifier">e</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">b</span>, <span class="ruby-identifier">:remove_pretty_printing</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>)
1088
+
1089
+ <span class="ruby-identifier">assert_not_equal</span>(<span class="ruby-identifier">c</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#parse should not ignore pretty printing by default&quot;</span>)
1090
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">c</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#parse(str, :remove_pretty_printing=&gt;true) should work&quot;</span>)
1091
+ <span class="ruby-keyword kw">end</span>
1092
+ </pre>
1093
+ </div>
1094
+ </div>
1095
+ </div>
1096
+ <div class="method">
1097
+ <div class="title">
1098
+ <a name="M000090"></a><b>test_patterns</b>()
1099
+ </div>
1100
+ <div class="description">
1101
+ <p>
1102
+ Test patterns support
1103
+ </p>
1104
+ </div>
1105
+ <div class="sourcecode">
1106
+ <p class="source-link">[ <a href="javascript:toggleSource('M000090_source')" id="l_M000090_source">show source</a> ]</p>
1107
+ <div id="M000090_source" class="dyn-source">
1108
+ <pre>
1109
+ <span class="ruby-comment cmt"># File tests.rb, line 552</span>
1110
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_patterns</span>
1111
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span> <span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;, &lt;bar color='red'&gt;world&lt;/bar&gt;&lt;excl&gt;!&lt;/excl&gt;&lt;/foo&gt;&quot;</span>
1112
+ <span class="ruby-identifier">a</span>.<span class="ruby-identifier">normalize!</span>
1113
+
1114
+ <span class="ruby-identifier">blue</span> = []
1115
+ <span class="ruby-identifier">nocolor</span> = []
1116
+ <span class="ruby-identifier">bar</span> = []
1117
+ <span class="ruby-comment cmt">#hello = []</span>
1118
+
1119
+ <span class="ruby-identifier">a</span>.<span class="ruby-identifier">descendants</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span>
1120
+ <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">d</span>
1121
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:bar</span>
1122
+ <span class="ruby-identifier">bar</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">d</span>
1123
+ <span class="ruby-keyword kw">end</span>
1124
+
1125
+ <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">d</span>
1126
+ <span class="ruby-keyword kw">when</span> {<span class="ruby-identifier">:color</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'blue'</span>}
1127
+ <span class="ruby-identifier">blue</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">d</span>
1128
+ <span class="ruby-keyword kw">end</span>
1129
+
1130
+ <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">d</span>
1131
+ <span class="ruby-keyword kw">when</span> {<span class="ruby-identifier">:color</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>}
1132
+ <span class="ruby-identifier">nocolor</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">d</span>
1133
+ <span class="ruby-keyword kw">end</span>
1134
+
1135
+ <span class="ruby-comment cmt">#case d</span>
1136
+ <span class="ruby-comment cmt">#when /Hello/</span>
1137
+ <span class="ruby-comment cmt"># hello &lt;&lt; d</span>
1138
+ <span class="ruby-comment cmt">#end</span>
1139
+ }
1140
+
1141
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;&quot;</span>), <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='red'&gt;world&lt;/bar&gt;&quot;</span>)], <span class="ruby-identifier">bar</span>, <span class="ruby-value str">&quot;Pattern matching should work&quot;</span>)
1142
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;&quot;</span>)], <span class="ruby-identifier">blue</span>, <span class="ruby-value str">&quot;Pattern matching should work&quot;</span>)
1143
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;excl&gt;!&lt;/excl&gt;&quot;</span>)], <span class="ruby-identifier">nocolor</span>, <span class="ruby-value str">&quot;Pattern matching should work&quot;</span>)
1144
+ <span class="ruby-comment cmt"># Commented out, as it requires overloading Regexp#=~ and therefore Binding.of_caller</span>
1145
+ <span class="ruby-comment cmt">#assert_equal([XML.parse(&quot;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;&quot;), &quot;Hello&quot;], hello, &quot;Pattern matching should work&quot;)</span>
1146
+ <span class="ruby-keyword kw">end</span>
1147
+ </pre>
1148
+ </div>
1149
+ </div>
1150
+ </div>
1151
+ <div class="method">
1152
+ <div class="title">
1153
+ <a name="M000091"></a><b>test_patterns_2</b>()
1154
+ </div>
1155
+ <div class="description">
1156
+ <p>
1157
+ Test pattern support in descendants (works the same way in children)
1158
+ </p>
1159
+ </div>
1160
+ <div class="sourcecode">
1161
+ <p class="source-link">[ <a href="javascript:toggleSource('M000091_source')" id="l_M000091_source">show source</a> ]</p>
1162
+ <div id="M000091_source" class="dyn-source">
1163
+ <pre>
1164
+ <span class="ruby-comment cmt"># File tests.rb, line 591</span>
1165
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_patterns_2</span>
1166
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span> <span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;, &lt;bar color='red'&gt;world&lt;/bar&gt;&lt;excl color='blue'&gt;!&lt;/excl&gt;&lt;/foo&gt;&quot;</span>
1167
+ <span class="ruby-identifier">a</span>.<span class="ruby-identifier">normalize!</span>
1168
+
1169
+ <span class="ruby-identifier">bar</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">descendants</span>(<span class="ruby-identifier">:bar</span>)
1170
+ <span class="ruby-identifier">blue</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">descendants</span>({<span class="ruby-identifier">:color=</span><span class="ruby-operator">&gt;</span><span class="ruby-value str">'blue'</span>})
1171
+ <span class="ruby-identifier">blue_bar</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">descendants</span>(<span class="ruby-identifier">all</span>(<span class="ruby-identifier">:bar</span>, {<span class="ruby-identifier">:color=</span><span class="ruby-operator">&gt;</span><span class="ruby-value str">'blue'</span>}))
1172
+ <span class="ruby-comment cmt">#hello = a.descendants(/Hello/)</span>
1173
+ <span class="ruby-identifier">xml</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">descendants</span>(<span class="ruby-constant">XML</span>)
1174
+ <span class="ruby-identifier">string</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">descendants</span>(<span class="ruby-constant">String</span>)
1175
+
1176
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;&quot;</span>), <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='red'&gt;world&lt;/bar&gt;&quot;</span>)], <span class="ruby-identifier">bar</span>, <span class="ruby-value str">&quot;Pattern matching should work&quot;</span>)
1177
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;&quot;</span>), <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;excl color='blue'&gt;!&lt;/excl&gt;&quot;</span>)], <span class="ruby-identifier">blue</span>, <span class="ruby-value str">&quot;Pattern matching should work&quot;</span>)
1178
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;&quot;</span>)], <span class="ruby-identifier">blue_bar</span>, <span class="ruby-value str">&quot;Pattern matching should work&quot;</span>)
1179
+ <span class="ruby-comment cmt"># Commented out, as it requires overloading Regexp#=~ and therefore Binding.of_caller</span>
1180
+ <span class="ruby-comment cmt">#assert_equal([XML.parse(&quot;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;&quot;), &quot;Hello&quot;], hello, &quot;Pattern matching should work&quot;)</span>
1181
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;&quot;</span>), <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='red'&gt;world&lt;/bar&gt;&quot;</span>), <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;excl color='blue'&gt;!&lt;/excl&gt;&quot;</span>)], <span class="ruby-identifier">xml</span>, <span class="ruby-value str">&quot;Pattern matching should work&quot;</span>)
1182
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-value str">'Hello'</span>, <span class="ruby-value str">', '</span>, <span class="ruby-value str">'world'</span>, <span class="ruby-value str">'!'</span>], <span class="ruby-identifier">string</span>, <span class="ruby-value str">&quot;Pattern matching should work&quot;</span>)
1183
+ <span class="ruby-keyword kw">end</span>
1184
+ </pre>
1185
+ </div>
1186
+ </div>
1187
+ </div>
1188
+ <div class="method">
1189
+ <div class="title">
1190
+ <a name="M000092"></a><b>test_patterns_3</b>()
1191
+ </div>
1192
+ <div class="description">
1193
+ <p>
1194
+ Test patterns =~ support
1195
+ </p>
1196
+ </div>
1197
+ <div class="sourcecode">
1198
+ <p class="source-link">[ <a href="javascript:toggleSource('M000092_source')" id="l_M000092_source">show source</a> ]</p>
1199
+ <div id="M000092_source" class="dyn-source">
1200
+ <pre>
1201
+ <span class="ruby-comment cmt"># File tests.rb, line 612</span>
1202
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_patterns_3</span>
1203
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span> <span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;, &lt;bar color='red'&gt;world&lt;/bar&gt;&lt;excl&gt;!&lt;/excl&gt;&lt;/foo&gt;&quot;</span>
1204
+ <span class="ruby-identifier">a</span>.<span class="ruby-identifier">normalize!</span>
1205
+
1206
+ <span class="ruby-identifier">blue</span> = []
1207
+ <span class="ruby-identifier">nocolor</span> = []
1208
+ <span class="ruby-identifier">bar</span> = []
1209
+ <span class="ruby-identifier">hello</span> = []
1210
+
1211
+ <span class="ruby-identifier">a</span>.<span class="ruby-identifier">descendants</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span>
1212
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">d</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">:bar</span>
1213
+ <span class="ruby-identifier">bar</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">d</span>
1214
+ <span class="ruby-keyword kw">end</span>
1215
+
1216
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">d</span> <span class="ruby-operator">=~</span> {<span class="ruby-identifier">:color</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'blue'</span>}
1217
+ <span class="ruby-identifier">blue</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">d</span>
1218
+ <span class="ruby-keyword kw">end</span>
1219
+
1220
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">d</span> <span class="ruby-operator">=~</span> {<span class="ruby-identifier">:color</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>}
1221
+ <span class="ruby-identifier">nocolor</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">d</span>
1222
+ <span class="ruby-keyword kw">end</span>
1223
+
1224
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">d</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/Hello/</span>
1225
+ <span class="ruby-identifier">hello</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">d</span>
1226
+ <span class="ruby-keyword kw">end</span>
1227
+ }
1228
+
1229
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;&quot;</span>), <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='red'&gt;world&lt;/bar&gt;&quot;</span>)], <span class="ruby-identifier">bar</span>, <span class="ruby-value str">&quot;Pattern matching should work&quot;</span>)
1230
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;&quot;</span>)], <span class="ruby-identifier">blue</span>, <span class="ruby-value str">&quot;Pattern matching should work&quot;</span>)
1231
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;excl&gt;!&lt;/excl&gt;&quot;</span>)], <span class="ruby-identifier">nocolor</span>, <span class="ruby-value str">&quot;Pattern matching should work&quot;</span>)
1232
+ <span class="ruby-identifier">assert_equal</span>([<span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;bar color='blue'&gt;Hello&lt;/bar&gt;&quot;</span>), <span class="ruby-value str">&quot;Hello&quot;</span>], <span class="ruby-identifier">hello</span>, <span class="ruby-value str">&quot;Pattern matching should work&quot;</span>)
1233
+ <span class="ruby-keyword kw">end</span>
1234
+ </pre>
1235
+ </div>
1236
+ </div>
1237
+ </div>
1238
+ <div class="method">
1239
+ <div class="title">
1240
+ <a name="M000093"></a><b>test_patterns_any_all</b>()
1241
+ </div>
1242
+ <div class="sourcecode">
1243
+ <p class="source-link">[ <a href="javascript:toggleSource('M000093_source')" id="l_M000093_source">show source</a> ]</p>
1244
+ <div id="M000093_source" class="dyn-source">
1245
+ <pre>
1246
+ <span class="ruby-comment cmt"># File tests.rb, line 645</span>
1247
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_patterns_any_all</span>
1248
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span> <span class="ruby-value str">&quot;&lt;foo&gt;
1249
+ &lt;bar color='blue' size='big'&gt;1&lt;/bar&gt;
1250
+ &lt;bar color='blue'&gt;2&lt;/bar&gt;
1251
+ &lt;bar color='blue' size='normal'&gt;3&lt;/bar&gt;
1252
+ &lt;bar color='red' size='big'&gt;4&lt;/bar&gt;
1253
+ &lt;bar color='red'&gt;5&lt;/bar&gt;
1254
+ &lt;bar color='red' size='normal'&gt;6&lt;/bar&gt;
1255
+ &lt;/foo&gt;&quot;</span>
1256
+
1257
+ <span class="ruby-identifier">p</span> = <span class="ruby-identifier">all</span>({<span class="ruby-identifier">:color</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'red'</span>}, <span class="ruby-identifier">any</span>({<span class="ruby-identifier">:size</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>}, {<span class="ruby-identifier">:size</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'normal'</span>}))
1258
+ <span class="ruby-comment cmt"># Select childern which color red and size either normal or not specified</span>
1259
+ <span class="ruby-identifier">b</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">children</span>(<span class="ruby-identifier">p</span>)
1260
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">find_all</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">p</span> }
1261
+ <span class="ruby-identifier">d</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">find_all</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">p</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">x</span> }
1262
+
1263
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar color='red'&gt;5&lt;/bar&gt;&lt;bar color='red' size='normal'&gt;6&lt;/bar&gt;&quot;</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Pattern matching with any/all should work&quot;</span>)
1264
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar color='red'&gt;5&lt;/bar&gt;&lt;bar color='red' size='normal'&gt;6&lt;/bar&gt;&quot;</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Pattern matching with any/all should work&quot;</span>)
1265
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar color='red'&gt;5&lt;/bar&gt;&lt;bar color='red' size='normal'&gt;6&lt;/bar&gt;&quot;</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;Pattern matching with any/all should work&quot;</span>)
1266
+ <span class="ruby-keyword kw">end</span>
1267
+ </pre>
1268
+ </div>
1269
+ </div>
1270
+ </div>
1271
+ <div class="method">
1272
+ <div class="title">
1273
+ <a name="M000102"></a><b>test_pretty_printer</b>()
1274
+ </div>
1275
+ <div class="description">
1276
+ <p>
1277
+ Test <a href="XML.html#M000019">XML.load</a>
1278
+ </p>
1279
+ </div>
1280
+ <div class="sourcecode">
1281
+ <p class="source-link">[ <a href="javascript:toggleSource('M000102_source')" id="l_M000102_source">show source</a> ]</p>
1282
+ <div id="M000102_source" class="dyn-source">
1283
+ <pre>
1284
+ <span class="ruby-comment cmt"># File tests.rb, line 812</span>
1285
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_pretty_printer</span>
1286
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar&gt;x&lt;/bar&gt;Boo!&lt;bar&gt;&lt;y&gt;&lt;z&gt;f&lt;/z&gt;&lt;/y&gt;&lt;/bar&gt;&lt;xyzzy /&gt;&lt;bar&gt;Mutiline\nText\n:-)&lt;/bar&gt;&lt;/foo&gt;&quot;</span>)
1287
+ <span class="ruby-identifier">a</span>.<span class="ruby-identifier">add_pretty_printing!</span>
1288
+ <span class="ruby-identifier">expected</span> = <span class="ruby-value str">&quot;&lt;foo&gt;
1289
+ &lt;bar&gt;
1290
+ x
1291
+ &lt;/bar&gt;
1292
+ Boo!
1293
+ &lt;bar&gt;
1294
+ &lt;y&gt;
1295
+ &lt;z&gt;
1296
+ f
1297
+ &lt;/z&gt;
1298
+ &lt;/y&gt;
1299
+ &lt;/bar&gt;
1300
+ &lt;xyzzy/&gt;
1301
+ &lt;bar&gt;
1302
+ Mutiline
1303
+ Text
1304
+ :-)
1305
+ &lt;/bar&gt;
1306
+ &lt;/foo&gt;&quot;</span>
1307
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">expected</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#pretty_print! should work&quot;</span>)
1308
+ <span class="ruby-keyword kw">end</span>
1309
+ </pre>
1310
+ </div>
1311
+ </div>
1312
+ </div>
1313
+ <div class="method">
1314
+ <div class="title">
1315
+ <a name="M000087"></a><b>test_pseudoattributes_read</b>()
1316
+ </div>
1317
+ <div class="description">
1318
+ <p>
1319
+ Test <a href="XML.html">XML</a>#[:@foo] pseudoattributes
1320
+ </p>
1321
+ </div>
1322
+ <div class="sourcecode">
1323
+ <p class="source-link">[ <a href="javascript:toggleSource('M000087_source')" id="l_M000087_source">show source</a> ]</p>
1324
+ <div id="M000087_source" class="dyn-source">
1325
+ <pre>
1326
+ <span class="ruby-comment cmt"># File tests.rb, line 506</span>
1327
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_pseudoattributes_read</span>
1328
+ <span class="ruby-comment cmt"># Ignore the second &lt;x&gt;...&lt;/x&gt;</span>
1329
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo x='10'&gt;&lt;x&gt;20&lt;/x&gt;&lt;y&gt;30&lt;/y&gt;&lt;x&gt;40&lt;/x&gt;&lt;/foo&gt;&quot;</span>)
1330
+
1331
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;10&quot;</span>, <span class="ruby-identifier">a</span>[<span class="ruby-identifier">:x</span>], <span class="ruby-value str">&quot;XML#[] real attributes should work&quot;</span>)
1332
+ <span class="ruby-identifier">assert_nil</span>(<span class="ruby-identifier">a</span>[<span class="ruby-identifier">:y</span>], <span class="ruby-value str">&quot;XML#[] real attributes should work&quot;</span>)
1333
+ <span class="ruby-identifier">assert_nil</span>(<span class="ruby-identifier">a</span>[<span class="ruby-identifier">:z</span>], <span class="ruby-value str">&quot;XML#[] real attributes should work&quot;</span>)
1334
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;20&quot;</span>, <span class="ruby-identifier">a</span>[<span class="ruby-identifier">:@x</span>], <span class="ruby-value str">&quot;XML#[] pseudoattributes should work&quot;</span>)
1335
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;30&quot;</span>, <span class="ruby-identifier">a</span>[<span class="ruby-identifier">:@y</span>], <span class="ruby-value str">&quot;XML#[] pseudoattributes should work&quot;</span>)
1336
+ <span class="ruby-identifier">assert_nil</span>(<span class="ruby-identifier">a</span>[<span class="ruby-identifier">:@z</span>], <span class="ruby-value str">&quot;XML#[] pseudoattributes should work&quot;</span>)
1337
+ <span class="ruby-keyword kw">end</span>
1338
+ </pre>
1339
+ </div>
1340
+ </div>
1341
+ </div>
1342
+ <div class="method">
1343
+ <div class="title">
1344
+ <a name="M000088"></a><b>test_pseudoattributes_write</b>()
1345
+ </div>
1346
+ <div class="description">
1347
+ <p>
1348
+ Test <a href="XML.html">XML</a>#[:@foo] pseudoattributes
1349
+ </p>
1350
+ </div>
1351
+ <div class="sourcecode">
1352
+ <p class="source-link">[ <a href="javascript:toggleSource('M000088_source')" id="l_M000088_source">show source</a> ]</p>
1353
+ <div id="M000088_source" class="dyn-source">
1354
+ <pre>
1355
+ <span class="ruby-comment cmt"># File tests.rb, line 519</span>
1356
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_pseudoattributes_write</span>
1357
+ <span class="ruby-comment cmt"># Ignore the second &lt;x&gt;...&lt;/x&gt;</span>
1358
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo x='10'&gt;&lt;x&gt;20&lt;/x&gt;&lt;y&gt;30&lt;/y&gt;&lt;x&gt;40&lt;/x&gt;&lt;/foo&gt;&quot;</span>)
1359
+
1360
+ <span class="ruby-identifier">a</span>[<span class="ruby-identifier">:x</span>] = <span class="ruby-value">100</span>
1361
+ <span class="ruby-identifier">a</span>[<span class="ruby-identifier">:y</span>] = <span class="ruby-value">200</span>
1362
+ <span class="ruby-identifier">a</span>[<span class="ruby-identifier">:z</span>] = <span class="ruby-value">300</span>
1363
+ <span class="ruby-identifier">a</span>[<span class="ruby-identifier">:@x</span>] = <span class="ruby-value">1000</span>
1364
+ <span class="ruby-identifier">a</span>[<span class="ruby-identifier">:@y</span>] = <span class="ruby-value">2000</span>
1365
+ <span class="ruby-identifier">a</span>[<span class="ruby-identifier">:@z</span>] = <span class="ruby-value">3000</span>
1366
+
1367
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo x='100' y='200' z='300'&gt;&lt;x&gt;1000&lt;/x&gt;&lt;y&gt;2000&lt;/y&gt;&lt;x&gt;40&lt;/x&gt;&lt;z&gt;3000&lt;/z&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#[]= pseudoattributes should work&quot;</span>)
1368
+ <span class="ruby-keyword kw">end</span>
1369
+ </pre>
1370
+ </div>
1371
+ </div>
1372
+ </div>
1373
+ <div class="method">
1374
+ <div class="title">
1375
+ <a name="M000081"></a><b>test_range</b>()
1376
+ </div>
1377
+ <div class="description">
1378
+ <p>
1379
+ Test <a href="XML.html#M000035">XML#range</a>
1380
+ </p>
1381
+ </div>
1382
+ <div class="sourcecode">
1383
+ <p class="source-link">[ <a href="javascript:toggleSource('M000081_source')" id="l_M000081_source">show source</a> ]</p>
1384
+ <div id="M000081_source" class="dyn-source">
1385
+ <pre>
1386
+ <span class="ruby-comment cmt"># File tests.rb, line 347</span>
1387
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_range</span>
1388
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span> <span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar i='0'/&gt;&lt;bar i='1'/&gt;&lt;bar i='2'/&gt;&lt;bar i='3'/&gt;&lt;bar i='4'/&gt;&lt;/foo&gt;&quot;</span>
1389
+ <span class="ruby-identifier">b</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">children</span>(<span class="ruby-identifier">:bar</span>)
1390
+
1391
+ <span class="ruby-comment cmt"># Non-recursive case</span>
1392
+ <span class="ruby-identifier">ar_n_n</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">range</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span>)
1393
+ <span class="ruby-identifier">ar_0_n</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">range</span>(<span class="ruby-identifier">b</span>[<span class="ruby-value">0</span>], <span class="ruby-keyword kw">nil</span>)
1394
+ <span class="ruby-identifier">ar_1_n</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">range</span>(<span class="ruby-identifier">b</span>[<span class="ruby-value">1</span>], <span class="ruby-keyword kw">nil</span>)
1395
+ <span class="ruby-identifier">ar_4_n</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">range</span>(<span class="ruby-identifier">b</span>[<span class="ruby-value">4</span>], <span class="ruby-keyword kw">nil</span>)
1396
+ <span class="ruby-identifier">ar_n_4</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">range</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">b</span>[<span class="ruby-value">4</span>])
1397
+ <span class="ruby-identifier">ar_n_3</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">range</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">b</span>[<span class="ruby-value">3</span>])
1398
+ <span class="ruby-identifier">ar_n_0</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">range</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">b</span>[<span class="ruby-value">0</span>])
1399
+
1400
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar i='0'/&gt;&lt;bar i='1'/&gt;&lt;bar i='2'/&gt;&lt;bar i='3'/&gt;&lt;bar i='4'/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">ar_n_n</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#range should work&quot;</span>)
1401
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar i='1'/&gt;&lt;bar i='2'/&gt;&lt;bar i='3'/&gt;&lt;bar i='4'/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">ar_0_n</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#range should work&quot;</span>)
1402
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar i='2'/&gt;&lt;bar i='3'/&gt;&lt;bar i='4'/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">ar_1_n</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#range should work&quot;</span>)
1403
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo/&gt;&quot;</span>, <span class="ruby-identifier">ar_4_n</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#range should work&quot;</span>)
1404
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar i='0'/&gt;&lt;bar i='1'/&gt;&lt;bar i='2'/&gt;&lt;bar i='3'/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">ar_n_4</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#range should work&quot;</span>)
1405
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar i='0'/&gt;&lt;bar i='1'/&gt;&lt;bar i='2'/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">ar_n_3</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#range should work&quot;</span>)
1406
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo/&gt;&quot;</span>, <span class="ruby-identifier">ar_n_0</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#range should work&quot;</span>)
1407
+
1408
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span> <span class="ruby-value str">&quot;&lt;a&gt;
1409
+ &lt;b i='0'&gt;&lt;c i='0'/&gt;&lt;c i='1'/&gt;&lt;c i='2'/&gt;&lt;/b&gt;
1410
+ &lt;b i='1'&gt;&lt;c i='3'/&gt;&lt;c i='4'/&gt;&lt;c i='5'/&gt;&lt;/b&gt;
1411
+ &lt;b i='2'&gt;&lt;c i='6'/&gt;&lt;c i='7'/&gt;&lt;c i='8'/&gt;&lt;/b&gt;
1412
+ &lt;/a&gt;&quot;</span>
1413
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">descendants</span>(<span class="ruby-identifier">:c</span>)
1414
+
1415
+ <span class="ruby-identifier">c</span>.<span class="ruby-identifier">each_with_index</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">ci</span>,<span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
1416
+ <span class="ruby-identifier">c</span>.<span class="ruby-identifier">each_with_index</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cj</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span>
1417
+ <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">j</span>
1418
+ <span class="ruby-identifier">ar</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">range</span>(<span class="ruby-identifier">ci</span>,<span class="ruby-identifier">cj</span>)
1419
+ <span class="ruby-identifier">cs_present</span> = <span class="ruby-identifier">ar</span>.<span class="ruby-identifier">descendants</span>(<span class="ruby-identifier">:c</span>).<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span><span class="ruby-identifier">n</span>[<span class="ruby-identifier">:i</span>].<span class="ruby-identifier">to_i</span>}
1420
+ <span class="ruby-identifier">assert_equal</span>(((<span class="ruby-identifier">i</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>)<span class="ruby-operator">...</span><span class="ruby-identifier">j</span>).<span class="ruby-identifier">to_a</span>, <span class="ruby-identifier">cs_present</span>, <span class="ruby-node">&quot;XML#range(c#{i}, c#{j}) should contain cs between #{i} and #{j}, exclusive, instead got: #{ar}&quot;</span>)
1421
+ }
1422
+ <span class="ruby-identifier">ar</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">range</span>(<span class="ruby-identifier">ci</span>,<span class="ruby-keyword kw">nil</span>)
1423
+ <span class="ruby-identifier">cs_present</span> = <span class="ruby-identifier">ar</span>.<span class="ruby-identifier">descendants</span>(<span class="ruby-identifier">:c</span>).<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span><span class="ruby-identifier">n</span>[<span class="ruby-identifier">:i</span>].<span class="ruby-identifier">to_i</span>}
1424
+ <span class="ruby-identifier">assert_equal</span>(((<span class="ruby-identifier">i</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>)<span class="ruby-operator">..</span><span class="ruby-value">8</span>).<span class="ruby-identifier">to_a</span>, <span class="ruby-identifier">cs_present</span>, <span class="ruby-node">&quot;XML#range(c#{i}, nil) should contain cs from #{i+1} to 8, instead got: #{ar}&quot;</span>)
1425
+
1426
+ <span class="ruby-identifier">ar</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">range</span>(<span class="ruby-keyword kw">nil</span>,<span class="ruby-identifier">ci</span>)
1427
+ <span class="ruby-identifier">cs_present</span> = <span class="ruby-identifier">ar</span>.<span class="ruby-identifier">descendants</span>(<span class="ruby-identifier">:c</span>).<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span><span class="ruby-identifier">n</span>[<span class="ruby-identifier">:i</span>].<span class="ruby-identifier">to_i</span>}
1428
+ <span class="ruby-identifier">assert_equal</span>((<span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">i</span>).<span class="ruby-identifier">to_a</span>, <span class="ruby-identifier">cs_present</span>, <span class="ruby-node">&quot;XML#range(nil, c#{i}) should contain cs from 0 to #{i-1}, instead got: #{ar}&quot;</span>)
1429
+ }
1430
+ <span class="ruby-keyword kw">end</span>
1431
+ </pre>
1432
+ </div>
1433
+ </div>
1434
+ </div>
1435
+ <div class="method">
1436
+ <div class="title">
1437
+ <a name="M000084"></a><b>test_real_method_missing</b>()
1438
+ </div>
1439
+ <div class="description">
1440
+ <p>
1441
+ Methods XML#foo! are all catched, but how about other methods ?
1442
+ </p>
1443
+ </div>
1444
+ <div class="sourcecode">
1445
+ <p class="source-link">[ <a href="javascript:toggleSource('M000084_source')" id="l_M000084_source">show source</a> ]</p>
1446
+ <div id="M000084_source" class="dyn-source">
1447
+ <pre>
1448
+ <span class="ruby-comment cmt"># File tests.rb, line 458</span>
1449
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_real_method_missing</span>
1450
+ <span class="ruby-identifier">foo</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:foo</span>)
1451
+ <span class="ruby-identifier">exception_raised</span> = <span class="ruby-keyword kw">false</span>
1452
+ <span class="ruby-keyword kw">begin</span>
1453
+ <span class="ruby-identifier">foo</span>.<span class="ruby-identifier">bar</span>()
1454
+ <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">NoMethodError</span>
1455
+ <span class="ruby-identifier">exception_raised</span> = <span class="ruby-keyword kw">true</span>
1456
+ <span class="ruby-keyword kw">end</span>
1457
+ <span class="ruby-comment cmt"># FIXME: There are other assertions than assert_equal ;-)</span>
1458
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">exception_raised</span>, <span class="ruby-value str">&quot;XML#bar should raise NoMethodError&quot;</span>)
1459
+ <span class="ruby-keyword kw">end</span>
1460
+ </pre>
1461
+ </div>
1462
+ </div>
1463
+ </div>
1464
+ <div class="method">
1465
+ <div class="title">
1466
+ <a name="M000094"></a><b>test_remove_pretty_printing</b>()
1467
+ </div>
1468
+ <div class="description">
1469
+ <p>
1470
+ Test parse option :ignore_pretty_printing
1471
+ </p>
1472
+ </div>
1473
+ <div class="sourcecode">
1474
+ <p class="source-link">[ <a href="javascript:toggleSource('M000094_source')" id="l_M000094_source">show source</a> ]</p>
1475
+ <div id="M000094_source" class="dyn-source">
1476
+ <pre>
1477
+ <span class="ruby-comment cmt"># File tests.rb, line 667</span>
1478
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_remove_pretty_printing</span>
1479
+ <span class="ruby-identifier">a</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar&gt;100&lt;/bar&gt;&lt;bar&gt;200&lt;/bar&gt;&lt;/foo&gt;&quot;</span>
1480
+ <span class="ruby-identifier">b</span> = <span class="ruby-value str">&quot;&lt;foo&gt;
1481
+ &lt;bar&gt;
1482
+ 100
1483
+ &lt;/bar&gt;
1484
+ &lt;bar&gt;
1485
+ 200
1486
+ &lt;/bar&gt;
1487
+ &lt;/foo&gt;&quot;</span>
1488
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">a</span>)
1489
+ <span class="ruby-identifier">d</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">b</span>)
1490
+ <span class="ruby-identifier">e</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">b</span>)
1491
+ <span class="ruby-identifier">e</span>.<span class="ruby-identifier">remove_pretty_printing!</span>
1492
+
1493
+ <span class="ruby-identifier">assert_not_equal</span>(<span class="ruby-identifier">c</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#parse should not ignore pretty printing by default&quot;</span>)
1494
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">c</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#remove_pretty_printing! should work&quot;</span>)
1495
+
1496
+ <span class="ruby-identifier">f</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt; &lt;bar&gt;Hello world&lt;/bar&gt; &lt;/foo&gt;&quot;</span>)
1497
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">remove_pretty_printing!</span>
1498
+ <span class="ruby-identifier">g</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar&gt;Hello world&lt;/bar&gt;&lt;/foo&gt;&quot;</span>)
1499
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">f</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">g</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#remove_pretty_printing! should work&quot;</span>)
1500
+ <span class="ruby-keyword kw">end</span>
1501
+ </pre>
1502
+ </div>
1503
+ </div>
1504
+ </div>
1505
+ <div class="method">
1506
+ <div class="title">
1507
+ <a name="M000095"></a><b>test_remove_pretty_printing_conditional</b>()
1508
+ </div>
1509
+ <div class="description">
1510
+ <p>
1511
+ Test remove_pretty_printing! with exception list
1512
+ </p>
1513
+ </div>
1514
+ <div class="sourcecode">
1515
+ <p class="source-link">[ <a href="javascript:toggleSource('M000095_source')" id="l_M000095_source">show source</a> ]</p>
1516
+ <div id="M000095_source" class="dyn-source">
1517
+ <pre>
1518
+ <span class="ruby-comment cmt"># File tests.rb, line 692</span>
1519
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_remove_pretty_printing_conditional</span>
1520
+ <span class="ruby-identifier">a</span> = <span class="ruby-value str">&quot;&lt;foo&gt;
1521
+ &lt;pre&gt;
1522
+ &lt;a&gt; 100 &lt;/a&gt;
1523
+ &lt;/pre&gt;
1524
+ &lt;xyzzy&gt;
1525
+ &lt;a&gt; 200 &lt;/a&gt;
1526
+ &lt;/xyzzy&gt;
1527
+ &lt;/foo&gt;&quot;</span>
1528
+ <span class="ruby-identifier">b</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&lt;pre&gt;
1529
+ &lt;a&gt; 100 &lt;/a&gt;
1530
+ &lt;/pre&gt;&lt;xyzzy&gt;&lt;a&gt;200&lt;/a&gt;&lt;/xyzzy&gt;&lt;/foo&gt;&quot;</span>
1531
+
1532
+ <span class="ruby-identifier">ax</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">a</span>)
1533
+ <span class="ruby-identifier">bx</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">b</span>)
1534
+
1535
+ <span class="ruby-identifier">ax</span>.<span class="ruby-identifier">remove_pretty_printing!</span>([<span class="ruby-identifier">:pre</span>])
1536
+
1537
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-identifier">bx</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">ax</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#remove_pretty_printing!(exceptions) should work&quot;</span>)
1538
+ <span class="ruby-keyword kw">end</span>
1539
+ </pre>
1540
+ </div>
1541
+ </div>
1542
+ </div>
1543
+ <div class="method">
1544
+ <div class="title">
1545
+ <a name="M000080"></a><b>test_renormalize</b>()
1546
+ </div>
1547
+ <div class="description">
1548
+ <p>
1549
+ Test <a href="XML.html#M000024">XML#renormalize</a> and <a
1550
+ href="XML.html#M000025">XML#renormalize_sequence</a>
1551
+ </p>
1552
+ </div>
1553
+ <div class="sourcecode">
1554
+ <p class="source-link">[ <a href="javascript:toggleSource('M000080_source')" id="l_M000080_source">show source</a> ]</p>
1555
+ <div id="M000080_source" class="dyn-source">
1556
+ <pre>
1557
+ <span class="ruby-comment cmt"># File tests.rb, line 337</span>
1558
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_renormalize</span>
1559
+ <span class="ruby-identifier">a</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&lt;/foo&gt;&quot;</span>
1560
+ <span class="ruby-identifier">b</span> = <span class="ruby-value str">&quot;&lt;foo&gt;&lt;/foo&gt;&lt;bar&gt;&lt;/bar&gt;&quot;</span>
1561
+
1562
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo/&gt;&quot;</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">renormalize</span>(<span class="ruby-identifier">a</span>), <span class="ruby-value str">&quot;XML#renormalize should work&quot;</span>)
1563
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo/&gt;&quot;</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">renormalize_sequence</span>(<span class="ruby-identifier">a</span>), <span class="ruby-value str">&quot;XML#renormalize_sequence should work&quot;</span>)
1564
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo/&gt;&lt;bar/&gt;&quot;</span>, <span class="ruby-constant">XML</span>.<span class="ruby-identifier">renormalize_sequence</span>(<span class="ruby-identifier">b</span>), <span class="ruby-value str">&quot;XML#renormalize_sequence should work&quot;</span>)
1565
+ <span class="ruby-keyword kw">end</span>
1566
+ </pre>
1567
+ </div>
1568
+ </div>
1569
+ </div>
1570
+ <div class="method">
1571
+ <div class="title">
1572
+ <a name="M000058"></a><b>test_sort_by</b>()
1573
+ </div>
1574
+ <div class="description">
1575
+ <p>
1576
+ Test sort_by and children_sort_by
1577
+ </p>
1578
+ </div>
1579
+ <div class="sourcecode">
1580
+ <p class="source-link">[ <a href="javascript:toggleSource('M000058_source')" id="l_M000058_source">show source</a> ]</p>
1581
+ <div id="M000058_source" class="dyn-source">
1582
+ <pre>
1583
+ <span class="ruby-comment cmt"># File tests.rb, line 32</span>
1584
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_sort_by</span>
1585
+ <span class="ruby-identifier">doc</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar id='5'/&gt;a&lt;bar id='3'/&gt;c&lt;bar id='4'/&gt;b&lt;bar id='1'/&gt;&lt;/foo&gt;&quot;</span>)
1586
+
1587
+ <span class="ruby-identifier">doc_by_id</span> = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-identifier">c</span>[<span class="ruby-identifier">:id</span>]}
1588
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar id='1'/&gt;&lt;bar id='3'/&gt;&lt;bar id='4'/&gt;&lt;bar id='5'/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">doc_by_id</span>.<span class="ruby-identifier">to_s</span>)
1589
+
1590
+ <span class="ruby-identifier">doc_all_by_id</span> = <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">children_sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">XML</span> <span class="ruby-keyword kw">then</span> [<span class="ruby-value">0</span>, <span class="ruby-identifier">c</span>[<span class="ruby-identifier">:id</span>]] <span class="ruby-keyword kw">else</span> [<span class="ruby-value">1</span>, <span class="ruby-identifier">c</span>] <span class="ruby-keyword kw">end</span>}
1591
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar id='1'/&gt;&lt;bar id='3'/&gt;&lt;bar id='4'/&gt;&lt;bar id='5'/&gt;abc&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">doc_all_by_id</span>.<span class="ruby-identifier">to_s</span>)
1592
+ <span class="ruby-keyword kw">end</span>
1593
+ </pre>
1594
+ </div>
1595
+ </div>
1596
+ </div>
1597
+ <div class="method">
1598
+ <div class="title">
1599
+ <a name="M000082"></a><b>test_subsequence</b>()
1600
+ </div>
1601
+ <div class="description">
1602
+ <p>
1603
+ Test <a href="XML.html#M000036">XML#subsequence</a>
1604
+ </p>
1605
+ </div>
1606
+ <div class="sourcecode">
1607
+ <p class="source-link">[ <a href="javascript:toggleSource('M000082_source')" id="l_M000082_source">show source</a> ]</p>
1608
+ <div id="M000082_source" class="dyn-source">
1609
+ <pre>
1610
+ <span class="ruby-comment cmt"># File tests.rb, line 393</span>
1611
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_subsequence</span>
1612
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span> <span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar i='0'/&gt;&lt;bar i='1'/&gt;&lt;bar i='2'/&gt;&lt;bar i='3'/&gt;&lt;bar i='4'/&gt;&lt;/foo&gt;&quot;</span>
1613
+ <span class="ruby-identifier">b</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">children</span>(<span class="ruby-identifier">:bar</span>)
1614
+
1615
+ <span class="ruby-comment cmt"># Non-recursive case</span>
1616
+ <span class="ruby-identifier">ar_n_n</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">subsequence</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span>)
1617
+ <span class="ruby-identifier">ar_0_n</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">subsequence</span>(<span class="ruby-identifier">b</span>[<span class="ruby-value">0</span>], <span class="ruby-keyword kw">nil</span>)
1618
+ <span class="ruby-identifier">ar_1_n</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">subsequence</span>(<span class="ruby-identifier">b</span>[<span class="ruby-value">1</span>], <span class="ruby-keyword kw">nil</span>)
1619
+ <span class="ruby-identifier">ar_4_n</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">subsequence</span>(<span class="ruby-identifier">b</span>[<span class="ruby-value">4</span>], <span class="ruby-keyword kw">nil</span>)
1620
+ <span class="ruby-identifier">ar_n_4</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">subsequence</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">b</span>[<span class="ruby-value">4</span>])
1621
+ <span class="ruby-identifier">ar_n_3</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">subsequence</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">b</span>[<span class="ruby-value">3</span>])
1622
+ <span class="ruby-identifier">ar_n_0</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">subsequence</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">b</span>[<span class="ruby-value">0</span>])
1623
+
1624
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar i='0'/&gt;&lt;bar i='1'/&gt;&lt;bar i='2'/&gt;&lt;bar i='3'/&gt;&lt;bar i='4'/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">ar_n_n</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#subsequence should work&quot;</span>)
1625
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar i='1'/&gt;&lt;bar i='2'/&gt;&lt;bar i='3'/&gt;&lt;bar i='4'/&gt;&quot;</span>, <span class="ruby-identifier">ar_0_n</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#subsequence should work&quot;</span>)
1626
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar i='2'/&gt;&lt;bar i='3'/&gt;&lt;bar i='4'/&gt;&quot;</span>, <span class="ruby-identifier">ar_1_n</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#subsequence should work&quot;</span>)
1627
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&quot;</span>, <span class="ruby-identifier">ar_4_n</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#subsequence should work&quot;</span>)
1628
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar i='0'/&gt;&lt;bar i='1'/&gt;&lt;bar i='2'/&gt;&lt;bar i='3'/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">ar_n_4</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#subsequence should work&quot;</span>)
1629
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar i='0'/&gt;&lt;bar i='1'/&gt;&lt;bar i='2'/&gt;&lt;/foo&gt;&quot;</span>, <span class="ruby-identifier">ar_n_3</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#subsequence should work&quot;</span>)
1630
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo/&gt;&quot;</span>, <span class="ruby-identifier">ar_n_0</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-value str">&quot;XML#subsequence should work&quot;</span>)
1631
+
1632
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span> <span class="ruby-value str">&quot;&lt;a&gt;
1633
+ &lt;b j='0'&gt;&lt;c i='0'/&gt;&lt;c i='1'/&gt;&lt;c i='2'/&gt;&lt;/b&gt;
1634
+ &lt;b j='1'&gt;&lt;c i='3'/&gt;&lt;c i='4'/&gt;&lt;c i='5'/&gt;&lt;/b&gt;
1635
+ &lt;b j='2'&gt;&lt;c i='6'/&gt;&lt;c i='7'/&gt;&lt;c i='8'/&gt;&lt;/b&gt;
1636
+ &lt;/a&gt;&quot;</span>
1637
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">descendants</span>(<span class="ruby-identifier">:c</span>)
1638
+
1639
+ <span class="ruby-comment cmt"># (ar + ar.descendants).find_all{|x| x.is_a? XML and x.name == :c}</span>
1640
+ <span class="ruby-comment cmt"># instead of ar.descendants(:c) because </span>
1641
+ <span class="ruby-comment cmt"># we might have returned [&lt;c i='?'/&gt;] as a result,</span>
1642
+ <span class="ruby-comment cmt"># and then it's not a descendant of the result then.</span>
1643
+ <span class="ruby-comment cmt"># This is ugly, and it should be fixed somewhere in magic/xml</span>
1644
+ <span class="ruby-identifier">c</span>.<span class="ruby-identifier">each_with_index</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">ci</span>,<span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
1645
+ <span class="ruby-identifier">c</span>.<span class="ruby-identifier">each_with_index</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cj</span>,<span class="ruby-identifier">j</span><span class="ruby-operator">|</span>
1646
+ <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">j</span>
1647
+ <span class="ruby-identifier">ar</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">subsequence</span>(<span class="ruby-identifier">ci</span>,<span class="ruby-identifier">cj</span>)
1648
+ <span class="ruby-identifier">cs_present</span> = (<span class="ruby-identifier">ar</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">ar</span>.<span class="ruby-identifier">descendants</span>).<span class="ruby-identifier">find_all</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">XML</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:c</span>}.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span> <span class="ruby-identifier">n</span>[<span class="ruby-identifier">:i</span>].<span class="ruby-identifier">to_i</span>}
1649
+ <span class="ruby-identifier">assert_equal</span>(((<span class="ruby-identifier">i</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>)<span class="ruby-operator">...</span><span class="ruby-identifier">j</span>).<span class="ruby-identifier">to_a</span>, <span class="ruby-identifier">cs_present</span>, <span class="ruby-node">&quot;XML#subsequence(c#{i}, c#{j}) should contain cs between #{i} and #{j}, exclusive, instead got: #{ar}&quot;</span>)
1650
+ }
1651
+ <span class="ruby-identifier">ar</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">subsequence</span>(<span class="ruby-identifier">ci</span>,<span class="ruby-keyword kw">nil</span>)
1652
+ <span class="ruby-identifier">cs_present</span> = (<span class="ruby-identifier">ar</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">ar</span>.<span class="ruby-identifier">descendants</span>).<span class="ruby-identifier">find_all</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">XML</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:c</span>}.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span> <span class="ruby-identifier">n</span>[<span class="ruby-identifier">:i</span>].<span class="ruby-identifier">to_i</span>}
1653
+ <span class="ruby-identifier">assert_equal</span>(((<span class="ruby-identifier">i</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>)<span class="ruby-operator">..</span><span class="ruby-value">8</span>).<span class="ruby-identifier">to_a</span>, <span class="ruby-identifier">cs_present</span>, <span class="ruby-node">&quot;XML#subsequence(c#{i}, nil) should contain cs from #{i+1} to 8, instead got: #{ar}&quot;</span>)
1654
+
1655
+ <span class="ruby-identifier">ar</span> = <span class="ruby-identifier">a</span>.<span class="ruby-identifier">subsequence</span>(<span class="ruby-keyword kw">nil</span>,<span class="ruby-identifier">ci</span>)
1656
+ <span class="ruby-identifier">cs_present</span> = (<span class="ruby-identifier">ar</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">ar</span>.<span class="ruby-identifier">descendants</span>).<span class="ruby-identifier">find_all</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">XML</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:c</span>}.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span> <span class="ruby-identifier">n</span>[<span class="ruby-identifier">:i</span>].<span class="ruby-identifier">to_i</span>}
1657
+ <span class="ruby-identifier">assert_equal</span>((<span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">i</span>).<span class="ruby-identifier">to_a</span>, <span class="ruby-identifier">cs_present</span>, <span class="ruby-node">&quot;XML#subsequence(nil, c#{i}) should contain cs from 0 to #{i-1}, instead got: #{ar}&quot;</span>)
1658
+ }
1659
+ <span class="ruby-keyword kw">end</span>
1660
+ </pre>
1661
+ </div>
1662
+ </div>
1663
+ </div>
1664
+ <div class="method">
1665
+ <div class="title">
1666
+ <a name="M000079"></a><b>test_text</b>()
1667
+ </div>
1668
+ <div class="description">
1669
+ <p>
1670
+ Test <a href="XML.html#M000047">XML#text</a>
1671
+ </p>
1672
+ </div>
1673
+ <div class="sourcecode">
1674
+ <p class="source-link">[ <a href="javascript:toggleSource('M000079_source')" id="l_M000079_source">show source</a> ]</p>
1675
+ <div id="M000079_source" class="dyn-source">
1676
+ <pre>
1677
+ <span class="ruby-comment cmt"># File tests.rb, line 324</span>
1678
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_text</span>
1679
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;Hello&lt;/foo&gt;&quot;</span>)
1680
+ <span class="ruby-identifier">b</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;/foo&gt;&quot;</span>)
1681
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;&lt;bar&gt;Hello&lt;/bar&gt;&lt;/foo&gt;&quot;</span>)
1682
+ <span class="ruby-identifier">d</span> = <span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">&quot;&lt;foo&gt;He&lt;bar&gt;llo&lt;/bar&gt;&lt;/foo&gt;&quot;</span>)
1683
+
1684
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;Hello&quot;</span>, <span class="ruby-identifier">a</span>.<span class="ruby-identifier">text</span>, <span class="ruby-value str">&quot;XML#text should work&quot;</span>)
1685
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&quot;</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">text</span>, <span class="ruby-value str">&quot;XML#text should work&quot;</span>)
1686
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;Hello&quot;</span>, <span class="ruby-identifier">c</span>.<span class="ruby-identifier">text</span>, <span class="ruby-value str">&quot;XML#text should work&quot;</span>)
1687
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;Hello&quot;</span>, <span class="ruby-identifier">d</span>.<span class="ruby-identifier">text</span>, <span class="ruby-value str">&quot;XML#text should work&quot;</span>)
1688
+ <span class="ruby-keyword kw">end</span>
1689
+ </pre>
1690
+ </div>
1691
+ </div>
1692
+ </div>
1693
+ <div class="method">
1694
+ <div class="title">
1695
+ <a name="M000083"></a><b>test_xml_bang</b>()
1696
+ </div>
1697
+ <div class="description">
1698
+ <p>
1699
+ Test xml! at top level
1700
+ </p>
1701
+ </div>
1702
+ <div class="sourcecode">
1703
+ <p class="source-link">[ <a href="javascript:toggleSource('M000083_source')" id="l_M000083_source">show source</a> ]</p>
1704
+ <div id="M000083_source" class="dyn-source">
1705
+ <pre>
1706
+ <span class="ruby-comment cmt"># File tests.rb, line 444</span>
1707
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">test_xml_bang</span>
1708
+ <span class="ruby-identifier">real_stdout</span> = <span class="ruby-identifier">$stdout</span>
1709
+ <span class="ruby-identifier">$stdout</span> = <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>
1710
+ <span class="ruby-identifier">xml!</span>(<span class="ruby-identifier">:foo</span>)
1711
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;foo/&gt;&quot;</span>, <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">string</span>, <span class="ruby-value str">&quot;xml! should work&quot;</span>)
1712
+
1713
+ <span class="ruby-identifier">$stdout</span> = <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>
1714
+ <span class="ruby-constant">XML</span>.<span class="ruby-identifier">bar!</span>
1715
+ <span class="ruby-identifier">assert_equal</span>(<span class="ruby-value str">&quot;&lt;bar/&gt;&quot;</span>, <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">string</span>, <span class="ruby-value str">&quot;XML#foo! should work&quot;</span>)
1716
+ <span class="ruby-identifier">$stdout</span> = <span class="ruby-identifier">real_stdout</span>
1717
+ <span class="ruby-keyword kw">end</span>
1718
+ </pre>
1719
+ </div>
1720
+ </div>
1721
+ </div>
1722
+ </div>
1723
+
1724
+ </div>
1725
+
1726
+ </body>
1727
+ </html>