narf 0.5.1

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 (657) hide show
  1. data/ChangeLog +163 -0
  2. data/InstalledFiles +2227 -0
  3. data/README +124 -0
  4. data/TODO +88 -0
  5. data/bin/narftest +17 -0
  6. data/bug.rb +9 -0
  7. data/build.rb +314 -0
  8. data/build.rb~ +314 -0
  9. data/config.save +12 -0
  10. data/doc/apache_cgi.txt +17 -0
  11. data/doc/fastcgi.txt +19 -0
  12. data/doc/mod_ruby.txt +7 -0
  13. data/doc/rdoc/classes/Web.html +366 -0
  14. data/doc/rdoc/classes/Web.src/M000002.html +15 -0
  15. data/doc/rdoc/classes/Web.src/M000003.html +15 -0
  16. data/doc/rdoc/classes/Web.src/M000004.html +15 -0
  17. data/doc/rdoc/classes/Web.src/M000005.html +15 -0
  18. data/doc/rdoc/classes/Web.src/M000006.html +20 -0
  19. data/doc/rdoc/classes/Web.src/M000007.html +18 -0
  20. data/doc/rdoc/classes/Web.src/M000008.html +18 -0
  21. data/doc/rdoc/classes/Web.src/M000009.html +18 -0
  22. data/doc/rdoc/classes/Web.src/M000010.html +15 -0
  23. data/doc/rdoc/classes/Web.src/M000011.html +15 -0
  24. data/doc/rdoc/classes/Web.src/M000012.html +15 -0
  25. data/doc/rdoc/classes/Web/CGD.html +173 -0
  26. data/doc/rdoc/classes/Web/CGD.src/M000037.html +24 -0
  27. data/doc/rdoc/classes/Web/CGD.src/M000038.html +23 -0
  28. data/doc/rdoc/classes/Web/CGD.src/M000039.html +15 -0
  29. data/doc/rdoc/classes/Web/CGD.src/M000040.html +15 -0
  30. data/doc/rdoc/classes/Web/CGD.src/M000041.html +23 -0
  31. data/doc/rdoc/classes/Web/CGI.html +946 -0
  32. data/doc/rdoc/classes/Web/CGI.src/M000051.html +15 -0
  33. data/doc/rdoc/classes/Web/CGI.src/M000052.html +24 -0
  34. data/doc/rdoc/classes/Web/CGI.src/M000053.html +15 -0
  35. data/doc/rdoc/classes/Web/CGI.src/M000054.html +15 -0
  36. data/doc/rdoc/classes/Web/CGI.src/M000055.html +15 -0
  37. data/doc/rdoc/classes/Web/CGI.src/M000056.html +15 -0
  38. data/doc/rdoc/classes/Web/CGI.src/M000057.html +17 -0
  39. data/doc/rdoc/classes/Web/CGI.src/M000058.html +34 -0
  40. data/doc/rdoc/classes/Web/CGI.src/M000059.html +22 -0
  41. data/doc/rdoc/classes/Web/CGI.src/M000060.html +15 -0
  42. data/doc/rdoc/classes/Web/CGI.src/M000061.html +15 -0
  43. data/doc/rdoc/classes/Web/CGI.src/M000062.html +19 -0
  44. data/doc/rdoc/classes/Web/CGI.src/M000063.html +18 -0
  45. data/doc/rdoc/classes/Web/CGI.src/M000064.html +19 -0
  46. data/doc/rdoc/classes/Web/CGI.src/M000065.html +15 -0
  47. data/doc/rdoc/classes/Web/CGI.src/M000066.html +15 -0
  48. data/doc/rdoc/classes/Web/CGI.src/M000067.html +15 -0
  49. data/doc/rdoc/classes/Web/CGI.src/M000068.html +13 -0
  50. data/doc/rdoc/classes/Web/CGI.src/M000069.html +13 -0
  51. data/doc/rdoc/classes/Web/CGI.src/M000070.html +13 -0
  52. data/doc/rdoc/classes/Web/CGI.src/M000071.html +13 -0
  53. data/doc/rdoc/classes/Web/CGI.src/M000072.html +19 -0
  54. data/doc/rdoc/classes/Web/CGI.src/M000073.html +15 -0
  55. data/doc/rdoc/classes/Web/CGI.src/M000074.html +19 -0
  56. data/doc/rdoc/classes/Web/CGI.src/M000075.html +15 -0
  57. data/doc/rdoc/classes/Web/CGI.src/M000076.html +15 -0
  58. data/doc/rdoc/classes/Web/CGI.src/M000077.html +15 -0
  59. data/doc/rdoc/classes/Web/CGI.src/M000078.html +20 -0
  60. data/doc/rdoc/classes/Web/CGI.src/M000079.html +36 -0
  61. data/doc/rdoc/classes/Web/CGI.src/M000080.html +19 -0
  62. data/doc/rdoc/classes/Web/CGI.src/M000081.html +18 -0
  63. data/doc/rdoc/classes/Web/CGI.src/M000082.html +15 -0
  64. data/doc/rdoc/classes/Web/CGI.src/M000083.html +17 -0
  65. data/doc/rdoc/classes/Web/CGI.src/M000084.html +15 -0
  66. data/doc/rdoc/classes/Web/CGI.src/M000085.html +16 -0
  67. data/doc/rdoc/classes/Web/CGI.src/M000086.html +15 -0
  68. data/doc/rdoc/classes/Web/CGI.src/M000087.html +15 -0
  69. data/doc/rdoc/classes/Web/CGI.src/M000088.html +15 -0
  70. data/doc/rdoc/classes/Web/CGI.src/M000089.html +16 -0
  71. data/doc/rdoc/classes/Web/CGI.src/M000090.html +15 -0
  72. data/doc/rdoc/classes/Web/CGI.src/M000091.html +15 -0
  73. data/doc/rdoc/classes/Web/CGI.src/M000092.html +15 -0
  74. data/doc/rdoc/classes/Web/CGI.src/M000093.html +15 -0
  75. data/doc/rdoc/classes/Web/CGI.src/M000094.html +15 -0
  76. data/doc/rdoc/classes/Web/CGI.src/M000095.html +15 -0
  77. data/doc/rdoc/classes/Web/CGI.src/M000096.html +19 -0
  78. data/doc/rdoc/classes/Web/CGI.src/M000097.html +15 -0
  79. data/doc/rdoc/classes/Web/CGI.src/M000098.html +15 -0
  80. data/doc/rdoc/classes/Web/CGI.src/M000099.html +43 -0
  81. data/doc/rdoc/classes/Web/CGI.src/M000100.html +18 -0
  82. data/doc/rdoc/classes/Web/CGI.src/M000101.html +20 -0
  83. data/doc/rdoc/classes/Web/CGI.src/M000102.html +15 -0
  84. data/doc/rdoc/classes/Web/CGI.src/M000103.html +15 -0
  85. data/doc/rdoc/classes/Web/CGI.src/M000104.html +15 -0
  86. data/doc/rdoc/classes/Web/CGI.src/M000105.html +24 -0
  87. data/doc/rdoc/classes/Web/CGI.src/M000106.html +24 -0
  88. data/doc/rdoc/classes/Web/CGI.src/M000107.html +22 -0
  89. data/doc/rdoc/classes/Web/CaseInsensitiveHash.html +104 -0
  90. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000118.html +15 -0
  91. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000119.html +15 -0
  92. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000120.html +15 -0
  93. data/doc/rdoc/classes/Web/Mime.html +122 -0
  94. data/doc/rdoc/classes/Web/Mime.src/M000118.html +15 -0
  95. data/doc/rdoc/classes/Web/Mime.src/M000119.html +15 -0
  96. data/doc/rdoc/classes/Web/Mime.src/M000120.html +23 -0
  97. data/doc/rdoc/classes/Web/Mime.src/M000121.html +15 -0
  98. data/doc/rdoc/classes/Web/Mime.src/M000122.html +15 -0
  99. data/doc/rdoc/classes/Web/Mime.src/M000123.html +23 -0
  100. data/doc/rdoc/classes/Web/Mime.src/M000124.html +15 -0
  101. data/doc/rdoc/classes/Web/Narflates.html +132 -0
  102. data/doc/rdoc/classes/Web/Parser.html +219 -0
  103. data/doc/rdoc/classes/Web/Parser.src/M000013.html +21 -0
  104. data/doc/rdoc/classes/Web/Parser.src/M000014.html +19 -0
  105. data/doc/rdoc/classes/Web/Parser.src/M000015.html +21 -0
  106. data/doc/rdoc/classes/Web/Parser.src/M000016.html +15 -0
  107. data/doc/rdoc/classes/Web/Parser.src/M000017.html +30 -0
  108. data/doc/rdoc/classes/Web/Parser.src/M000018.html +15 -0
  109. data/doc/rdoc/classes/Web/Parser.src/M000019.html +19 -0
  110. data/doc/rdoc/classes/Web/Parser.src/M000020.html +27 -0
  111. data/doc/rdoc/classes/Web/Parser.src/M000021.html +15 -0
  112. data/doc/rdoc/classes/Web/Parser.src/M000022.html +16 -0
  113. data/doc/rdoc/classes/Web/Parser.src/M000023.html +18 -0
  114. data/doc/rdoc/classes/Web/Session.html +178 -0
  115. data/doc/rdoc/classes/Web/Session.src/M000042.html +20 -0
  116. data/doc/rdoc/classes/Web/Session.src/M000043.html +19 -0
  117. data/doc/rdoc/classes/Web/Session.src/M000044.html +21 -0
  118. data/doc/rdoc/classes/Web/Session.src/M000045.html +21 -0
  119. data/doc/rdoc/classes/Web/Session.src/M000046.html +15 -0
  120. data/doc/rdoc/classes/Web/Session.src/M000047.html +17 -0
  121. data/doc/rdoc/classes/Web/Session.src/M000048.html +15 -0
  122. data/doc/rdoc/classes/Web/Session.src/M000049.html +15 -0
  123. data/doc/rdoc/classes/Web/Session.src/M000050.html +16 -0
  124. data/doc/rdoc/classes/Web/Testing.html +474 -0
  125. data/doc/rdoc/classes/Web/Testing.src/M000024.html +15 -0
  126. data/doc/rdoc/classes/Web/Testing.src/M000025.html +25 -0
  127. data/doc/rdoc/classes/Web/Testing.src/M000026.html +15 -0
  128. data/doc/rdoc/classes/Web/Testing.src/M000027.html +28 -0
  129. data/doc/rdoc/classes/Web/Testing.src/M000028.html +58 -0
  130. data/doc/rdoc/classes/Web/Testing.src/M000029.html +15 -0
  131. data/doc/rdoc/classes/Web/Testing.src/M000030.html +15 -0
  132. data/doc/rdoc/classes/Web/Testing.src/M000031.html +15 -0
  133. data/doc/rdoc/classes/Web/Testing.src/M000032.html +15 -0
  134. data/doc/rdoc/classes/Web/Testing.src/M000033.html +15 -0
  135. data/doc/rdoc/classes/Web/Testing.src/M000034.html +15 -0
  136. data/doc/rdoc/classes/Web/Testing.src/M000035.html +15 -0
  137. data/doc/rdoc/classes/Web/Testing.src/M000036.html +18 -0
  138. data/doc/rdoc/classes/Web/Upload.html +160 -0
  139. data/doc/rdoc/classes/Web/Upload.src/M000108.html +25 -0
  140. data/doc/rdoc/classes/Web/Upload.src/M000109.html +18 -0
  141. data/doc/rdoc/classes/Web/Upload.src/M000110.html +16 -0
  142. data/doc/rdoc/classes/Web/Upload.src/M000111.html +16 -0
  143. data/doc/rdoc/classes/Web/Wiki.html +249 -0
  144. data/doc/rdoc/classes/Web/Wiki.src/M000112.html +25 -0
  145. data/doc/rdoc/classes/Web/Wiki.src/M000113.html +15 -0
  146. data/doc/rdoc/classes/Web/Wiki.src/M000114.html +26 -0
  147. data/doc/rdoc/classes/Web/Wiki.src/M000115.html +21 -0
  148. data/doc/rdoc/classes/Web/Wiki.src/M000116.html +18 -0
  149. data/doc/rdoc/classes/Web/Wiki.src/M000117.html +19 -0
  150. data/doc/rdoc/created.rid +1 -0
  151. data/doc/rdoc/files/README.html +226 -0
  152. data/doc/rdoc/files/doc/apache_cgi_txt.html +82 -0
  153. data/doc/rdoc/files/doc/fastcgi_txt.html +82 -0
  154. data/doc/rdoc/files/doc/mod_ruby_txt.html +62 -0
  155. data/doc/rdoc/files/doc/webrick_txt.html +79 -0
  156. data/doc/rdoc/files/examples/examples_rdoc.html +73 -0
  157. data/doc/rdoc/files/lib/web/cgi_rb.html +75 -0
  158. data/doc/rdoc/files/lib/web/mime_rb.html +67 -0
  159. data/doc/rdoc/files/lib/web/parser_rb.html +73 -0
  160. data/doc/rdoc/files/lib/web/session_rb.html +73 -0
  161. data/doc/rdoc/files/lib/web/template_rb.html +73 -0
  162. data/doc/rdoc/files/lib/web/testing_rb.html +67 -0
  163. data/doc/rdoc/files/lib/web/upload_rb.html +73 -0
  164. data/doc/rdoc/files/lib/web/wiki_rb.html +79 -0
  165. data/doc/rdoc/files/lib/web_rb.html +116 -0
  166. data/doc/rdoc/files/lib/web_rb.src/M000001.html +15 -0
  167. data/doc/rdoc/fr_class_index.html +47 -0
  168. data/doc/rdoc/fr_file_index.html +52 -0
  169. data/doc/rdoc/fr_method_index.html +158 -0
  170. data/doc/rdoc/index.html +22 -0
  171. data/doc/rdoc/rdoc-style.css +99 -0
  172. data/doc/webrick.txt +23 -0
  173. data/examples/admin.rb +8 -0
  174. data/examples/admin.rb~ +5 -0
  175. data/examples/cookbook.rdoc +247 -0
  176. data/examples/cookbook.rdoc~ +238 -0
  177. data/examples/examples.rdoc +19 -0
  178. data/examples/examples.rdoc~ +17 -0
  179. data/examples/hello.world.rb +5 -0
  180. data/examples/hello.world.rb~ +3 -0
  181. data/examples/session.rb +34 -0
  182. data/examples/session.rb~ +31 -0
  183. data/examples/test/test.hello.world.rb +9 -0
  184. data/examples/test/test.hello.world.rb~ +9 -0
  185. data/examples/test/test.session.rb +37 -0
  186. data/examples/test/test.session.rb~ +37 -0
  187. data/examples/webunit/COPYING +340 -0
  188. data/examples/webunit/Makefile +14 -0
  189. data/examples/webunit/TIPS-ja.html +126 -0
  190. data/examples/webunit/TIPS-ja.rd +154 -0
  191. data/examples/webunit/TODO-ja.html +35 -0
  192. data/examples/webunit/TODO-ja.rd +28 -0
  193. data/examples/webunit/changes.rd +185 -0
  194. data/examples/webunit/conv/digit-0.cgi +40 -0
  195. data/examples/webunit/conv/digit-0.rb +21 -0
  196. data/examples/webunit/conv/digit-1.cgi +44 -0
  197. data/examples/webunit/conv/digit-1.rb +17 -0
  198. data/examples/webunit/conv/digit.cgi +59 -0
  199. data/examples/webunit/conv/digit.rb +23 -0
  200. data/examples/webunit/conv/test_digit-0.rb +16 -0
  201. data/examples/webunit/conv/test_digit-1.rb +19 -0
  202. data/examples/webunit/conv/test_digit.rb +26 -0
  203. data/examples/webunit/conv/test_digit_view-0.rb +76 -0
  204. data/examples/webunit/conv/test_digit_view-1.rb +102 -0
  205. data/examples/webunit/conv/test_digit_view.rb +134 -0
  206. data/examples/webunit/example.rd +37 -0
  207. data/examples/webunit/index-en.html +263 -0
  208. data/examples/webunit/index-en.rd +60 -0
  209. data/examples/webunit/index-ja.html +263 -0
  210. data/examples/webunit/index-ja.rd +60 -0
  211. data/examples/wiki.rb +7 -0
  212. data/examples/wiki.rb~ +5 -0
  213. data/install.rb +1022 -0
  214. data/lib/web.rb +290 -0
  215. data/lib/web.rb~ +290 -0
  216. data/lib/web/#assertinclude.rb# +110 -0
  217. data/lib/web/action.rb +82 -0
  218. data/lib/web/assertinclude.rb +110 -0
  219. data/lib/web/assertinclude.rb~ +110 -0
  220. data/lib/web/buffer.rb +20 -0
  221. data/lib/web/cgi.rb +641 -0
  222. data/lib/web/cgi.rb~ +640 -0
  223. data/lib/web/formreader.rb +317 -0
  224. data/lib/web/forms.rb +104 -0
  225. data/lib/web/htmlparser/html-parser.rb +429 -0
  226. data/lib/web/htmlparser/html-parser.rb~ +429 -0
  227. data/lib/web/htmlparser/sgml-parser.rb +332 -0
  228. data/lib/web/htmlparser/sgml-parser.rb~ +332 -0
  229. data/lib/web/htmltools/element.rb +296 -0
  230. data/lib/web/htmltools/element.rb~ +296 -0
  231. data/lib/web/htmltools/stparser.rb +276 -0
  232. data/lib/web/htmltools/stparser.rb~ +276 -0
  233. data/lib/web/htmltools/tags.rb +286 -0
  234. data/lib/web/htmltools/tags.rb~ +286 -0
  235. data/lib/web/htmltools/tree.rb +139 -0
  236. data/lib/web/htmltools/tree.rb~ +139 -0
  237. data/lib/web/htmltools/xmltree.rb +160 -0
  238. data/lib/web/htmltools/xmltree.rb~ +160 -0
  239. data/lib/web/htmltools/xpath.rb +71 -0
  240. data/lib/web/htmltools/xpath.rb~ +71 -0
  241. data/lib/web/mime.rb +82 -0
  242. data/lib/web/parser.rb +266 -0
  243. data/lib/web/parser.rb~ +266 -0
  244. data/lib/web/request.rb~ +238 -0
  245. data/lib/web/resources/mime.types +483 -0
  246. data/lib/web/runner.rb +26 -0
  247. data/lib/web/runner.rb~ +26 -0
  248. data/lib/web/sapi/fastcgi.rb +26 -0
  249. data/lib/web/sapi/fastcgi.rb~ +25 -0
  250. data/lib/web/sapi/mod_ruby.rb +46 -0
  251. data/lib/web/sapi/mod_ruby.rb~ +46 -0
  252. data/lib/web/sapi/webrick.rb +91 -0
  253. data/lib/web/sapi/webrick.rb~ +89 -0
  254. data/lib/web/session.rb +75 -0
  255. data/lib/web/session.rb~ +75 -0
  256. data/lib/web/simpledispatcher.rb +155 -0
  257. data/lib/web/strscanparser.rb +24 -0
  258. data/lib/web/tagparser.rb +96 -0
  259. data/lib/web/tagparser.rb~ +96 -0
  260. data/lib/web/template.rb +613 -0
  261. data/lib/web/template.rb~ +613 -0
  262. data/lib/web/testing.rb +546 -0
  263. data/lib/web/testing.rb~ +546 -0
  264. data/lib/web/traceoutput.rb +32 -0
  265. data/lib/web/unit.rb +27 -0
  266. data/lib/web/unit/assert.rb +154 -0
  267. data/lib/web/unit/converter.rb +148 -0
  268. data/lib/web/unit/cookie.rb +120 -0
  269. data/lib/web/unit/domwalker.rb +187 -0
  270. data/lib/web/unit/exception.rb +15 -0
  271. data/lib/web/unit/form.rb +118 -0
  272. data/lib/web/unit/formatter.rb +314 -0
  273. data/lib/web/unit/frame.rb +39 -0
  274. data/lib/web/unit/html-parser.rb +432 -0
  275. data/lib/web/unit/htmlelem.rb +124 -0
  276. data/lib/web/unit/htmlrepair.rb +116 -0
  277. data/lib/web/unit/htmlsplit.rb +840 -0
  278. data/lib/web/unit/image.rb +27 -0
  279. data/lib/web/unit/jscript.rb +32 -0
  280. data/lib/web/unit/link.rb +35 -0
  281. data/lib/web/unit/params.rb +323 -0
  282. data/lib/web/unit/parser.rb +226 -0
  283. data/lib/web/unit/resources/assert.html +101 -0
  284. data/lib/web/unit/resources/auth/index.html +5 -0
  285. data/lib/web/unit/resources/badtags.html +7 -0
  286. data/lib/web/unit/resources/cookie.cgi +33 -0
  287. data/lib/web/unit/resources/document.xml +13 -0
  288. data/lib/web/unit/resources/form.html +150 -0
  289. data/lib/web/unit/resources/frame-0.html +10 -0
  290. data/lib/web/unit/resources/frame-1.html +10 -0
  291. data/lib/web/unit/resources/frame.html +10 -0
  292. data/lib/web/unit/resources/image.html +17 -0
  293. data/lib/web/unit/resources/images/x.gif +0 -0
  294. data/lib/web/unit/resources/images/y.gif +0 -0
  295. data/lib/web/unit/resources/jscript-0.html +10 -0
  296. data/lib/web/unit/resources/jscript-1.html +10 -0
  297. data/lib/web/unit/resources/jscript.html +19 -0
  298. data/lib/web/unit/resources/link.html +19 -0
  299. data/lib/web/unit/resources/multipart.cgi +28 -0
  300. data/lib/web/unit/resources/multipart.html +74 -0
  301. data/lib/web/unit/resources/params.html +65 -0
  302. data/lib/web/unit/resources/redirect.cgi +13 -0
  303. data/lib/web/unit/resources/response.html +67 -0
  304. data/lib/web/unit/resources/simple.cgi +14 -0
  305. data/lib/web/unit/resources/stock.cgi +35 -0
  306. data/lib/web/unit/resources/table.html +83 -0
  307. data/lib/web/unit/response.rb +469 -0
  308. data/lib/web/unit/response.rb~ +461 -0
  309. data/lib/web/unit/runtest.rb +44 -0
  310. data/lib/web/unit/sgml-parser.rb +336 -0
  311. data/lib/web/unit/table.rb +150 -0
  312. data/lib/web/unit/testcase.rb +49 -0
  313. data/lib/web/unit/ui/cui/testrunner.rb +52 -0
  314. data/lib/web/unit/ui/cui/testrunner.rb~ +50 -0
  315. data/lib/web/unit/utils.rb +70 -0
  316. data/lib/web/unit/webunit.rb +28 -0
  317. data/lib/web/upload.rb +55 -0
  318. data/lib/web/upload.rb~ +262 -0
  319. data/lib/web/wiki.rb +506 -0
  320. data/lib/web/wiki.rb~ +506 -0
  321. data/lib/web/wiki/linker.rb +72 -0
  322. data/lib/web/wiki/linker.rb~ +72 -0
  323. data/lib/web/wiki/mime.rb~ +68 -0
  324. data/lib/web/wiki/page.rb +192 -0
  325. data/lib/web/wiki/page.rb~ +192 -0
  326. data/lib/web/wiki/resources/#edit.html# +65 -0
  327. data/lib/web/wiki/resources/admin.html +13 -0
  328. data/lib/web/wiki/resources/admin.html~ +13 -0
  329. data/lib/web/wiki/resources/asset_history.html +3 -0
  330. data/lib/web/wiki/resources/basic.html +1 -0
  331. data/lib/web/wiki/resources/default-content_editor.html +1 -0
  332. data/lib/web/wiki/resources/default-content_editor.html~ +1 -0
  333. data/lib/web/wiki/resources/edit.html +1 -1
  334. data/lib/web/wiki/resources/edit.html~ +1 -1
  335. data/lib/web/wiki/resources/ekit-content_editor.html +1 -0
  336. data/lib/web/wiki/resources/home.html +10 -0
  337. data/lib/web/wiki/resources/home.html~ +10 -0
  338. data/lib/web/wiki/resources/htmlarea/ChangeLog +1185 -0
  339. data/lib/web/wiki/resources/htmlarea/dialog.js +72 -0
  340. data/lib/web/wiki/resources/htmlarea/examples/2-areas.cgi +16 -0
  341. data/lib/web/wiki/resources/htmlarea/examples/2-areas.html +158 -0
  342. data/lib/web/wiki/resources/htmlarea/examples/context-menu.html +95 -0
  343. data/lib/web/wiki/resources/htmlarea/examples/core.html +184 -0
  344. data/lib/web/wiki/resources/htmlarea/examples/css.html +88 -0
  345. data/lib/web/wiki/resources/htmlarea/examples/custom.css +29 -0
  346. data/lib/web/wiki/resources/htmlarea/examples/full-page.html +75 -0
  347. data/lib/web/wiki/resources/htmlarea/examples/fully-loaded.html +248 -0
  348. data/lib/web/wiki/resources/htmlarea/examples/index.html +40 -0
  349. data/lib/web/wiki/resources/htmlarea/examples/spell-checker.html +132 -0
  350. data/lib/web/wiki/resources/htmlarea/examples/table-operations.html +116 -0
  351. data/lib/web/wiki/resources/htmlarea/examples/test.cgi +21 -0
  352. data/lib/web/wiki/resources/htmlarea/htmlarea.css +180 -0
  353. data/lib/web/wiki/resources/htmlarea/htmlarea.js +2175 -0
  354. data/lib/web/wiki/resources/htmlarea/images/ed_about.gif +0 -0
  355. data/lib/web/wiki/resources/htmlarea/images/ed_align_center.gif +0 -0
  356. data/lib/web/wiki/resources/htmlarea/images/ed_align_justify.gif +0 -0
  357. data/lib/web/wiki/resources/htmlarea/images/ed_align_left.gif +0 -0
  358. data/lib/web/wiki/resources/htmlarea/images/ed_align_right.gif +0 -0
  359. data/lib/web/wiki/resources/htmlarea/images/ed_blank.gif +0 -0
  360. data/lib/web/wiki/resources/htmlarea/images/ed_charmap.gif +0 -0
  361. data/lib/web/wiki/resources/htmlarea/images/ed_color_bg.gif +0 -0
  362. data/lib/web/wiki/resources/htmlarea/images/ed_color_fg.gif +0 -0
  363. data/lib/web/wiki/resources/htmlarea/images/ed_copy.gif +0 -0
  364. data/lib/web/wiki/resources/htmlarea/images/ed_custom.gif +0 -0
  365. data/lib/web/wiki/resources/htmlarea/images/ed_cut.gif +0 -0
  366. data/lib/web/wiki/resources/htmlarea/images/ed_delete.gif +0 -0
  367. data/lib/web/wiki/resources/htmlarea/images/ed_format_bold.gif +0 -0
  368. data/lib/web/wiki/resources/htmlarea/images/ed_format_italic.gif +0 -0
  369. data/lib/web/wiki/resources/htmlarea/images/ed_format_strike.gif +0 -0
  370. data/lib/web/wiki/resources/htmlarea/images/ed_format_sub.gif +0 -0
  371. data/lib/web/wiki/resources/htmlarea/images/ed_format_sup.gif +0 -0
  372. data/lib/web/wiki/resources/htmlarea/images/ed_format_underline.gif +0 -0
  373. data/lib/web/wiki/resources/htmlarea/images/ed_help.gif +0 -0
  374. data/lib/web/wiki/resources/htmlarea/images/ed_hr.gif +0 -0
  375. data/lib/web/wiki/resources/htmlarea/images/ed_html.gif +0 -0
  376. data/lib/web/wiki/resources/htmlarea/images/ed_image.gif +0 -0
  377. data/lib/web/wiki/resources/htmlarea/images/ed_indent_less.gif +0 -0
  378. data/lib/web/wiki/resources/htmlarea/images/ed_indent_more.gif +0 -0
  379. data/lib/web/wiki/resources/htmlarea/images/ed_left_to_right.gif +0 -0
  380. data/lib/web/wiki/resources/htmlarea/images/ed_link.gif +0 -0
  381. data/lib/web/wiki/resources/htmlarea/images/ed_list_bullet.gif +0 -0
  382. data/lib/web/wiki/resources/htmlarea/images/ed_list_num.gif +0 -0
  383. data/lib/web/wiki/resources/htmlarea/images/ed_paste.gif +0 -0
  384. data/lib/web/wiki/resources/htmlarea/images/ed_redo.gif +0 -0
  385. data/lib/web/wiki/resources/htmlarea/images/ed_right_to_left.gif +0 -0
  386. data/lib/web/wiki/resources/htmlarea/images/ed_save.gif +0 -0
  387. data/lib/web/wiki/resources/htmlarea/images/ed_show_border.gif +0 -0
  388. data/lib/web/wiki/resources/htmlarea/images/ed_splitcel.gif +0 -0
  389. data/lib/web/wiki/resources/htmlarea/images/ed_undo.gif +0 -0
  390. data/lib/web/wiki/resources/htmlarea/images/fullscreen_maximize.gif +0 -0
  391. data/lib/web/wiki/resources/htmlarea/images/fullscreen_minimize.gif +0 -0
  392. data/lib/web/wiki/resources/htmlarea/images/insert_table.gif +0 -0
  393. data/lib/web/wiki/resources/htmlarea/index.html +199 -0
  394. data/lib/web/wiki/resources/htmlarea/lang/b5.js +36 -0
  395. data/lib/web/wiki/resources/htmlarea/lang/cz.js +63 -0
  396. data/lib/web/wiki/resources/htmlarea/lang/da.js +38 -0
  397. data/lib/web/wiki/resources/htmlarea/lang/de.js +54 -0
  398. data/lib/web/wiki/resources/htmlarea/lang/ee.js +63 -0
  399. data/lib/web/wiki/resources/htmlarea/lang/el.js +75 -0
  400. data/lib/web/wiki/resources/htmlarea/lang/en.js +88 -0
  401. data/lib/web/wiki/resources/htmlarea/lang/es.js +51 -0
  402. data/lib/web/wiki/resources/htmlarea/lang/fi.js +46 -0
  403. data/lib/web/wiki/resources/htmlarea/lang/fr.js +61 -0
  404. data/lib/web/wiki/resources/htmlarea/lang/gb.js +36 -0
  405. data/lib/web/wiki/resources/htmlarea/lang/he.js +63 -0
  406. data/lib/web/wiki/resources/htmlarea/lang/hu.js +63 -0
  407. data/lib/web/wiki/resources/htmlarea/lang/it.js +54 -0
  408. data/lib/web/wiki/resources/htmlarea/lang/ja-euc.js +37 -0
  409. data/lib/web/wiki/resources/htmlarea/lang/ja-jis.js +37 -0
  410. data/lib/web/wiki/resources/htmlarea/lang/ja-sjis.js +37 -0
  411. data/lib/web/wiki/resources/htmlarea/lang/ja-utf8.js +37 -0
  412. data/lib/web/wiki/resources/htmlarea/lang/lt.js +55 -0
  413. data/lib/web/wiki/resources/htmlarea/lang/lv.js +55 -0
  414. data/lib/web/wiki/resources/htmlarea/lang/nb.js +36 -0
  415. data/lib/web/wiki/resources/htmlarea/lang/nl.js +90 -0
  416. data/lib/web/wiki/resources/htmlarea/lang/no.js +79 -0
  417. data/lib/web/wiki/resources/htmlarea/lang/pl.js +36 -0
  418. data/lib/web/wiki/resources/htmlarea/lang/pt_br.js +37 -0
  419. data/lib/web/wiki/resources/htmlarea/lang/ro.js +80 -0
  420. data/lib/web/wiki/resources/htmlarea/lang/ru.js +63 -0
  421. data/lib/web/wiki/resources/htmlarea/lang/se.js +38 -0
  422. data/lib/web/wiki/resources/htmlarea/lang/si.js +63 -0
  423. data/lib/web/wiki/resources/htmlarea/lang/vn.js +51 -0
  424. data/lib/web/wiki/resources/htmlarea/license.txt +30 -0
  425. data/lib/web/wiki/resources/htmlarea/plugins/CSS/css.js +116 -0
  426. data/lib/web/wiki/resources/htmlarea/plugins/CSS/lang/en.js +2 -0
  427. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/context-menu.js +416 -0
  428. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/de.js +59 -0
  429. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/el.js +57 -0
  430. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/en.js +66 -0
  431. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/nl.js +66 -0
  432. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/menu.css +64 -0
  433. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/full-page.js +143 -0
  434. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/img/docprop.gif +0 -0
  435. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/en.js +25 -0
  436. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/ro.js +25 -0
  437. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/popups/docprop.html +131 -0
  438. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/test.html +89 -0
  439. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/img/spell-check.gif +0 -0
  440. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/cz.js +37 -0
  441. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/da.js +37 -0
  442. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/de.js +28 -0
  443. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/en.js +38 -0
  444. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/hu.js +37 -0
  445. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/it.js +28 -0
  446. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/ro.js +37 -0
  447. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/readme-tech.html +114 -0
  448. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-logic.cgi +210 -0
  449. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-style.css +10 -0
  450. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.html +122 -0
  451. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.js +397 -0
  452. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-checker.js +79 -0
  453. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-delete.gif +0 -0
  454. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-after.gif +0 -0
  455. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-before.gif +0 -0
  456. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-merge.gif +0 -0
  457. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-prop.gif +0 -0
  458. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-split.gif +0 -0
  459. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-delete.gif +0 -0
  460. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-after.gif +0 -0
  461. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-before.gif +0 -0
  462. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-split.gif +0 -0
  463. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-delete.gif +0 -0
  464. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-above.gif +0 -0
  465. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-under.gif +0 -0
  466. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-prop.gif +0 -0
  467. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-split.gif +0 -0
  468. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/table-prop.gif +0 -0
  469. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/cz.js +90 -0
  470. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/da.js +90 -0
  471. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/de.js +81 -0
  472. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/el.js +81 -0
  473. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/en.js +90 -0
  474. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/fi.js +66 -0
  475. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/hu.js +63 -0
  476. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/it.js +81 -0
  477. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/nl.js +90 -0
  478. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/no.js +91 -0
  479. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/ro.js +90 -0
  480. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/table-operations.js +1160 -0
  481. data/lib/web/wiki/resources/htmlarea/popupdiv.js +369 -0
  482. data/lib/web/wiki/resources/htmlarea/popups/about.html +378 -0
  483. data/lib/web/wiki/resources/htmlarea/popups/blank.html +2 -0
  484. data/lib/web/wiki/resources/htmlarea/popups/custom2.html +35 -0
  485. data/lib/web/wiki/resources/htmlarea/popups/editor_help.html +16 -0
  486. data/lib/web/wiki/resources/htmlarea/popups/fullscreen.html +133 -0
  487. data/lib/web/wiki/resources/htmlarea/popups/insert_image.html +191 -0
  488. data/lib/web/wiki/resources/htmlarea/popups/insert_table.html +174 -0
  489. data/lib/web/wiki/resources/htmlarea/popups/link.html +142 -0
  490. data/lib/web/wiki/resources/htmlarea/popups/old-fullscreen.html +131 -0
  491. data/lib/web/wiki/resources/htmlarea/popups/old_insert_image.html +206 -0
  492. data/lib/web/wiki/resources/htmlarea/popups/popup.js +109 -0
  493. data/lib/web/wiki/resources/htmlarea/popups/select_color.html +347 -0
  494. data/lib/web/wiki/resources/htmlarea/popupwin.js +139 -0
  495. data/lib/web/wiki/resources/htmlarea/reference.html +523 -0
  496. data/lib/web/wiki/resources/htmlarea/release-notes.html +165 -0
  497. data/lib/web/wiki/resources/ie-content_editor.html +1 -0
  498. data/lib/web/wiki/resources/ie-content_editor.js +196 -0
  499. data/lib/web/wiki/resources/illustration.html +1 -0
  500. data/lib/web/wiki/resources/illustration.html~ +1 -0
  501. data/lib/web/wiki/resources/images.html +1 -0
  502. data/lib/web/wiki/resources/index.html +4 -0
  503. data/lib/web/wiki/resources/index.html~ +4 -0
  504. data/lib/web/wiki/resources/more_news.html +5 -0
  505. data/lib/web/wiki/resources/more_news.html~ +5 -0
  506. data/lib/web/wiki/resources/more_news_rss_0.91.html +23 -0
  507. data/lib/web/wiki/resources/narf-logo.gif +0 -0
  508. data/lib/web/wiki/resources/page_history.html +19 -0
  509. data/lib/web/wiki/resources/page_history.html~ +19 -0
  510. data/lib/web/wiki/resources/template.html +13 -0
  511. data/lib/web/wiki/resources/template.html~ +13 -0
  512. data/lib/web/wiki/resources/test_upload.gif +0 -0
  513. data/lib/web/wiki/resources/text-styles.css +1 -0
  514. data/lib/web/writableio.rb +33 -0
  515. data/narf-0.5.1.gem +0 -0
  516. data/narf.gemspec +40 -0
  517. data/narf.gemspec~ +52 -0
  518. data/pre-setup.rb +5 -0
  519. data/sapi/apache_cgi/INSTALL.txt~ +9 -0
  520. data/sapi/apache_cgi/README~ +0 -0
  521. data/sapi/apache_cgi/src/narf.c +13 -0
  522. data/sapi/fastcgi/INSTALL.txt~ +17 -0
  523. data/sapi/mod_ruby/INSTALL.txt~ +5 -0
  524. data/sapi/webrick/INSTALL.txt~ +21 -0
  525. data/sapi/webrick/run_webrick.rb~ +16 -0
  526. data/scripts/dump.rb +14 -0
  527. data/scripts/makedist.rb +49 -0
  528. data/scripts/upload.html +5 -0
  529. data/scripts/uri.rb +41 -0
  530. data/scripts/uri/common.rb +432 -0
  531. data/scripts/uri/ftp.rb +149 -0
  532. data/scripts/uri/generic.rb +1106 -0
  533. data/scripts/uri/http.rb +76 -0
  534. data/scripts/uri/https.rb +26 -0
  535. data/scripts/uri/ldap.rb +238 -0
  536. data/scripts/uri/mailto.rb +260 -0
  537. data/scripts/urireg.rb +174 -0
  538. data/test/bufferedtestrunner.rb +112 -0
  539. data/test/mod_ruby_stub.rb +39 -0
  540. data/test/mod_ruby_stub.rb~ +38 -0
  541. data/test/stringio.rb +2 -0
  542. data/test/test.action.rb +142 -0
  543. data/test/test.action.rb~ +142 -0
  544. data/test/test.app.rb +0 -0
  545. data/test/test.assertinclude.rb +109 -0
  546. data/test/test.assertinclude.rb~ +109 -0
  547. data/test/test.formreader-2.0.rb +352 -0
  548. data/test/test.formreader.rb +465 -0
  549. data/test/test.mime-type.rb +23 -0
  550. data/test/test.narf.cgi.rb +101 -0
  551. data/test/test.narf.cgi.rb~ +105 -0
  552. data/test/test.request.rb +328 -0
  553. data/test/test.request.rb~ +318 -0
  554. data/test/test.response.rb +565 -0
  555. data/test/test.response.rb~ +556 -0
  556. data/test/test.session.rb +50 -0
  557. data/test/test.simpledispatcher.rb +188 -0
  558. data/test/test.tagparser.rb +65 -0
  559. data/test/test.template.rb +831 -0
  560. data/test/test.template.rb~ +832 -0
  561. data/test/test.testing2.rb +341 -0
  562. data/test/test.web.test.rb +463 -0
  563. data/test/test.web.test.rb~ +461 -0
  564. data/test/testfiles/basictemplate.tpl +1 -0
  565. data/test/testfiles/explorer5.multipart.data +9 -0
  566. data/test/testfiles/form.html +7 -0
  567. data/test/testfiles/mozilla.multipart.data +9 -0
  568. data/test/testfiles/netscape4.multipart.data +9 -0
  569. data/test/testfiles/pic hydra.png +1 -0
  570. data/test/testfiles/post.data +1 -0
  571. data/test/testfiles/print.text +1 -0
  572. data/test/testfiles/text +1 -0
  573. data/test/webunit/dont_get_it.test_webunit.rb +27 -0
  574. data/test/webunit/ref +38 -0
  575. data/test/webunit/resources/uploadfile1.txt +1 -0
  576. data/test/webunit/resources/uploadfile2.txt +1 -0
  577. data/test/webunit/test_assert.rb +169 -0
  578. data/test/webunit/test_cookie.rb +128 -0
  579. data/test/webunit/test_cookie.rb~ +128 -0
  580. data/test/webunit/test_domwalker.rb +83 -0
  581. data/test/webunit/test_form.rb +43 -0
  582. data/test/webunit/test_form.rb~ +43 -0
  583. data/test/webunit/test_frame.rb +43 -0
  584. data/test/webunit/test_htmlelem.rb +75 -0
  585. data/test/webunit/test_image.rb +46 -0
  586. data/test/webunit/test_jscript.rb +58 -0
  587. data/test/webunit/test_link.rb +87 -0
  588. data/test/webunit/test_multipart.rb +53 -0
  589. data/test/webunit/test_multipart.rb~ +53 -0
  590. data/test/webunit/test_params.rb +212 -0
  591. data/test/webunit/test_params.rb~ +211 -0
  592. data/test/webunit/test_parser.rb +31 -0
  593. data/test/webunit/test_response.rb +145 -0
  594. data/test/webunit/test_response.rb~ +145 -0
  595. data/test/webunit/test_site/assert.html +101 -0
  596. data/test/webunit/test_site/assert.html~ +1 -0
  597. data/test/webunit/test_site/auth/index.html +5 -0
  598. data/test/webunit/test_site/auth/index.html~ +1 -0
  599. data/test/webunit/test_site/badtags.html +7 -0
  600. data/test/webunit/test_site/badtags.html~ +1 -0
  601. data/test/webunit/test_site/cookie.cgi +37 -0
  602. data/test/webunit/test_site/cookie.cgi~ +35 -0
  603. data/test/webunit/test_site/document.xml +13 -0
  604. data/test/webunit/test_site/document.xml~ +1 -0
  605. data/test/webunit/test_site/form.html +150 -0
  606. data/test/webunit/test_site/form.html~ +1 -0
  607. data/test/webunit/test_site/frame-0.html +10 -0
  608. data/test/webunit/test_site/frame-0.html~ +1 -0
  609. data/test/webunit/test_site/frame-1.html +10 -0
  610. data/test/webunit/test_site/frame-1.html~ +1 -0
  611. data/test/webunit/test_site/frame.html +10 -0
  612. data/test/webunit/test_site/frame.html~ +1 -0
  613. data/test/webunit/test_site/image.html +17 -0
  614. data/test/webunit/test_site/image.html~ +1 -0
  615. data/test/webunit/test_site/images/x.gif +0 -0
  616. data/test/webunit/test_site/images/y.gif +0 -0
  617. data/test/webunit/test_site/include.cgi~ +10 -0
  618. data/test/webunit/test_site/jscript-0.html +10 -0
  619. data/test/webunit/test_site/jscript-0.html~ +1 -0
  620. data/test/webunit/test_site/jscript-1.html +10 -0
  621. data/test/webunit/test_site/jscript-1.html~ +1 -0
  622. data/test/webunit/test_site/jscript.html +19 -0
  623. data/test/webunit/test_site/jscript.html~ +1 -0
  624. data/test/webunit/test_site/link.html +19 -0
  625. data/test/webunit/test_site/link.html~ +1 -0
  626. data/test/webunit/test_site/multipart.cgi +27 -0
  627. data/test/webunit/test_site/multipart.cgi~ +25 -0
  628. data/test/webunit/test_site/multipart.html +74 -0
  629. data/test/webunit/test_site/multipart.html~ +1 -0
  630. data/test/webunit/test_site/params.html +65 -0
  631. data/test/webunit/test_site/params.html~ +1 -0
  632. data/test/webunit/test_site/redirect.cgi +14 -0
  633. data/test/webunit/test_site/redirect.cgi~ +14 -0
  634. data/test/webunit/test_site/response.html +67 -0
  635. data/test/webunit/test_site/response.html~ +1 -0
  636. data/test/webunit/test_site/simple.cgi +17 -0
  637. data/test/webunit/test_site/simple.cgi~ +17 -0
  638. data/test/webunit/test_site/stock.cgi +36 -0
  639. data/test/webunit/test_site/stock.cgi~ +34 -0
  640. data/test/webunit/test_site/table.html +83 -0
  641. data/test/webunit/test_site/table.html~ +1 -0
  642. data/test/webunit/test_site/test.cgi~ +25 -0
  643. data/test/webunit/test_table.rb +70 -0
  644. data/test/webunit/test_utils.rb +107 -0
  645. data/test/wiki/test.history.rb +277 -0
  646. data/test/wiki/test.history.rb~ +254 -0
  647. data/test/wiki/test.illustration_page.rb +287 -0
  648. data/test/wiki/test.illustration_page.rb~ +287 -0
  649. data/test/wiki/test.linker.rb +197 -0
  650. data/test/wiki/test.tarpit.rb +40 -0
  651. data/test/wiki/test.wiki.rb +295 -0
  652. data/test/wiki/test.wiki.rb~ +295 -0
  653. data/test/wikitestroot/big_image.jpg +0 -0
  654. data/test/wikitestroot/mime.types +483 -0
  655. data/test/wikitestroot/test_upload.gif +0 -0
  656. data/vandals.test.txt +3 -0
  657. metadata +768 -0
