qwik2md 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +4 -0
  5. data/README.md +36 -0
  6. data/Rakefile +10 -0
  7. data/bin/console +14 -0
  8. data/bin/setup +8 -0
  9. data/exe/qwik2md +17 -0
  10. data/lib/qwik2md/version.rb +3 -0
  11. data/lib/qwik2md.rb +39 -0
  12. data/qwik2md.gemspec +30 -0
  13. data/vendor/qwik/AUTHORS +10 -0
  14. data/vendor/qwik/COPYING +340 -0
  15. data/vendor/qwik/COPYRIGHT +346 -0
  16. data/vendor/qwik/lib/qwik/Makefile +63 -0
  17. data/vendor/qwik/lib/qwik/Rakefile +17 -0
  18. data/vendor/qwik/lib/qwik/act-aa.rb +83 -0
  19. data/vendor/qwik/lib/qwik/act-archive.rb +386 -0
  20. data/vendor/qwik/lib/qwik/act-attach.rb +304 -0
  21. data/vendor/qwik/lib/qwik/act-backup.rb +236 -0
  22. data/vendor/qwik/lib/qwik/act-basic.rb +325 -0
  23. data/vendor/qwik/lib/qwik/act-book.rb +161 -0
  24. data/vendor/qwik/lib/qwik/act-calc.rb +371 -0
  25. data/vendor/qwik/lib/qwik/act-charset.rb +251 -0
  26. data/vendor/qwik/lib/qwik/act-christel.rb +112 -0
  27. data/vendor/qwik/lib/qwik/act-chronology.rb +149 -0
  28. data/vendor/qwik/lib/qwik/act-code.rb +155 -0
  29. data/vendor/qwik/lib/qwik/act-comment.rb +554 -0
  30. data/vendor/qwik/lib/qwik/act-config.rb +49 -0
  31. data/vendor/qwik/lib/qwik/act-counter.rb +125 -0
  32. data/vendor/qwik/lib/qwik/act-day.rb +96 -0
  33. data/vendor/qwik/lib/qwik/act-describe.rb +135 -0
  34. data/vendor/qwik/lib/qwik/act-diary.rb +109 -0
  35. data/vendor/qwik/lib/qwik/act-edit.rb +317 -0
  36. data/vendor/qwik/lib/qwik/act-embed-html.rb +296 -0
  37. data/vendor/qwik/lib/qwik/act-emode.rb +150 -0
  38. data/vendor/qwik/lib/qwik/act-event.rb +187 -0
  39. data/vendor/qwik/lib/qwik/act-file.rb +303 -0
  40. data/vendor/qwik/lib/qwik/act-files.rb +771 -0
  41. data/vendor/qwik/lib/qwik/act-getpass.rb +295 -0
  42. data/vendor/qwik/lib/qwik/act-history.rb +136 -0
  43. data/vendor/qwik/lib/qwik/act-html.rb +204 -0
  44. data/vendor/qwik/lib/qwik/act-httpauth.rb +147 -0
  45. data/vendor/qwik/lib/qwik/act-include.rb +142 -0
  46. data/vendor/qwik/lib/qwik/act-interwiki.rb +189 -0
  47. data/vendor/qwik/lib/qwik/act-isearch.rb +109 -0
  48. data/vendor/qwik/lib/qwik/act-keywords.rb +137 -0
  49. data/vendor/qwik/lib/qwik/act-lang.rb +81 -0
  50. data/vendor/qwik/lib/qwik/act-license.rb +63 -0
  51. data/vendor/qwik/lib/qwik/act-list.rb +287 -0
  52. data/vendor/qwik/lib/qwik/act-login.rb +410 -0
  53. data/vendor/qwik/lib/qwik/act-logout.rb +60 -0
  54. data/vendor/qwik/lib/qwik/act-mail.rb +159 -0
  55. data/vendor/qwik/lib/qwik/act-map.rb +292 -0
  56. data/vendor/qwik/lib/qwik/act-md5.rb +42 -0
  57. data/vendor/qwik/lib/qwik/act-mdlb.rb +741 -0
  58. data/vendor/qwik/lib/qwik/act-media.rb +416 -0
  59. data/vendor/qwik/lib/qwik/act-member.rb +157 -0
  60. data/vendor/qwik/lib/qwik/act-menu.rb +142 -0
  61. data/vendor/qwik/lib/qwik/act-metadata.rb +323 -0
  62. data/vendor/qwik/lib/qwik/act-mlsubmitform.rb +49 -0
  63. data/vendor/qwik/lib/qwik/act-monitor.rb +167 -0
  64. data/vendor/qwik/lib/qwik/act-new.rb +418 -0
  65. data/vendor/qwik/lib/qwik/act-pagelist.rb +248 -0
  66. data/vendor/qwik/lib/qwik/act-password.rb +145 -0
  67. data/vendor/qwik/lib/qwik/act-plan.rb +210 -0
  68. data/vendor/qwik/lib/qwik/act-povray.rb +230 -0
  69. data/vendor/qwik/lib/qwik/act-presen.rb +380 -0
  70. data/vendor/qwik/lib/qwik/act-redirect.rb +133 -0
  71. data/vendor/qwik/lib/qwik/act-ring.rb +1071 -0
  72. data/vendor/qwik/lib/qwik/act-rrefs.rb +255 -0
  73. data/vendor/qwik/lib/qwik/act-ruby.rb +116 -0
  74. data/vendor/qwik/lib/qwik/act-sample.rb +170 -0
  75. data/vendor/qwik/lib/qwik/act-save.rb +295 -0
  76. data/vendor/qwik/lib/qwik/act-schedule.rb +374 -0
  77. data/vendor/qwik/lib/qwik/act-search.rb +180 -0
  78. data/vendor/qwik/lib/qwik/act-searchwords.rb +51 -0
  79. data/vendor/qwik/lib/qwik/act-sendpass.rb +83 -0
  80. data/vendor/qwik/lib/qwik/act-site.rb +89 -0
  81. data/vendor/qwik/lib/qwik/act-sitebackup.rb +419 -0
  82. data/vendor/qwik/lib/qwik/act-sitelog.rb +118 -0
  83. data/vendor/qwik/lib/qwik/act-smil.rb +299 -0
  84. data/vendor/qwik/lib/qwik/act-status.rb +220 -0
  85. data/vendor/qwik/lib/qwik/act-style.rb +608 -0
  86. data/vendor/qwik/lib/qwik/act-table.rb +263 -0
  87. data/vendor/qwik/lib/qwik/act-tableform.rb +241 -0
  88. data/vendor/qwik/lib/qwik/act-tag.rb +103 -0
  89. data/vendor/qwik/lib/qwik/act-text.rb +70 -0
  90. data/vendor/qwik/lib/qwik/act-textarea.rb +164 -0
  91. data/vendor/qwik/lib/qwik/act-theme.rb +346 -0
  92. data/vendor/qwik/lib/qwik/act-toc.rb +112 -0
  93. data/vendor/qwik/lib/qwik/act-typekey.rb +198 -0
  94. data/vendor/qwik/lib/qwik/act-under-const.rb +94 -0
  95. data/vendor/qwik/lib/qwik/act-webservice.rb +321 -0
  96. data/vendor/qwik/lib/qwik/act-wema.rb +558 -0
  97. data/vendor/qwik/lib/qwik/act-wysiwyg.rb +238 -0
  98. data/vendor/qwik/lib/qwik/action.rb +325 -0
  99. data/vendor/qwik/lib/qwik/autoreload.rb +98 -0
  100. data/vendor/qwik/lib/qwik/bench-bench.rb +28 -0
  101. data/vendor/qwik/lib/qwik/bench-emode.rb +47 -0
  102. data/vendor/qwik/lib/qwik/bench-format-xml.rb +70 -0
  103. data/vendor/qwik/lib/qwik/bench-large-table.rb +62 -0
  104. data/vendor/qwik/lib/qwik/bench-md5.rb +14 -0
  105. data/vendor/qwik/lib/qwik/bench-module-session.rb +19 -0
  106. data/vendor/qwik/lib/qwik/bench-page.rb +50 -0
  107. data/vendor/qwik/lib/qwik/bench-s-md5.rb +28 -0
  108. data/vendor/qwik/lib/qwik/bench-session.rb +25 -0
  109. data/vendor/qwik/lib/qwik/bench-textformat.rb +31 -0
  110. data/vendor/qwik/lib/qwik/catalog-factory.rb +91 -0
  111. data/vendor/qwik/lib/qwik/catalog-ja.rb +479 -0
  112. data/vendor/qwik/lib/qwik/catalog-ml-ja.rb +145 -0
  113. data/vendor/qwik/lib/qwik/check-act-monitor.rb +112 -0
  114. data/vendor/qwik/lib/qwik/check-act-monitor2.rb +46 -0
  115. data/vendor/qwik/lib/qwik/check-act-theme.rb +27 -0
  116. data/vendor/qwik/lib/qwik/check-event.rb +112 -0
  117. data/vendor/qwik/lib/qwik/check-event2.rb +55 -0
  118. data/vendor/qwik/lib/qwik/check-htree-rexml.rb +77 -0
  119. data/vendor/qwik/lib/qwik/check-htree.rb +51 -0
  120. data/vendor/qwik/lib/qwik/check-libxml.rb +135 -0
  121. data/vendor/qwik/lib/qwik/check-many-pages.rb +47 -0
  122. data/vendor/qwik/lib/qwik/check-monitor.rb +33 -0
  123. data/vendor/qwik/lib/qwik/check-observer.rb +67 -0
  124. data/vendor/qwik/lib/qwik/check-server.rb +61 -0
  125. data/vendor/qwik/lib/qwik/check-uuencode.rb +33 -0
  126. data/vendor/qwik/lib/qwik/check-webdav.rb +65 -0
  127. data/vendor/qwik/lib/qwik/check-xml-xpath.rb +27 -0
  128. data/vendor/qwik/lib/qwik/common-backtrace.rb +94 -0
  129. data/vendor/qwik/lib/qwik/common-basic.rb +111 -0
  130. data/vendor/qwik/lib/qwik/common-condition.rb +142 -0
  131. data/vendor/qwik/lib/qwik/common-error.rb +48 -0
  132. data/vendor/qwik/lib/qwik/common-gettext.rb +50 -0
  133. data/vendor/qwik/lib/qwik/common-javascript.rb +45 -0
  134. data/vendor/qwik/lib/qwik/common-notice.rb +132 -0
  135. data/vendor/qwik/lib/qwik/common-plain.rb +105 -0
  136. data/vendor/qwik/lib/qwik/common-plugin.rb +111 -0
  137. data/vendor/qwik/lib/qwik/common-res.rb +76 -0
  138. data/vendor/qwik/lib/qwik/common-resolve.rb +92 -0
  139. data/vendor/qwik/lib/qwik/common-send.rb +171 -0
  140. data/vendor/qwik/lib/qwik/common-session.rb +139 -0
  141. data/vendor/qwik/lib/qwik/common-surface.rb +261 -0
  142. data/vendor/qwik/lib/qwik/common-url.rb +90 -0
  143. data/vendor/qwik/lib/qwik/compat/Makefile +12 -0
  144. data/vendor/qwik/lib/qwik/compat/add_load_path.rb +1 -0
  145. data/vendor/qwik/lib/qwik/config.rb +299 -0
  146. data/vendor/qwik/lib/qwik/db-b-backup.rb +142 -0
  147. data/vendor/qwik/lib/qwik/db-backup.rb +184 -0
  148. data/vendor/qwik/lib/qwik/db-berkeley.rb +306 -0
  149. data/vendor/qwik/lib/qwik/db-filesystem.rb +305 -0
  150. data/vendor/qwik/lib/qwik/db-indexer.rb +154 -0
  151. data/vendor/qwik/lib/qwik/db-searchwords.rb +238 -0
  152. data/vendor/qwik/lib/qwik/description-ja.rb +267 -0
  153. data/vendor/qwik/lib/qwik/description.rb +256 -0
  154. data/vendor/qwik/lib/qwik/dev-add-copyright.rb +23 -0
  155. data/vendor/qwik/lib/qwik/dev-backup.rb +24 -0
  156. data/vendor/qwik/lib/qwik/dev-bench.rb +175 -0
  157. data/vendor/qwik/lib/qwik/dev-calctime.rb +52 -0
  158. data/vendor/qwik/lib/qwik/dev-css-compressor.rb +60 -0
  159. data/vendor/qwik/lib/qwik/dev-extract-catalog.rb +102 -0
  160. data/vendor/qwik/lib/qwik/dev-js-compressor.rb +73 -0
  161. data/vendor/qwik/lib/qwik/dev-release.rb +235 -0
  162. data/vendor/qwik/lib/qwik/dev-replace.rb +353 -0
  163. data/vendor/qwik/lib/qwik/dev-sendmail.rb +25 -0
  164. data/vendor/qwik/lib/qwik/farm.rb +283 -0
  165. data/vendor/qwik/lib/qwik/gettext.rb +56 -0
  166. data/vendor/qwik/lib/qwik/group-cond.rb +157 -0
  167. data/vendor/qwik/lib/qwik/group-config.rb +247 -0
  168. data/vendor/qwik/lib/qwik/group-confirm.rb +147 -0
  169. data/vendor/qwik/lib/qwik/group-db.rb +326 -0
  170. data/vendor/qwik/lib/qwik/group-mail.rb +195 -0
  171. data/vendor/qwik/lib/qwik/group-member.rb +307 -0
  172. data/vendor/qwik/lib/qwik/group-sendmail.rb +231 -0
  173. data/vendor/qwik/lib/qwik/group-site.rb +374 -0
  174. data/vendor/qwik/lib/qwik/group-sweep.rb +63 -0
  175. data/vendor/qwik/lib/qwik/group.rb +157 -0
  176. data/vendor/qwik/lib/qwik/helper.rb +6 -0
  177. data/vendor/qwik/lib/qwik/html-generator.rb +104 -0
  178. data/vendor/qwik/lib/qwik/html-to-wabisabi.rb +148 -0
  179. data/vendor/qwik/lib/qwik/htree-diff.rb +87 -0
  180. data/vendor/qwik/lib/qwik/htree-format-xml.rb +57 -0
  181. data/vendor/qwik/lib/qwik/htree-generator.rb +144 -0
  182. data/vendor/qwik/lib/qwik/htree-get.rb +251 -0
  183. data/vendor/qwik/lib/qwik/htree-html-generator.rb +179 -0
  184. data/vendor/qwik/lib/qwik/htree-template.rb +263 -0
  185. data/vendor/qwik/lib/qwik/htree-to-wabisabi.rb +171 -0
  186. data/vendor/qwik/lib/qwik/loadlib.rb +79 -0
  187. data/vendor/qwik/lib/qwik/logger.rb +115 -0
  188. data/vendor/qwik/lib/qwik/mail-body.rb +171 -0
  189. data/vendor/qwik/lib/qwik/mail-header.rb +474 -0
  190. data/vendor/qwik/lib/qwik/mail-multipart.rb +193 -0
  191. data/vendor/qwik/lib/qwik/mail-parse.rb +147 -0
  192. data/vendor/qwik/lib/qwik/mail.rb +341 -0
  193. data/vendor/qwik/lib/qwik/mailaddress.rb +83 -0
  194. data/vendor/qwik/lib/qwik/mdlb-model.rb +81 -0
  195. data/vendor/qwik/lib/qwik/mdlb-sample.rb +324 -0
  196. data/vendor/qwik/lib/qwik/ml-catalog-factory.rb +27 -0
  197. data/vendor/qwik/lib/qwik/ml-exception.rb +15 -0
  198. data/vendor/qwik/lib/qwik/ml-generator.rb +28 -0
  199. data/vendor/qwik/lib/qwik/ml-gettext.rb +137 -0
  200. data/vendor/qwik/lib/qwik/ml-logger.rb +82 -0
  201. data/vendor/qwik/lib/qwik/ml-memory.rb +65 -0
  202. data/vendor/qwik/lib/qwik/ml-msg-validator.rb +86 -0
  203. data/vendor/qwik/lib/qwik/ml-processor.rb +609 -0
  204. data/vendor/qwik/lib/qwik/ml-quickml-server.rb +122 -0
  205. data/vendor/qwik/lib/qwik/ml-sendmail.rb +0 -0
  206. data/vendor/qwik/lib/qwik/ml-server.rb +107 -0
  207. data/vendor/qwik/lib/qwik/ml-session.rb +348 -0
  208. data/vendor/qwik/lib/qwik/ml-sweeper.rb +101 -0
  209. data/vendor/qwik/lib/qwik/mock-logger.rb +65 -0
  210. data/vendor/qwik/lib/qwik/mock-sendmail.rb +78 -0
  211. data/vendor/qwik/lib/qwik/mock-socket.rb +82 -0
  212. data/vendor/qwik/lib/qwik/modulobe.rb +406 -0
  213. data/vendor/qwik/lib/qwik/mongrel-server.rb +72 -0
  214. data/vendor/qwik/lib/qwik/page-files.rb +249 -0
  215. data/vendor/qwik/lib/qwik/page-generate.rb +82 -0
  216. data/vendor/qwik/lib/qwik/page-get.rb +262 -0
  217. data/vendor/qwik/lib/qwik/page-images.rb +168 -0
  218. data/vendor/qwik/lib/qwik/page-put.rb +128 -0
  219. data/vendor/qwik/lib/qwik/page-rrefs.rb +154 -0
  220. data/vendor/qwik/lib/qwik/page-title.rb +0 -0
  221. data/vendor/qwik/lib/qwik/page-wikidb.rb +234 -0
  222. data/vendor/qwik/lib/qwik/page.rb +67 -0
  223. data/vendor/qwik/lib/qwik/pages.rb +444 -0
  224. data/vendor/qwik/lib/qwik/parse-plugin.rb +249 -0
  225. data/vendor/qwik/lib/qwik/parser-emode.rb +116 -0
  226. data/vendor/qwik/lib/qwik/parser-inline.rb +272 -0
  227. data/vendor/qwik/lib/qwik/parser.rb +349 -0
  228. data/vendor/qwik/lib/qwik/password.rb +183 -0
  229. data/vendor/qwik/lib/qwik/periodic.rb +79 -0
  230. data/vendor/qwik/lib/qwik/qp.rb +56 -0
  231. data/vendor/qwik/lib/qwik/qwik-service.rb +341 -0
  232. data/vendor/qwik/lib/qwik/qwik.rb +5 -0
  233. data/vendor/qwik/lib/qwik/qwikweb-adduser.rb +34 -0
  234. data/vendor/qwik/lib/qwik/qwikweb-catalog-validator.rb +110 -0
  235. data/vendor/qwik/lib/qwik/qwikweb-incgen.rb +28 -0
  236. data/vendor/qwik/lib/qwik/qwikweb-makesite.rb +41 -0
  237. data/vendor/qwik/lib/qwik/qwikweb-server.rb +44 -0
  238. data/vendor/qwik/lib/qwik/qwikweb-showpassword.rb +26 -0
  239. data/vendor/qwik/lib/qwik/qwikweb-watchlog.rb +67 -0
  240. data/vendor/qwik/lib/qwik/request-path.rb +304 -0
  241. data/vendor/qwik/lib/qwik/request-ua.rb +76 -0
  242. data/vendor/qwik/lib/qwik/request-webrick.rb +81 -0
  243. data/vendor/qwik/lib/qwik/request.rb +91 -0
  244. data/vendor/qwik/lib/qwik/resolve-tdiary.rb +292 -0
  245. data/vendor/qwik/lib/qwik/resolve.rb +121 -0
  246. data/vendor/qwik/lib/qwik/response.rb +228 -0
  247. data/vendor/qwik/lib/qwik/server-memory.rb +57 -0
  248. data/vendor/qwik/lib/qwik/server-webrick.rb +102 -0
  249. data/vendor/qwik/lib/qwik/server.rb +252 -0
  250. data/vendor/qwik/lib/qwik/site-config.rb +149 -0
  251. data/vendor/qwik/lib/qwik/site-db.rb +136 -0
  252. data/vendor/qwik/lib/qwik/site-event.rb +162 -0
  253. data/vendor/qwik/lib/qwik/site-files.rb +86 -0
  254. data/vendor/qwik/lib/qwik/site-group.rb +103 -0
  255. data/vendor/qwik/lib/qwik/site-index.rb +47 -0
  256. data/vendor/qwik/lib/qwik/site-log.rb +64 -0
  257. data/vendor/qwik/lib/qwik/site-member.rb +230 -0
  258. data/vendor/qwik/lib/qwik/site-monitor.rb +97 -0
  259. data/vendor/qwik/lib/qwik/site-pages.rb +62 -0
  260. data/vendor/qwik/lib/qwik/site-plan.rb +139 -0
  261. data/vendor/qwik/lib/qwik/site-report.rb +282 -0
  262. data/vendor/qwik/lib/qwik/site-resolve.rb +230 -0
  263. data/vendor/qwik/lib/qwik/site-rrefs.rb +18 -0
  264. data/vendor/qwik/lib/qwik/site-search.rb +180 -0
  265. data/vendor/qwik/lib/qwik/site-timeline.rb +153 -0
  266. data/vendor/qwik/lib/qwik/site-url.rb +189 -0
  267. data/vendor/qwik/lib/qwik/site.rb +76 -0
  268. data/vendor/qwik/lib/qwik/smil-time.rb +105 -0
  269. data/vendor/qwik/lib/qwik/smtp-session.rb +331 -0
  270. data/vendor/qwik/lib/qwik/template-generator.rb +149 -0
  271. data/vendor/qwik/lib/qwik/template.rb +85 -0
  272. data/vendor/qwik/lib/qwik/test-common.rb +10 -0
  273. data/vendor/qwik/lib/qwik/test-ml-info.rb +225 -0
  274. data/vendor/qwik/lib/qwik/test-module-ml.rb +142 -0
  275. data/vendor/qwik/lib/qwik/test-module-path.rb +110 -0
  276. data/vendor/qwik/lib/qwik/test-module-public.rb +70 -0
  277. data/vendor/qwik/lib/qwik/test-module-server.rb +98 -0
  278. data/vendor/qwik/lib/qwik/test-module-session.rb +264 -0
  279. data/vendor/qwik/lib/qwik/test-module-suite.rb +91 -0
  280. data/vendor/qwik/lib/qwik/test-ms-applemail.rb +59 -0
  281. data/vendor/qwik/lib/qwik/test-ms-attach.rb +174 -0
  282. data/vendor/qwik/lib/qwik/test-ms-basic.rb +40 -0
  283. data/vendor/qwik/lib/qwik/test-ms-close.rb +35 -0
  284. data/vendor/qwik/lib/qwik/test-ms-confirm.rb +75 -0
  285. data/vendor/qwik/lib/qwik/test-ms-ignore-spam.rb +57 -0
  286. data/vendor/qwik/lib/qwik/test-ms-japanese.rb +97 -0
  287. data/vendor/qwik/lib/qwik/test-ms-jfilename.rb +82 -0
  288. data/vendor/qwik/lib/qwik/test-ms-large.rb +58 -0
  289. data/vendor/qwik/lib/qwik/test-ms-member.rb +103 -0
  290. data/vendor/qwik/lib/qwik/test-ms-multipart.rb +84 -0
  291. data/vendor/qwik/lib/qwik/test-ms-org.rb +129 -0
  292. data/vendor/qwik/lib/qwik/test-ms-plan.rb +130 -0
  293. data/vendor/qwik/lib/qwik/test-ms-post.rb +53 -0
  294. data/vendor/qwik/lib/qwik/test-ms-quopri.rb +76 -0
  295. data/vendor/qwik/lib/qwik/test-sub-quopri.rb +45 -0
  296. data/vendor/qwik/lib/qwik/test-submit-base64.rb +59 -0
  297. data/vendor/qwik/lib/qwik/test-submit-forward.rb +61 -0
  298. data/vendor/qwik/lib/qwik/test-submit-html-mail.rb +52 -0
  299. data/vendor/qwik/lib/qwik/test-submit-japanese.rb +135 -0
  300. data/vendor/qwik/lib/qwik/test-submit-jfilename.rb +144 -0
  301. data/vendor/qwik/lib/qwik/test-submit-uuencode.rb +71 -0
  302. data/vendor/qwik/lib/qwik/test-suite-all.rb +8 -0
  303. data/vendor/qwik/lib/qwik/test-suite-basic.rb +9 -0
  304. data/vendor/qwik/lib/qwik/test-suite-ml.rb +9 -0
  305. data/vendor/qwik/lib/qwik/test-typekey.rb +64 -0
  306. data/vendor/qwik/lib/qwik/testunit.rb +45 -0
  307. data/vendor/qwik/lib/qwik/tokenizer-inline.rb +288 -0
  308. data/vendor/qwik/lib/qwik/tokenizer.rb +331 -0
  309. data/vendor/qwik/lib/qwik/typekey.rb +160 -0
  310. data/vendor/qwik/lib/qwik/util-basic.rb +135 -0
  311. data/vendor/qwik/lib/qwik/util-charset.rb +331 -0
  312. data/vendor/qwik/lib/qwik/util-css.rb +56 -0
  313. data/vendor/qwik/lib/qwik/util-csv-tokenizer.rb +113 -0
  314. data/vendor/qwik/lib/qwik/util-filename.rb +112 -0
  315. data/vendor/qwik/lib/qwik/util-pathname.rb +202 -0
  316. data/vendor/qwik/lib/qwik/util-pid.rb +58 -0
  317. data/vendor/qwik/lib/qwik/util-safe.rb +67 -0
  318. data/vendor/qwik/lib/qwik/util-sendmail.rb +273 -0
  319. data/vendor/qwik/lib/qwik/util-string.rb +202 -0
  320. data/vendor/qwik/lib/qwik/util-time.rb +125 -0
  321. data/vendor/qwik/lib/qwik/util-webrick.rb +176 -0
  322. data/vendor/qwik/lib/qwik/version.rb +11 -0
  323. data/vendor/qwik/lib/qwik/wabisabi-basic.rb +163 -0
  324. data/vendor/qwik/lib/qwik/wabisabi-diff.rb +130 -0
  325. data/vendor/qwik/lib/qwik/wabisabi-format-xml.rb +310 -0
  326. data/vendor/qwik/lib/qwik/wabisabi-generator.rb +262 -0
  327. data/vendor/qwik/lib/qwik/wabisabi-index.rb +174 -0
  328. data/vendor/qwik/lib/qwik/wabisabi-table.rb +212 -0
  329. data/vendor/qwik/lib/qwik/wabisabi-template.rb +295 -0
  330. data/vendor/qwik/lib/qwik/wabisabi-to-htree.rb +111 -0
  331. data/vendor/qwik/lib/qwik/wabisabi-to-wiki.rb +690 -0
  332. data/vendor/qwik/lib/qwik/wabisabi-traverse.rb +207 -0
  333. data/vendor/qwik/lib/qwik/wabisabi-validator.rb +116 -0
  334. data/vendor/qwik/lib/qwik/wabisabi.rb +5 -0
  335. metadata +492 -0