@@ -0,0 +1,832 @@
1
+ module TemplateTestEnvironment
2
+ def parse_template io, template , vars , query={}
3
+ templater = Web::Narflates.new(template,query)
4
+ templater.parse(io,vars)
5
+ end
6
+
7
+ def get_test_dir
8
+ File.expand_path(File.join(temp_dir,"test_dir2"))
9
+ end
10
+
11
+ def temp_file filename
12
+ File.expand_path(File.join(get_test_dir,"templates",filename))
13
+ end
14
+
15
+ def write_template contents, filename = "test.html"
16
+ File.open( File.expand_path(File.join(get_test_dir,"templates",filename)) ,"w") { | file | file.write contents }
17
+ end
18
+
19
+ def handle_request cgi, filename = "test.html"
20
+ cgi.print_template( filename, { "var" => cgi["displayVar"] } )
21
+ end
22
+
23
+ def setup_test_dir
24
+ remove_test_dir
25
+ Dir.mkdir(get_test_dir)
26
+ Dir.mkdir(File.expand_path((File.join("#{get_test_dir}","templates"))))
27
+ end
28
+
29
+ def remove_test_dir
30
+ if File.exists? get_test_dir
31
+ File.rm_rf(get_test_dir)
32
+ end
33
+ end
34
+
35
+ def write_file file
36
+ File.open( File.expand_path(File.join("#{get_test_dir}","app.rb")), "w" ) { |f| f.write(file) }
37
+ end
38
+ end
39
+
40
+
41
+ class TestTemplate < Test::Unit::TestCase
42
+ include TemplateTestEnvironment
43
+ include Web::Testing
44
+
45
+ def setup
46
+ Web.set_docroot get_test_dir
47
+ Web.set_cgi( Web::CGI.new() )
48
+ setup_test_dir
49
+ end
50
+
51
+ def teardown
52
+ remove_test_dir
53
+ end
54
+
55
+ def test_append_template_path
56
+
57
+ assert_equal( [Dir.pwd,
58
+ "#{temp_dir}/test_dir2/templates"],
59
+ Web::template_include_path )
60
+
61
+ Web::template_include_path << "/.."
62
+ assert_equal( [Dir.pwd,
63
+ "#{temp_dir}/test_dir2/templates",
64
+ "/.."],
65
+ Web::template_include_path )
66
+ end
67
+
68
+ def test_template_file
69
+ write_template( "here's a test" )
70
+ assert_equal( "#{temp_dir}/test_dir2/templates/test.html",
71
+ Web::Narflates.template_file( "test.html" ) )
72
+ teardown
73
+ setup
74
+
75
+ begin
76
+ File.open( "test.html", "w" ) { |f|
77
+ f.write("here's a test")
78
+ }
79
+ assert_equal( File.join( Dir.pwd, "test.html" ),
80
+ Web::Narflates.template_file( "test.html" ) )
81
+ ensure
82
+ File.delete( "test.html" )
83
+ end
84
+
85
+ end
86
+
87
+ def test_template_dir_precedence
88
+ write_template( "here's a test" )
89
+ begin
90
+ File.open( "test.html", "w" ) { |f|
91
+ f.write("here's a test")
92
+ }
93
+ assert_equal( File.join( Dir.pwd, "test.html" ),
94
+ Web::Narflates.template_file( "test.html" ) )
95
+ ensure
96
+ File.delete( "test.html" )
97
+ end
98
+ end
99
+
100
+ # ========= Variable Resolution ==========
101
+
102
+ def test_print_vars
103
+ mockio = StringIO.new
104
+ template = "x{$foo}y{$bar}z"
105
+ vals = { "foo" => "FOO", "bar" => "BAR" }
106
+
107
+ parse_template(mockio, template, vals)
108
+ assert_equal "xFOOyBARz", mockio.string
109
+ end
110
+
111
+ def test_print_subvars
112
+ mockio = StringIO.new
113
+ template = "x{$foo.a}y{$foo.b}z{$bar}"
114
+
115
+ vals = { "foo" => { "a" => "1", "b" => "2" }, "bar" => "BAR" }
116
+
117
+ parse_template(mockio, template, vals)
118
+ assert_equal "x1y2zBAR", mockio.string
119
+ end
120
+
121
+ def test_throw_exception_if_subvar_doesnt_exist
122
+ mockio = StringIO.new
123
+ template = "x{$foo.a}y{$foo.b}z{$bar}"
124
+
125
+ vals = { "foo" => { "a" => "1" }, "bar" => "BAR" }
126
+
127
+ assert_raises(Web::Scope::VarNotFoundException) {
128
+ parse_template(mockio, template, vals)
129
+ }
130
+ end
131
+
132
+ def test_throw_exception_if_var_doesnt_exist
133
+ mockio = StringIO.new
134
+ template = "x{$foo}y{$bar}z"
135
+ vals = { "foo" => "FOO" }
136
+
137
+ assert_raises(Web::Scope::VarNotFoundException) {
138
+ parse_template(mockio, template, vals)
139
+ }
140
+ end
141
+
142
+ def test_nil_values_display_nothing
143
+ mockio = StringIO.new
144
+ template = "x{$foo}yz"
145
+ vals = { "foo" => nil }
146
+
147
+ parse_template(mockio, template, vals)
148
+ assert_equal "xyz", mockio.string
149
+ end
150
+
151
+
152
+ class TestClass
153
+ attr_reader :var
154
+
155
+ def initialize var
156
+ @var = var
157
+ end
158
+
159
+ def foo
160
+ TestClass.new("XXX")
161
+ end
162
+ end
163
+
164
+ def test_print_method
165
+ mockio = StringIO.new
166
+ template = "x{$foo.var}y{$bar}z"
167
+ vals = { "foo" => TestClass.new("FOO"), "bar" => "BAR" }
168
+
169
+ parse_template(mockio, template, vals)
170
+ assert_equal "xFOOyBARz", mockio.string
171
+ end
172
+
173
+ def test_print_nested_method
174
+ mockio = StringIO.new
175
+ template = "x{$foo.foo.var}y{$bar}z"
176
+ vals = { "foo" => TestClass.new("FOO"), "bar" => "BAR" }
177
+
178
+ parse_template(mockio, template, vals)
179
+ assert_equal "xXXXyBARz", mockio.string
180
+ end
181
+
182
+
183
+ # ========= ForEach ==========
184
+
185
+ def test_foreach
186
+ mockio = StringIO.new
187
+ template = "x<narf:foreach from=arr item=item>y{$item.a}{$item.b}y</narf:foreach>z"
188
+
189
+ vals = { "arr" => [ {"a" => "1", "b" => "2" }, { "a" => "3" , "b" => "4" } ] }
190
+
191
+ parse_template(mockio,template, vals)
192
+ assert_equal "xy12yy34yz", mockio.string
193
+ end
194
+
195
+ def test_foreach_with_empty_array
196
+ mockio = StringIO.new
197
+ template = "x<narf:foreach from=arr item=item>y{$item.a}{$item.b}y</narf:foreach>z"
198
+
199
+ vals = { "arr" => [ ] }
200
+
201
+ parse_template(mockio,template, vals)
202
+ assert_equal "xz", mockio.string
203
+ end
204
+
205
+
206
+ def test_nested_foreach
207
+ mockio = StringIO.new
208
+ template = "x<narf:foreach from=arr item=item><narf:foreach from=arrx item=itemx>{$itemx.b}{$item.a}</narf:foreach></narf:foreach>z"
209
+
210
+ vals = {
211
+ "arr" => [ {"a" => "1" } ] ,
212
+ "arrx" => [ { "b" => "4" } ] }
213
+
214
+ parse_template(mockio,template, vals)
215
+ assert_equal "x41z", mockio.string
216
+ end
217
+
218
+
219
+ def test_foreach_on_foreach
220
+ mockio = StringIO.new
221
+ template = "x<narf:foreach from=arr item=item><narf:foreach from=item.a item=item2>{$item.c}{$item2.b}</narf:foreach></narf:foreach>z"
222
+
223
+ vals = { "arr" => [ {"a" => [ { "b" => "4" } ] , "c" => "1" } ]};
224
+
225
+ parse_template(mockio,template, vals)
226
+ assert_equal "x14z", mockio.string
227
+ end
228
+
229
+
230
+ def test_method_on_foreach
231
+ mockio = StringIO.new
232
+ template = "<narf:foreach from=items item=item>{$item.var}</narf:foreach>"
233
+ vals = { "items" => [ TestClass.new("FOO"), TestClass.new("BAR") ] }
234
+
235
+ parse_template(mockio, template, vals)
236
+ assert_equal "FOOBAR", mockio.string
237
+ end
238
+
239
+ class TestEacher
240
+ include Enumerable
241
+
242
+ def each(&block)
243
+ [{"foo" => "bar"},{"foo" => "bar2"}].each &block
244
+ end
245
+ end
246
+
247
+ def test_foreach_on_object
248
+ mockio = StringIO.new
249
+ template = "<narf:foreach from=items item=item>{$item.foo}</narf:foreach>"
250
+ vals = { "items" => TestEacher.new() }
251
+
252
+ parse_template(mockio, template, vals)
253
+ assert_equal "barbar2", mockio.string
254
+ end
255
+
256
+
257
+ #TODO foo.to_s is default
258
+
259
+ # ========= If ==========
260
+
261
+ def test_if
262
+ mockio = StringIO.new
263
+ template = "x<narf:if condition=a>aa</narf:if><narf:if condition=b>bb</narf:if>z"
264
+ vals = { "a" => true , "b" => false }
265
+
266
+ parse_template(mockio,template, vals)
267
+ assert_equal "xaaz", mockio.string
268
+ end
269
+
270
+ # ========= Unless ==========
271
+
272
+ def test_if
273
+ mockio = StringIO.new
274
+ template = "x<narf:unless condition=a>aa</narf:if><narf:unless condition=b>bb</narf:if>z"
275
+ vals = { "a" => false , "b" => true }
276
+
277
+ parse_template(mockio,template, vals)
278
+ assert_equal "xaaz", mockio.string
279
+ end
280
+
281
+ # ========= Form ==========
282
+
283
+ def test_form
284
+ mockio = StringIO.new
285
+ template = "<narf:form name=\"formname\" method=\"post\">{$item}</narf:form>"
286
+ vals = { "item" => "bar" }
287
+
288
+ parse_template(mockio, template, vals)
289
+ assert_equal "<form name=\"formname\" method=\"post\">"+
290
+ "<input type=\"hidden\" name=\"__submitted\" value=\"formname\">"+
291
+ "bar</form>", mockio.string
292
+ end
293
+
294
+ def test_add_query_to_form
295
+ mockio = StringIO.new
296
+ template = "<narf:form name=\"formname\" method=\"post\">{$item}</narf:form>"
297
+ vals = { "item" => "bar" }
298
+
299
+ parse_template(mockio, template, vals , { "name1" => "value1", "name2" => "value2" })
300
+ assert_equal "<form name=\"formname\" method=\"post\">"+
301
+ "<input type=\"hidden\" name=\"__submitted\" value=\"formname\">"+
302
+ "<input type=\"hidden\" name=\"__q.name1\" value=\"value1\">"+
303
+ "<input type=\"hidden\" name=\"__q.name2\" value=\"value2\">"+
304
+ "bar</form>", mockio.string
305
+ end
306
+
307
+ # ========= Input Box ==========
308
+
309
+ def test_input_box
310
+ mockio = StringIO.new
311
+ write_template "<html><body><form name=\"form\">x<narf:input type=text name=test>y</form></body></html>"
312
+ vals = { "test" => "abc" }
313
+
314
+ header = "Content-Type: text/html\r\nStatus: 200\r\n\r\n"
315
+
316
+ cgi = Web::CGI.new( :out => mockio )
317
+ cgi.print_template( "test.html", vals )
318
+ assert_equal "<html><body><form name=\"form\">x<input type=\"text\" name=\"test\" value=\"abc\">y</form></body></html>", cgi.get_content
319
+ cgi.assert_vars_includes "test" => "abc"
320
+ cgi.assert_form_includes "form" , { "test" => "abc" }
321
+ end
322
+
323
+ def test_input_box_in_form
324
+ mockio = StringIO.new
325
+ write_template "<html><body><form name=\"form\">x<narf:input type=text name=test>y</form></body></html>"
326
+ vals = { "test" => "abc" }
327
+
328
+ header = "Content-Type: text/html\r\nStatus: 200\r\n\r\n"
329
+
330
+ cgi = Web::CGI.new( :out => mockio )
331
+ cgi.print_template( "/test.html", vals )
332
+ assert_equal "<html><body><form name=\"form\">x<input type=\"text\" name=\"test\" value=\"abc\">y</form></body></html>", cgi.get_content
333
+ cgi.assert_vars_includes "test" => "abc"
334
+ cgi.assert_form_includes "form" , { "test" => "abc" }
335
+ end
336
+
337
+ # ========= Text Area ==========
338
+
339
+ def test_textarea
340
+ write_file <<-EOF
341
+ Web.print_template( "<html><body><form name='form1'>x<narf:textarea name=test1>y</form></body></html>", { "test1" => "test" } )
342
+ EOF
343
+ do_request "/app.rb"
344
+ assert_vars_includes "test1" => "test"
345
+ assert_form_includes "form1", { "test1" => "test" }
346
+ end
347
+
348
+ # ========= Hidden ==========
349
+
350
+ def test_hidden
351
+ write_file <<-EOF
352
+ Web.print_template( "<html><body>"+
353
+ " <form name='form1'>x"+
354
+ " <narf:input type=hidden name=test1>y"+
355
+ " </form></body></html>", {
356
+ "test1" => "thisishidden",
357
+ } )
358
+ EOF
359
+ do_request "/app.rb"
360
+ assert_vars_includes "test1" => "thisishidden"
361
+ assert_form_includes "form1", { "test1" => "thisishidden" }
362
+ end
363
+
364
+
365
+ # ========= Password ==========
366
+
367
+ def test_password
368
+ write_file <<-EOF
369
+ Web.print_template( "<html><body>"+
370
+ " <form name='form1'>x"+
371
+ " <narf:input type=password name=test1>y"+
372
+ " </form></body></html>", {
373
+ "test1" => "thisishidden",
374
+ } )
375
+ EOF
376
+ do_request "/app.rb"
377
+ assert_vars_includes "test1" => "thisishidden"
378
+ assert_form_includes "form1", { "test1" => "thisishidden" }
379
+ end
380
+
381
+
382
+ # ========= Checkbox ==========
383
+
384
+ def test_checkbox
385
+ write_file <<-EOF
386
+ Web.print_template( "<html><body>
387
+ <form name='form1'>x
388
+ <narf:input type=checkbox name=test1>y
389
+ <narf:input type=checkbox name=test2>y
390
+ </form></body></html>",
391
+ {
392
+ "test1" => true,
393
+ "test2" => false,
394
+ } )
395
+ EOF
396
+ do_request "/app.rb"
397
+ assert_vars_includes "test1" => true, "test2" => false
398
+ assert_form_includes "form1", { "test1" => true, "test2" => false }
399
+ end
400
+ end
401
+
402
+
403
+ class TestMultiHashTree1 < Test::Unit::TestCase
404
+ include TemplateTestEnvironment
405
+ include Web::Testing
406
+
407
+ def setup
408
+ setup_test_dir
409
+ Web.set_docroot get_test_dir
410
+ end
411
+
412
+ def tear_down
413
+ remove_test_dir
414
+ end
415
+
416
+ def test_hidden_in_loop
417
+ write_file <<-EOF
418
+ Web.print_template( "<html><body>"+
419
+ " <form name=form1>"+
420
+ " <narf:foreach from=items item=item>"+
421
+ " <narf:input type=hidden name=item.test1>"+
422
+ " <narf:input type=hidden name=item.test2>"+
423
+ " </narf:foreach>"+
424
+ "</form></body></html>", {
425
+ "items" => [
426
+ { "test1" => "a", "test2" => "b" },
427
+ { "test1" => "c", "test2" => "d" } ]
428
+ } )
429
+ EOF
430
+ do_request "/app.rb"
431
+
432
+ assert_form_includes("form1",
433
+ { "items" => [{"test1" => "a",
434
+ "test2" => "b" },
435
+ {"test1" => "c",
436
+ "test2" => "d" } ] } )
437
+
438
+ submitted = false
439
+ write_file <<-EOF
440
+ ["a"] == Web.split_params["items"][0]["test1"] || raise("no match")
441
+ ["b"] == Web.split_params["items"][0]["test2"] || raise("no match")
442
+ ["c"] == Web.split_params["items"][1]["test1"] || raise("no match")
443
+ ["d"] == Web.split_params["items"][1]["test2"] || raise("no match")
444
+ EOF
445
+ do_submit "form1"
446
+ end
447
+
448
+
449
+ def test_checkbox_in_loop
450
+ write_file <<-EOF
451
+ Web.print_template( "<html><body>"+
452
+ " <form name='form1'>"+
453
+ " <narf:foreach from=items item=item>"+
454
+ " <narf:input type=checkbox name=item.test1>"+
455
+ " <narf:input type=checkbox name=item.test2>"+
456
+ " </narf:foreach>"+
457
+ "</form></body></html>", {
458
+ "items" => [
459
+ { "test1" => true, "test2" => false },
460
+ { "test1" => false, "test2" => true } ]
461
+ } )
462
+ EOF
463
+ do_request "/app.rb"
464
+
465
+ assert /name=\"items\[0\].test1\"/ =~ Web.get_cgi.get_content
466
+ assert /name=\"items\[0\].test2\"/ =~ Web.get_cgi.get_content
467
+ assert /name=\"items\[1\].test1\"/ =~ Web.get_cgi.get_content
468
+ assert /name=\"items\[1\].test2\"/ =~ Web.get_cgi.get_content
469
+
470
+ assert_form_includes "form1", { "items" => [
471
+ { "test1" => true, "test2" => false },
472
+ { "test1" => false, "test2" => true } ] }
473
+
474
+ write_file <<-EOF
475
+ [true] == Web.split_params["items"][0]["test1"] || raise("no match1")
476
+ nil == Web.split_params["items"][0]["test2"] || raise("no match2")
477
+ nil == Web.split_params["items"][1]["test1"] || raise("no match3")
478
+ [true] == Web.split_params["items"][1]["test2"] || raise("no match4")
479
+ EOF
480
+ do_submit "form1", {}
481
+ end
482
+
483
+ def test_other_fields_in_loop
484
+ write_file <<-EOF
485
+ Web.print_template( "<html><body>"+
486
+ " <form name='form1'>"+
487
+ " <input type='hidden' name='action' value='submit'>"+
488
+ " <narf:foreach from=items item=item>"+
489
+ " <narf:input type=text name=item.test1>"+
490
+ " <narf:input type=hidden name=item.test2>"+
491
+ " </narf:foreach>"+
492
+ "</form></body></html>", {
493
+ "items" => [
494
+ { "test1" => true, "test2" => false },
495
+ { "test1" => false, "test2" => true } ]
496
+ } )
497
+ EOF
498
+ do_request "/app.rb"
499
+
500
+ assert /name=\"items\[0\].test1\"/ =~ Web.get_content
501
+ assert /name=\"items\[0\].test2\"/ =~ Web.get_content
502
+ assert /name=\"items\[1\].test1\"/ =~ Web.get_content
503
+ assert /name=\"items\[1\].test2\"/ =~ Web.get_content
504
+ end
505
+
506
+ # ###
507
+ # this is a problem I need to think about.
508
+ # this is a use of checkboxes to represent boolean
509
+ # values, which isn't supported very well at the moment.
510
+ # ~ patrick
511
+ def think_about_this_test_checkbox_in_loop_submit
512
+ write_file <<-EOF
513
+ Web.print_template( "<html><body>
514
+ <form name='form1'>
515
+ <input type='hidden' name='action' value='submit'>
516
+ <narf:foreach from=items item=item>
517
+ <narf:input type=checkbox name=item.test1>
518
+ <narf:input type=checkbox name=item.test2>
519
+ </narf:foreach>
520
+ </form></body></html>", {
521
+ "items" => [
522
+ { "test1" => true, "test2" => false },
523
+ { "test1" => false, "test2" => true } ]
524
+ } )
525
+ EOF
526
+
527
+ do_request "/app.rb"
528
+
529
+ Kernel.puts Web.get_content
530
+ write_file <<-EOF
531
+ false == Web.split_params["items"][0]["test1"] || raise("no match 1")
532
+ true == Web.split_params["items"][0]["test2"] || raise("no match 2")
533
+ true == Web.split_params["items"][1]["test1"] || raise("no match 3")
534
+ true == Web.split_params["items"][1]["test2"] || raise("no match 4")
535
+ EOF
536
+
537
+ do_submit( "form1", {"items[0].test1" => false,
538
+ "items[0].test2" => true,
539
+ "items[1].test1" => true, } )
540
+ end
541
+
542
+
543
+ def test_double_nested_checkbox_in_loop
544
+ write_file <<-EOF
545
+ Web.print_template( "<html><body>"+
546
+ " <form name='form1'>"+
547
+ " <narf:foreach from=itemsouter item=itemouter>"+
548
+ " <narf:foreach from=itemouter.itemsinner item=iteminner>"+
549
+ " <narf:input type=checkbox name=iteminner.test1>"+
550
+ " </narf:foreach>"+
551
+ " </narf:foreach>"+
552
+ " </form></body></html>", {
553
+ "itemsouter" => [
554
+ { "itemsinner" => [
555
+ "test1"=>"value" ] } ] }
556
+ )
557
+ EOF
558
+ do_request "/app.rb"
559
+ assert /name=\"itemsouter\[0\].itemsinner\[0\].test1\"/ =~ Web.get_content
560
+ end
561
+
562
+ def test_select_box
563
+ mockio = StringIO.new
564
+ write_template "<html><body><form name=\"form\">x<narf:select name=test values=options>y</form></body></html>"
565
+ vals = { "test" => "value2",
566
+ "options" => [ { "name" => "name1", "value" => "value1" },
567
+ { "name" => "name2", "value" => "value2" } ] }
568
+
569
+ cgi = Web::CGI.new( :out => mockio )
570
+ cgi.print_template( "/test.html", vals )
571
+ string = "<html><body><form name=\"form\">x<select name=\"test\">" +
572
+ "<option value=\"value1\">name1</option>"+
573
+ "<option value=\"value2\" selected>name2</option>"+
574
+ "</select>y"+
575
+ "</form></body></html>"
576
+
577
+ assert_equal string, cgi.get_content
578
+ assert_equal ["value2"], cgi.get_form_value( "form","test" )
579
+ end
580
+
581
+ def test_select_box_converts_to_strings
582
+ #--- first, one side of the problem...
583
+
584
+ mockio = StringIO.new
585
+ write_template "<html><body><form name=\"form\">x<narf:select name=test values=options>y</form></body></html>"
586
+ vals = { "test" => 2,
587
+ "options" => [ { "name" => "name1", "value" => "1" },
588
+ { "name" => "name2", "value" => "2" } ] }
589
+
590
+ header = "Content-Type: text/html\r\nStatus: 200\r\n\r\n"
591
+
592
+ cgi = Web::CGI.new( :out => mockio )
593
+ cgi.print_template( "/test.html", vals )
594
+ string = "<html><body><form name=\"form\">x<select name=\"test\">" +
595
+ "<option value=\"1\">name1</option>"+
596
+ "<option value=\"2\" selected>name2</option>"+
597
+ "</select>y"+
598
+ "</form></body></html>"
599
+
600
+ assert_equal string, cgi.get_content
601
+ assert_equal ["2"], cgi.get_form_value( "form","test" )
602
+
603
+ #--- now the other
604
+
605
+ mockio = StringIO.new
606
+ write_template "<html><body><form name=\"form\">x<narf:select name=test values=options>y</form></body></html>"
607
+ vals = { "test" => "2",
608
+ "options" => [ { "name" => "name1", "value" => 1 },
609
+ { "name" => "name2", "value" => 2 } ] }
610
+
611
+ header = "Content-Type: text/html\r\nStatus: 200\r\n\r\n"
612
+
613
+ cgi = Web::CGI.new( :out => mockio )
614
+ cgi.print_template( "/test.html", vals )
615
+ string = "<html><body><form name=\"form\">x<select name=\"test\">" +
616
+ "<option value=\"1\">name1</option>"+
617
+ "<option value=\"2\" selected>name2</option>"+
618
+ "</select>y"+
619
+ "</form></body></html>"
620
+
621
+ assert_equal string, cgi.get_content
622
+ assert_equal ["2"], cgi.get_form_value( "form","test" )
623
+
624
+ end
625
+
626
+
627
+ def test_select_box_from_array
628
+ mockio = StringIO.new
629
+ write_template "<html><body><form name=\"form\">x<narf:select name=test values=options>y</form></body></html>"
630
+ vals = { "test" => "value2",
631
+ "options" => [ "value1", "value2" ] }
632
+
633
+ header = "Content-Type: text/html\r\nStatus: 200\r\n\r\n"
634
+
635
+ cgi = Web::CGI.new( :out => mockio )
636
+ cgi.print_template( "/test.html", vals )
637
+ string = "<html><body><form name=\"form\">x<select name=\"test\">" +
638
+ "<option value=\"value1\">value1</option>"+
639
+ "<option value=\"value2\" selected>value2</option>"+
640
+ "</select>y"+
641
+ "</form></body></html>"
642
+
643
+ assert_equal string, cgi.get_content
644
+ assert_equal ["value2"], cgi.get_form_value( "form","test" )
645
+ end
646
+
647
+
648
+
649
+
650
+ def test_get_elements
651
+ p = HTMLTree::Parser.new(true, false)
652
+ p.feed('<html><head></head><body><form method=get name=test></form></body></html>')
653
+ assert_equal("test",p.html.get_elements("form")[0].attribute("name"))
654
+ end
655
+
656
+ def test_template
657
+ write_template "<html><body><h1>{$var}</h1></body></html>"
658
+ Web.process(:params => {"displayVar" => "foo"}, :out => ""){ |cgi|
659
+ handle_request cgi
660
+ cgi.assert_template_used( "test.html" )
661
+ cgi.assert_vars_includes({ "var" => "foo" })
662
+ }
663
+ end
664
+
665
+ def test_exception_thrown_if_no_template_used
666
+ write_template "<html><body><h1>{$var}</h1></body></html>"
667
+ Web.process(:params => {"displayVar" => "foo"}, :out => ""){ |cgi|
668
+ assert_raises(Web::TemplateException) {
669
+ cgi.assert_template_used( "/test.html" )
670
+ }
671
+ }
672
+ end
673
+
674
+ def test_template_fails_assertion_with_wrong_template
675
+ write_template "<html><body><h1>{$var}</h1></body></html>"
676
+
677
+ Web.process(:out => "", :params => {"displayVar" => "bar"}){ |cgi|
678
+ handle_request cgi
679
+
680
+ assert_raises (Test::Unit::AssertionFailedError) {
681
+ cgi.assert_template_used( "test_not_it.html" )
682
+ }
683
+
684
+ assert_raises (Test::Unit::AssertionFailedError) {
685
+ cgi.assert_vars_includes({ "var" => "foo" })
686
+ }
687
+ }
688
+ end
689
+
690
+ def test_assert_template_not_used
691
+ write_template "<html><body><h1>{$var}</h1></body></html>"
692
+ Web.process(:params => {"displayVar" => "foo"}, :out => ""){ |cgi|
693
+ handle_request cgi
694
+ cgi.assert_template_not_used( "foo.html" )
695
+ }
696
+ end
697
+
698
+ def test_assert_template_not_used_exception_thrown_if_template_used
699
+ write_template "<html><body><h1>{$var}</h1></body></html>"
700
+ Web.process(:params => {"displayVar" => "foo"}, :out => ""){ |cgi|
701
+ assert_raises(Test::Unit::AssertionFailedError) {
702
+ handle_request cgi
703
+ cgi.assert_template_not_used( "test.html" )
704
+ }
705
+ }
706
+ end
707
+
708
+ def test_print_template_uses_empty_hash_by_default
709
+ write_template "blah blah blah"
710
+ Web.process( :out => "" ) { |cgi|
711
+ cgi.print_template "test.html"
712
+ }.assert_content "blah blah blah"
713
+ end
714
+
715
+ def test_print_template_survives_enormous_templates
716
+ bad_template = ""
717
+
718
+ 1.upto(1000){ |i|
719
+ bad_template += "this template sucks\n"
720
+ }
721
+
722
+ Web.process( :out => "" ) { |cgi|
723
+ cgi.print_template bad_template
724
+ }.assert_content bad_template
725
+ end
726
+ end
727
+
728
+
729
+ class TestIncludes < Test::Unit::TestCase
730
+ include TemplateTestEnvironment
731
+ include Web::Testing
732
+
733
+ def setup
734
+ Web.set_docroot get_test_dir
735
+ setup_test_dir
736
+ end
737
+
738
+ def teardown
739
+ remove_test_dir
740
+ end
741
+
742
+
743
+ def test_include_prints_contents
744
+ write_template "<html><body><narf:include file=\"incfile.html\"></body></html>" , "test.html"
745
+ write_template "<h1>Hello</h1>", "incfile.html"
746
+
747
+ write_file <<-EOF
748
+ Web.print_template( "test.html", {} )
749
+ EOF
750
+
751
+ do_request "/app.rb"
752
+ Web.assert_content "<html><body><h1>Hello</h1></body></html>"
753
+ end
754
+
755
+ def test_assert_template_used_works_for_included_templates
756
+ write_template "<html><body><narf:include file=\"incfile.html\" vars=foo></body></html>" , "test.html"
757
+ write_template "<h1>{$name}</h1>", "incfile.html"
758
+
759
+ write_file <<-EOF
760
+ Web.print_template( "test.html" , { "foo" => { "name" => "bar" }} )
761
+ EOF
762
+
763
+ do_request "/app.rb"
764
+ Web.assert_content "<html><body><h1>bar</h1></body></html>"
765
+
766
+ Web.assert_template_used 'test.html'
767
+ Web.assert_template_used 'incfile.html'
768
+ end
769
+
770
+ def todo_assert_template_used_works_for_multiple_print_template_calls
771
+
772
+ end
773
+
774
+ def test_included_vars_are_evaluated
775
+ write_template "<html><body><narf:include file=\"#{ 'incfile.html' }\" vars=foo></body></html>" , "test.html"
776
+ write_template "<h1>{$name}</h1>", "incfile.html"
777
+
778
+ write_file <<-EOF
779
+ Web.print_template( "test.html" , { "foo" => { "name" => "bar" }} )
780
+ EOF
781
+
782
+ do_request "/app.rb"
783
+ Web.assert_content "<html><body><h1>bar</h1></body></html>"
784
+ end
785
+
786
+ def test_checks_included_then_global_vars
787
+ write_template "<html><body><narf:include file=\"#{ 'incfile.html' }\"></body></html>" , "test.html"
788
+ write_template "<h1>{$foo.name}</h1>", "incfile.html"
789
+
790
+ write_file <<-EOF
791
+ Web.print_template( "test.html" , { "foo" => { "name" => "bar" }} )
792
+ EOF
793
+
794
+ Web.assert_content "<html><body><h1>bar</h1></body></html>"
795
+ end
796
+
797
+ def test_exception_thrown_if_template_doesnt_exist
798
+ write_template "<html><body><narf:include file=\"#{ 'nonexistant.html' }\"></body></html>" , "test.html"
799
+
800
+ write_file <<-EOF
801
+ exceptionThrown = false
802
+ begin
803
+ Web.print_template( "test.html" , { "foo" => { "name" => "bar" }} )
804
+ rescue Object
805
+ exceptionThrown = true
806
+ end
807
+ raise "error" if !exceptionThrown
808
+ EOF
809
+
810
+ do_request "/app.rb"
811
+ end
812
+
813
+ def test_load_filename_from_var
814
+ write_template "<html><body><narf:include file=$incfile></body></html>" , "test.html"
815
+ write_template "<h1>{$foo.name}</h1>", "incfile.html"
816
+
817
+ write_file <<-EOF
818
+ Web.print_template( "test.html" ,
819
+ { "foo" => { "name" => "bar" }, "incfile" => "incfile.html" })
820
+ EOF
821
+
822
+ do_request "/app.rb"
823
+ Web.assert_content "<html><body><h1>bar</h1></body></html>"
824
+ end
825
+ end
826
+
827
+
828
+ # TODO:
829
+ # add the ability to output the widgets manually
830
+ # add the ability to define your own widgets
831
+ # make sure you can't select an option that isn't in the option list
832
+ # handle queries in an include