@@ -0,0 +1,110 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+ require 'qwik/util-pathname'
7
+
8
+ module Qwik
9
+ class Site
10
+ def erase_all
11
+ @pages.erase_all
12
+ end
13
+ end
14
+
15
+ class Pages
16
+ def erase_all
17
+ @db.erase_all
18
+ @pages = {}
19
+ end
20
+ end
21
+
22
+ class FileSystemDB
23
+ def erase_all
24
+ # do nothing
25
+ end
26
+ end
27
+
28
+ # test-module-bdb
29
+ module BDBEraseAllModule
30
+ def bdb_erase_all(db)
31
+ begin
32
+ db.each {|k, v|
33
+ db[k] = nil
34
+ }
35
+ rescue Fatal => e
36
+ return if e.message == 'closed DB'
37
+ raise e
38
+ end
39
+ end
40
+ end
41
+
42
+ class BerkeleyDB
43
+ include BDBEraseAllModule
44
+
45
+ def erase_all
46
+ @backupdb.erase_all
47
+ bdb_erase_all(@db)
48
+ @mtime_db.erase_all
49
+ end
50
+ end
51
+
52
+ class BackupBDB
53
+ include BDBEraseAllModule
54
+
55
+ def erase_all
56
+ bdb_erase_all(@db)
57
+ end
58
+ end
59
+ end
60
+
61
+ class Pathname
62
+ def erase_all_for_test
63
+ self.each_entry {|file|
64
+ base = file.to_s
65
+ next if base == '.' || base == '..'
66
+
67
+ f = self + file
68
+
69
+ if f.directory?
70
+ f.erase_all_for_test # Recursive.
71
+ next
72
+ end
73
+
74
+ if f.exist?
75
+ f.unlink
76
+ end
77
+ }
78
+ end
79
+
80
+ def setup
81
+ self.teardown if self.directory?
82
+ self.check_directory
83
+ end
84
+
85
+ def teardown
86
+ unless self.directory?
87
+ return
88
+ end
89
+ self.erase_all_for_test
90
+ end
91
+
92
+ # test-module-bdb
93
+ def erase_db(f)
94
+ begin
95
+ erase_all_db(f)
96
+ rescue => e
97
+ return
98
+ end
99
+ end
100
+
101
+ def erase_all_db(f)
102
+ return unless f.exist?
103
+ db = BDB::Hash.new(f.to_s, nil, 0)
104
+ db.each {|k, v|
105
+ db[k] = nil
106
+ }
107
+ db.close
108
+ end
109
+ private :erase_db, :erase_all_db
110
+ end
@@ -0,0 +1,70 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+
7
+ module TestModulePublic
8
+ def t_make_public(klass, *args)
9
+ args.each {|method_name|
10
+ klass.instance_eval {
11
+ public method_name
12
+ }
13
+ }
14
+ end
15
+
16
+ def t_make_readable(klass, *args)
17
+ args.each {|variable_name|
18
+ klass.instance_eval {
19
+ attr_reader variable_name
20
+ }
21
+ }
22
+ end
23
+
24
+ def t_make_writable(klass, *args)
25
+ args.each {|variable_name|
26
+ klass.instance_eval {
27
+ attr_writer variable_name
28
+ }
29
+ }
30
+ end
31
+ end
32
+
33
+ if $0 == __FILE__
34
+ require 'test/unit'
35
+ $test = true
36
+ end
37
+
38
+ if defined?($test) && $test
39
+ class TestModulePublicDummyClass
40
+ def initialize
41
+ @var = 't'
42
+ end
43
+
44
+ private
45
+
46
+ def hello
47
+ return 'hello'
48
+ end
49
+ end
50
+
51
+ class TestTestModulePublic < Test::Unit::TestCase
52
+ include TestModulePublic
53
+
54
+ def test_all
55
+ dc = TestModulePublicDummyClass.new
56
+
57
+ # test_t_make_public
58
+ assert_equal true, dc.private_methods.include?('hello')
59
+ assert_equal false, dc.public_methods.include?('hello')
60
+ t_make_public(TestModulePublicDummyClass, :hello)
61
+ assert_equal 'hello', dc.hello
62
+ assert_equal false, dc.private_methods.include?('hello')
63
+ assert_equal true, dc.public_methods.include?('hello')
64
+
65
+ # test_t_make_readable
66
+ t_make_readable(TestModulePublicDummyClass, :var)
67
+ assert_equal 't', dc.var
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,98 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ require 'open-uri'
6
+
7
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
8
+ require 'qwik/testunit'
9
+ require 'qwik/config'
10
+ require 'qwik/htree-to-wabisabi'
11
+ require 'qwik/test-module-path'
12
+
13
+ module TestServerSetupModule
14
+ def setup
15
+ @dir = '.test/data/test'.path
16
+ @dir.setup
17
+ end
18
+
19
+ def teardown
20
+ @dir.teardown
21
+ end
22
+ end
23
+
24
+ module TestServerModule
25
+ def setup_server(bind_address = '127.0.0.1')
26
+ config = Qwik::Config.new
27
+ config.update Qwik::Config::DebugConfig
28
+ config.update Qwik::Config::TestConfig
29
+ config[:bind_address] = bind_address
30
+
31
+ server = Qwik::Server.new(config)
32
+
33
+ memory = server.memory
34
+
35
+ wreq = Qwik::WEBrickRequest.new(server.config)
36
+ wreq.request_uri = URI.parse('http://example.com/test/')
37
+ wreq.peeraddr = [nil, nil, nil, '127.0.0.1']
38
+
39
+ wres = Qwik::WEBrickResponse.new(server.config)
40
+ wres.set_config
41
+
42
+ return server, config, memory, wreq, wres
43
+ end
44
+
45
+ def session(config, memory, wreq, wres)
46
+ req = Qwik::Request.new(config)
47
+ req.parse_webrick(wreq)
48
+
49
+ res = Qwik::Response.new(config)
50
+ res.set_webrick(wres)
51
+
52
+ action = Qwik::Action.new
53
+ action.init(config, memory, req, res)
54
+ action.run
55
+
56
+ res.setback(wres)
57
+
58
+ return wres
59
+ end
60
+
61
+ def teardown_server(server)
62
+ server.shutdown
63
+ end
64
+
65
+ def write_page(pagekey, content)
66
+ file = @dir+"#{pagekey}.txt"
67
+ file.put(content+"\n")
68
+ end
69
+
70
+ def read_page(pagekey)
71
+ file = @dir+"#{pagekey}.txt"
72
+ str = file.read
73
+ return str
74
+ end
75
+
76
+ def get_uri(uri)
77
+ hash = {
78
+ 'Cookie' => "userpass=user@e.com,95988593; path=/;",
79
+ }
80
+ str = ''
81
+ open(uri, hash) {|f|
82
+ str = f.read
83
+ }
84
+ return str
85
+ end
86
+
87
+ def get_path(path)
88
+ return get_uri("http://127.0.0.1:9190/test/#{path}")
89
+ end
90
+
91
+ def ok_xp(e, path, str)
92
+ ok_eq(e, HTree(str).to_wabisabi.get_path(path))
93
+ end
94
+
95
+ def ok_in(e, path, str)
96
+ ok_eq(e, HTree(str).to_wabisabi.get_path(path).inside.get_single)
97
+ end
98
+ end
@@ -0,0 +1,264 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ require 'webrick/log'
6
+
7
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
8
+ require 'qwik/testunit'
9
+ require 'qwik/test-module-path'
10
+ require 'qwik/test-module-public'
11
+ require 'qwik/request'
12
+ require 'qwik/response'
13
+ require 'qwik/loadlib'
14
+ require 'qwik/qp'
15
+ require 'logger'
16
+
17
+ module TestSession
18
+ include TestModulePublic
19
+
20
+ DEFAULT_USER = 'user@e.com'
21
+
22
+ TEST_PNG_DATA = "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\000\001\000\000\000\001\010\002\000\000\000\220wS\336\000\000\000\fIDATx\332c\370\377\377?\000\005\376\002\3763\022\225\024\000\000\000\000IEND\256B`\202"
23
+
24
+ # ============================== setup
25
+ def setup
26
+ web_setup
27
+ end
28
+
29
+ def web_setup
30
+ # setup config
31
+ if ! defined?($test_config)
32
+ config = Qwik::Config.new
33
+ $test_org_sites_dir = config[:sites_dir].dup
34
+ config.update(Qwik::Config::DebugConfig)
35
+ config.update(Qwik::Config::TestConfig)
36
+ $test_config = config
37
+ end
38
+ @config = $test_config
39
+ @org_sites_dir = $test_org_sites_dir
40
+
41
+ @config.sites_dir.path.check_directory
42
+ @config.grave_dir.path.check_directory
43
+ @config.cache_dir.path.check_directory
44
+ @config.etc_dir.path.check_directory
45
+ @config.log_dir.path.check_directory
46
+
47
+ # setup memory
48
+ if ! defined?($test_memory)
49
+ memory = Qwik::ServerMemory.new(@config)
50
+ logfile = '.test/testlog.txt'
51
+ loglevel = WEBrick::Log::INFO
52
+ logger = WEBrick::Log::new(logfile, loglevel)
53
+ memory[:logger] = logger
54
+
55
+ burylogfile = '.test/testburylog.txt'
56
+ log = ::Logger.new(burylogfile)
57
+ log.level = ::Logger::INFO
58
+ memory[:bury_log] = log
59
+
60
+ $test_memory = memory
61
+ end
62
+ @memory = $test_memory
63
+
64
+ # setup dir
65
+ @wwwdir = @config.sites_dir.path + 'www'
66
+ @wwwdir.setup
67
+ @dir = @config.sites_dir.path + 'test'
68
+ @dir.setup
69
+
70
+ # setup site
71
+ @site = @memory.farm.get_site('test')
72
+ end
73
+
74
+ # ============================== teardown
75
+ def teardown
76
+ web_teardown
77
+ end
78
+
79
+ def web_teardown
80
+ @site.erase_all if defined?(@site) && @site
81
+ @wwwdir.teardown if @wwwdir
82
+ #assert_equal false, (@dir+"test").exist?
83
+ @dir.teardown if @dir
84
+ end
85
+
86
+ # ============================== session
87
+ def session(path = '/test/')
88
+ # setup_req
89
+ req = Qwik::Request.new(@config)
90
+
91
+ # setup user
92
+ t_setup_user(@memory, req, DEFAULT_USER)
93
+
94
+ # parse_host
95
+ req.instance_eval {
96
+ @fromhost = 'example.com'
97
+ }
98
+
99
+ if /\APOST / =~ path
100
+ req.instance_eval {
101
+ @request_method = 'POST'
102
+ }
103
+ path.sub!(/\APOST /, "")
104
+ end
105
+
106
+ if path.include?("?")
107
+ path, query_str = path.split("?", 2)
108
+ query = WEBrick::HTTPUtils.parse_query(query_str)
109
+ req.query.clear
110
+ req.query.update(query)
111
+ end
112
+
113
+ req.parse_path(path)
114
+ req.accept_language = ['en']
115
+ req.instance_eval {
116
+ @fromhost = 'localhost'
117
+ }
118
+
119
+ # setup_res
120
+ res = Qwik::Response.new(@config)
121
+ res.make_mimetypes(WEBrick::HTTPUtils::DefaultMimeTypes)
122
+
123
+ # setup_action
124
+ @action = Qwik::Action.new
125
+ @action.init(@config, @memory, req, res)
126
+ site = @site
127
+ @action.instance_eval {
128
+ @site = site;
129
+ }
130
+
131
+ # Setup request by block.
132
+ yield(req) if block_given?
133
+
134
+ action = Qwik::Action.new
135
+ action.init(@config, @memory, req, res)
136
+ action.run
137
+
138
+ dummy_str = res.setback_body(res.body)
139
+
140
+ @res = res
141
+ # Since @res is not thread safe, return res instead of @res.
142
+ return res
143
+ end
144
+
145
+ def t_setup_user(memory, req, user)
146
+ req.cookies['user'] = user
147
+ req.cookies['pass'] = memory.passgen.generate(user)
148
+ end
149
+ private :t_setup_user
150
+
151
+ # ==================== test common
152
+ def t_site_open
153
+ page = @site['_SiteConfig']
154
+ page.put_with_time(':open:true', 0)
155
+ end
156
+
157
+ def t_add_user(user = DEFAULT_USER)
158
+ @site.member.add(user) unless @site.member.exist?(user)
159
+ end
160
+
161
+ def t_without_testmode
162
+ org_test = @config.test
163
+ org_debug = @config.debug
164
+ @config[:test] = false
165
+ @config[:debug] = false
166
+ yield
167
+ @config[:test] = org_test
168
+ @config[:debug] = org_debug
169
+ end
170
+
171
+ def t_with_site(sitename)
172
+ dir = ("#{sitename}/").path
173
+ dir.setup
174
+ yield
175
+ dir.teardown
176
+ end
177
+
178
+ def t_make_content(filename, data)
179
+ content = WEBrick::HTTPUtils::FormData.new(data)
180
+ content.filename = filename
181
+ return content
182
+ end
183
+
184
+ def t_with_path
185
+ org_public_url = @config[:public_url]
186
+ @config[:public_url] = "http://www.example.org/qwik/"
187
+ yield
188
+ @config[:public_url] = org_public_url
189
+ end
190
+
191
+ def t_with_siteurl(url='http://example.org/q/')
192
+ siteconfig = @site['_SiteConfig']
193
+ siteconfig.store ":siteurl:#{url}\n"
194
+ yield
195
+ siteconfig.store ""
196
+ end
197
+
198
+ # ==================== assert xpath module
199
+ def assert_path(e, w, user=DEFAULT_USER, path="//div[@class='section']", &b)
200
+ t_add_user if user
201
+
202
+ page = @site['1']
203
+ page = @site.create('1') if page.nil?
204
+ page.store(w)
205
+ res = session('/test/1.html') {|req|
206
+ yield(req) if block_given?
207
+ t_setup_user(@memory, req, user)
208
+ }
209
+ div = res.body.get_path(path)
210
+
211
+ if e.is_a? Array
212
+ return assert_equal(e, div.inside.remove_comment.get_single)
213
+ end
214
+ return assert_equal_or_match(e, div.inside.rb_format_xml(-1, -1).chomp)
215
+ end
216
+
217
+ def ok_wi(e, w, &b)
218
+ return assert_path(e, w, DEFAULT_USER, "//div[@class='section']", &b)
219
+ end
220
+
221
+ # ==================== show
222
+ # Get element by XPath and show it in pretty print mode.
223
+ def pw(xpath=nil, res=@res)
224
+ pp res.body.get_path(xpath)
225
+ end
226
+
227
+ # ==================== assert module
228
+ def assert_equal_or_match(e, s)
229
+ return assert_match(e, s) if e.is_a? Regexp
230
+ return assert_equal(e, s)
231
+ end
232
+
233
+ def ok_xp(e, path, res=@res)
234
+ elem = res.body.get_path(path)
235
+ return assert_equal(e, nil) if elem.nil?
236
+ return assert_equal(e, elem.remove_comment)
237
+ end
238
+
239
+ def ok_in(e, path, res=@res)
240
+ elem = res.body.get_path(path)
241
+ return assert_equal(e, nil) if elem.nil?
242
+ return assert_equal(e, elem.inside.get_single)
243
+ end
244
+
245
+ def ok_title(e, res=@res)
246
+ elem = res.body.get_path('//title')
247
+ return assert_equal(e, nil) if elem.nil?
248
+ return assert_equal(e, elem.inside.get_single[0])
249
+ end
250
+
251
+ def assert_text(e, tag, res=@res)
252
+ elem = res.body.get_tag(tag)
253
+ return assert_equal(e, nil) if elem.nil?
254
+ return assert_equal_or_match(e, elem.text)
255
+ end
256
+
257
+ def ok_attr(e, s, res=@res)
258
+ elem = (/\A\/\// =~ s) ? res.body.get_path(s) : res.body.get_tag(s)
259
+ return assert_equal(e, nil) if elem.nil?
260
+ return assert_equal(e, elem.attr)
261
+ end
262
+ alias assert_attr ok_attr
263
+ alias assert_rattr ok_attr
264
+ end
@@ -0,0 +1,91 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ require 'optparse'
6
+
7
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
8
+ $test = true # Set $test before require 'qwik/test-common'
9
+ require 'qwik/test-common'
10
+
11
+ class TestSuite
12
+ def self.main(argv)
13
+ testsuite = self.new
14
+ testsuite.run(argv)
15
+ end
16
+
17
+ def run(argv)
18
+ @suite = 'basic'
19
+
20
+ optionparser = OptionParser.new {|opts|
21
+ opts.banner = 'Usage: test-suite.rb [options]'
22
+ opts.separator ''
23
+ opts.separator 'Specific options:'
24
+ opts.on('-b', '--[no-]basic', 'Run basic test suite.') {|a|
25
+ @suite = 'basic'
26
+ }
27
+ opts.on('-a', '--[no-]all', 'Run all test suite.') {|a|
28
+ @suite = 'all'
29
+ }
30
+ opts.separator ''
31
+ opts.separator 'Common options:'
32
+ opts.on_tail('-h', '--help', 'Show this message') {
33
+ puts opts
34
+ exit
35
+ }
36
+ }
37
+ optionparser.parse!(argv)
38
+
39
+ case @suite
40
+ when 'basic'
41
+ test_suite_basic
42
+ when 'ml'
43
+ test_suite_ml
44
+ when 'all'
45
+ test_suite_all
46
+ end
47
+ end
48
+
49
+ def test_suite_basic
50
+ load_by_loadlib('qwik/test-module-*.rb')
51
+ test_suite_ml
52
+ test_suite_web
53
+ end
54
+
55
+ def test_suite_web
56
+ load_by_loadlib('qwik/common-*.rb')
57
+ load_by_loadlib('qwik/act-*.rb')
58
+ end
59
+
60
+ def test_suite_ml
61
+ load_by_loadlib('qwik/test-module-ml.rb')
62
+ load_by_loadlib('qwik/ml-*.rb')
63
+ load_by_loadlib('qwik/group-*.rb')
64
+ load_by_loadlib('qwik/mail-*.rb')
65
+ load_by_loadlib('qwik/test-ml-*.rb')
66
+ load_by_loadlib('qwik/test-submit-*.rb')
67
+ load_by_loadlib('qwik/test-ms-*.rb')
68
+ end
69
+
70
+ def test_suite_all
71
+ test_suite_basic
72
+ test_suite_extra
73
+ end
74
+
75
+ def test_suite_extra
76
+ load_by_loadlib('qwik/check-*.rb')
77
+ end
78
+
79
+ def test_suite_benchmark
80
+ #load_files('bench')
81
+ load_by_loadlib('qwik/bench-*.rb')
82
+ end
83
+
84
+ def load_by_loadlib(arg)
85
+ Qwik::LoadLibrary.load_libs_here(arg)
86
+ end
87
+ end
88
+
89
+ if $0 == __FILE__
90
+ TestSuite.main(ARGV)
91
+ end
@@ -0,0 +1,59 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+ require 'qwik/ml-session'
7
+ require 'qwik/test-module-ml'
8
+
9
+ if $0 == __FILE__
10
+ $test = true
11
+ end
12
+
13
+ class TestMSAppleMail < Test::Unit::TestCase
14
+ include TestModuleML
15
+
16
+ def test_all
17
+ send_normal_mail('bob@example.net') # Bob creates a new ML.
18
+ sendmail('bob@example.net', 'test@q.example.com', 'Apple Mail') {
19
+ "Mime-Version: 1.0 (Apple Message framework v623)
20
+ Content-Type: multipart/mixed; boundary=Apple-Mail-1-134582006
21
+ Subject: Apple Mail
22
+
23
+ --Apple-Mail-1-134582006
24
+ Content-Transfer-Encoding: 7bit
25
+ Content-Type: text/plain;
26
+ charset=ISO-2022-JP;
27
+ format=flowed
28
+
29
+ I attach a file using Apple Mail.
30
+ --Apple-Mail-1-134582006
31
+ Content-Transfer-Encoding: base64
32
+ Content-Type: application/zip;
33
+ x-mac-type=5A495020;
34
+ x-unix-mode=0755;
35
+ x-mac-creator=53495421;
36
+ name=\"sounds.zip\"
37
+ Content-Disposition: attachment;
38
+ filename=sounds.zip
39
+
40
+ UEsDBBQAAAAAAHiWSDMAAAAAAAAAAAAAAAANAAAAMDUxMDA3c291bmRzL1BLAwQUAAAACAB4lkgz
41
+ dW5kcy91bnJlYWwvZ25kX3YzLmFpZlBLBQYAAAAAEQARAMEEAACdHAYAAAA=
42
+
43
+ --Apple-Mail-1-134582006--
44
+ "
45
+ }
46
+ eq 'Apple Mail', @site['1'].get_title
47
+ eq "* Apple Mail
48
+ {{mail(bob@example.net,0)
49
+ I attach a file using Apple Mail.
50
+
51
+ {{file(sounds.zip)}}
52
+ }}
53
+ ",
54
+ @site['1'].load
55
+
56
+ files = @site.files('1')
57
+ eq true, files.exist?('sounds.zip')
58
+ end
59
+ end