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,50 @@
1
+ class TestSession < Test::Unit::TestCase
2
+ def test_session_ids_are_uniq
3
+ assert_equal( 1000, Array.new( 1000 ).collect {
4
+ Web::Session.create_id
5
+ }.uniq.length )
6
+ end
7
+
8
+ def test_set_value_on_session
9
+ cgi = Web::CGI.new( :out => "" )
10
+ cgi.session["testvar"] = "test"
11
+ assert_equal( "test", cgi.session["testvar"] )
12
+ end
13
+
14
+ def test_session_end_to_end
15
+ cgi = Web::CGI.new( :out => "" )
16
+ cgi.session["key"] = ["value"]
17
+ session_id = cgi.cookies_sent["_session_id"]
18
+
19
+ Web::CGI.new( :out => "", :cookies => { "_session_id", session_id } )
20
+
21
+ assert_equal( ["value"], cgi.session["key"] )
22
+ end
23
+
24
+ def test_clear_session
25
+ cgi = Web::CGI.new( :out => "" )
26
+ cgi.session["aKey"] = "aValue"
27
+ cgi.close
28
+
29
+ session_id = cgi.cookies_sent["_session_id"]
30
+ Web::CGI.new( :out => "", :cookies => { "_session_id", session_id } )
31
+
32
+ cgi.session.reset
33
+ assert_nil( cgi.session["aKey"] )
34
+ end
35
+
36
+ def test_can_iterate_over_session
37
+ cgi = Web::CGI.new( :out => "" )
38
+ cgi.session["aKey"] = "1"
39
+ cgi.session["aKey2"] = "2"
40
+ cgi.close
41
+
42
+ values = []
43
+ cgi.session.each do |i,j|
44
+ values << j
45
+ end
46
+ assert_equal [ "1" , "2" ], values
47
+ end
48
+ end
49
+
50
+
@@ -0,0 +1,188 @@
1
+ class AForm
2
+ end
3
+
4
+ class TestLink < Test::Unit::TestCase
5
+ def test_empty_query
6
+ string = Web::SimpleDispatcher::Link.new( AForm, { "name1" => "value1", "name2" => "value2" } ).encode
7
+ assert_equal "String", string.class.name
8
+ params = Web::CGI.new(:params => {"link" => string, "link-type" => "Web::SimpleDispatcher::Link"}).typed_params
9
+ assert_equal AForm, params["link"].page
10
+ assert_equal({ "name1" => "value1", "name2" => "value2" },params["link"].query)
11
+ end
12
+ end
13
+
14
+ class MyForm1 < Web::SimpleDispatcher::Template
15
+ def initialize query
16
+ end
17
+ end
18
+
19
+ class MyForm2 < Web::SimpleDispatcher::Template
20
+ def initialize query
21
+ Web.puts "form2"
22
+ end
23
+ end
24
+
25
+ class MyForm3 < Web::SimpleDispatcher::Template
26
+ attr_accessor :var
27
+
28
+ def initialize query
29
+ @var = "hello world"
30
+ end
31
+ end
32
+
33
+ class MyForm4 < Web::SimpleDispatcher::Template
34
+ attr_accessor :var
35
+
36
+ def initialize query
37
+ @var = "hello world"
38
+ end
39
+
40
+ def on_submit form_values
41
+ @var = "goodbye world"
42
+ end
43
+ end
44
+
45
+ class MyForm5 < Web::SimpleDispatcher::Template
46
+ attr_accessor :var
47
+
48
+ def initialize query
49
+ @var = "hello world"
50
+ end
51
+
52
+ def on_submit form_values
53
+ Web.puts @var
54
+ end
55
+ end
56
+
57
+ class MyForm6 < Web::SimpleDispatcher::Template
58
+ attr_accessor :var
59
+
60
+ def initialize query
61
+ @var = "hello world"
62
+ end
63
+
64
+ def on_submit form_values
65
+ Web.puts @var
66
+
67
+ redirect_to_template MyForm7, "var" => "xxxx"
68
+ end
69
+ end
70
+
71
+ class MyForm7 < Web::SimpleDispatcher::Template
72
+ def initialize query
73
+ Web << query["var"]
74
+ end
75
+ end
76
+
77
+ class TestLinkTemplate < Web::SimpleDispatcher::Template
78
+ attr_accessor :alink
79
+
80
+ def initialize query
81
+ @alink = Web::SimpleDispatcher::Link.new( MyForm1 , { "a" => "1", "b" => "2" } )
82
+ end
83
+ end
84
+
85
+
86
+ class TestForm < Test::Unit::TestCase
87
+ include Web::Testing
88
+ require 'ftools'
89
+ def setup
90
+ if File.exists?( temp_dir + "/test_dir/" )
91
+ File.rm_rf( temp_dir + "/test_dir")
92
+ end
93
+ Dir.mkdir(temp_dir + "/test_dir/")
94
+ Dir.mkdir(temp_dir + "/test_dir/templates")
95
+ Web.set_docroot(temp_dir + "/test_dir/")
96
+ end
97
+
98
+ def teardown
99
+ File.rm_rf( temp_dir + "/test_dir")
100
+ end
101
+
102
+ def test_displays_template
103
+ # create a file system to put the files in
104
+ file = "Web::SimpleDispatcher.handle_request( :default => MyForm1 )"
105
+ File.open( temp_dir + "/test_dir/app.rb" , "w" ) { |f| f.write(file) }
106
+ file = "<html><body>{$var}</body></html>"
107
+ File.open( temp_dir + "/test_dir/templates/my_form3.html" , "w" ) { |f| f.write(file) }
108
+ do_request( "/app.rb/my_form3" )
109
+ assert_content "<html><body>hello world</body></html>"
110
+ end
111
+
112
+ def test_displays_default_template
113
+ # create a file system to put the files in
114
+ file = "Web::SimpleDispatcher.handle_request( :default => MyForm1 )"
115
+ File.open( temp_dir + "/test_dir/app.rb" , "w" ) { |f| f.write(file) }
116
+ file = "<html><body>default</body></html>"
117
+ File.open( temp_dir + "/test_dir/templates/my_form1.html" , "w" ) { |f| f.write(file) }
118
+ do_request( "/app.rb" )
119
+ assert_content "<html><body>default</body></html>"
120
+
121
+ # and with a trailing slash
122
+ do_request( "/app.rb/" )
123
+ assert_content "<html><body>default</body></html>"
124
+
125
+ # and check that we are there because of a redirect
126
+ assert_equal "/my_form1", Web.path_info
127
+ end
128
+
129
+ def test_displays_default_template_with_trailing_slash
130
+ # create a file system to put the files in
131
+ file = "Web::SimpleDispatcher.handle_request( :default => MyForm1 )"
132
+ File.open( temp_dir + "/test_dir/app.rb" , "w" ) { |f| f.write(file) }
133
+ file = "<html><body>default</body></html>"
134
+ File.open( temp_dir + "/test_dir/templates/my_form1.html" , "w" ) { |f| f.write(file) }
135
+ end
136
+
137
+ def test_handle_submit
138
+ file = "Web::SimpleDispatcher.handle_request( :default => MyForm1 )"
139
+ File.open( temp_dir + "/test_dir/app.rb" , "w" ) { |f| f.write(file) }
140
+ file = "<html><body>{$var}<narf:form name=\"f\"><input type=submit></narf:form></body></html>"
141
+ File.open( temp_dir + "/test_dir/templates/my_form4.html" , "w" ) { |f| f.write(file) }
142
+ do_request( "/app.rb/my_form4" )
143
+
144
+ do_submit( "f" , {})
145
+ assert_content "<html><body>goodbye world<form name=\"f\" method=\"\"><input type=\"hidden\" name=\"__submitted\" value=\"f\"><input type=submit></form></body></html>"
146
+ end
147
+
148
+ def test_submit_template_gets_updated
149
+ file = "Web::SimpleDispatcher.handle_request( :default => MyForm1 )"
150
+ File.open( temp_dir + "/test_dir/app.rb" , "w" ) { |f| f.write(file) }
151
+ file = "<html><body>{$var}<narf:form name=f>"+
152
+ "<narf:input type=text name=var></narf:form></body></html>"
153
+ File.open( temp_dir + "/test_dir/templates/my_form5.html" , "w" ) { |f| f.write(file) }
154
+ do_request "/app.rb/my_form5"
155
+ do_submit "f" , "var" => "newvalue"
156
+ assert_content "newvalue\n<html><body>newvalue"+
157
+ "<form name=\"f\" method=\"\"><input type=\"hidden\" name=\"__submitted\" value=\"f\">"+
158
+ "<input type=\"text\" name=\"var\" value=\"newvalue\"></form></body></html>"
159
+ end
160
+
161
+ def test_redirect_to_new_location
162
+ file = "Web::SimpleDispatcher.handle_request( :default => MyForm1 )"
163
+ File.open( temp_dir + "/test_dir/app.rb" , "w" ) { |f| f.write(file) }
164
+ file = "<html><body>{$var}<narf:form name=f>"+
165
+ "<narf:input type=text name=var></narf:form></body></html>"
166
+ File.open( temp_dir + "/test_dir/templates/my_form6.html" , "w" ) { |f| f.write(file) }
167
+
168
+ file = ""
169
+ File.open( temp_dir + "/test_dir/templates/my_form7.html" , "w" ) { |f| f.write(file) }
170
+
171
+ do_request "/app.rb/my_form6"
172
+
173
+ do_submit "f" , "var" => "newvalue"
174
+ assert_content "xxxx"
175
+ end
176
+
177
+ def test_display_link
178
+ file = "Web::SimpleDispatcher.handle_request( :default => MyForm1 )"
179
+ File.open( temp_dir + "/test_dir/app.rb" , "w" ) { |f| f.write(file) }
180
+
181
+ file = "<html><body><narf:link value=\"alink\">Link Text</narf:link></body></html>"
182
+ File.open( temp_dir + "/test_dir/templates/test_link_template.html" , "w" ) { |f| f.write(file) }
183
+
184
+ do_request( "/app.rb/test_link_template" )
185
+
186
+ assert_content "<html><body><a href=\"my_form1?a=1&b=2\">Link Text</a></body></html>"
187
+ end
188
+ end
@@ -0,0 +1,65 @@
1
+ class TestAttributeParser < Test::Unit::TestCase
2
+ def test_test_no_attributes
3
+ block_used = false
4
+ StrScanParser.new(StringScanner.new("<narf:name>")).match_tag { |tag|
5
+ assert_equal( "name", tag.name )
6
+ assert_equal( {}, tag.attributes )
7
+ block_used = true
8
+ }
9
+ assert block_used
10
+ end
11
+
12
+ def test_test_one_attribute
13
+ block_used = false
14
+ StrScanParser.new(StringScanner.new("<narf:name foo=bar>")).match_tag { |tag|
15
+ assert_equal( "name", tag.name )
16
+ assert_equal( { "foo" => "bar" }, tag.attributes )
17
+ block_used = true
18
+ }
19
+ assert block_used
20
+ end
21
+
22
+ def test_quoted_value
23
+ block_used = false
24
+ StrScanParser.new(StringScanner.new("<narf:name foo=\"bar x\">")).match_tag{ |tag|
25
+ assert_equal( "name", tag.name )
26
+ assert_equal( { "foo" => "bar x" }, tag.attributes )
27
+ block_used = true
28
+ }
29
+ assert block_used
30
+ end
31
+
32
+ def test_test_two_attributes
33
+ block_used = false
34
+ StrScanParser.new(StringScanner.new("<narf:name foo=bar x=y>")).match_tag{|tag|
35
+ assert_equal( "name", tag.name )
36
+ assert_equal( { "foo" => "bar", "x" => "y" }, tag.attributes )
37
+ block_used = true
38
+ }
39
+ assert block_used
40
+ end
41
+
42
+ def test_test_unclosed_tag
43
+ assert_raises(TagNotClosedException) {
44
+ StrScanParser.new(StringScanner.new("<narf:name foo=bar x=y")).match_tag {}
45
+ }
46
+ end
47
+
48
+ def test_test_no_tag_name
49
+ assert_raises(TagNotNamedException) {
50
+ StrScanParser.new(StringScanner.new("<narf: name foo=bar x=y")).match_tag {}
51
+ }
52
+ end
53
+
54
+ def test_missing_attribute_value
55
+ assert_raises(MissingAttributeException) {
56
+ StrScanParser.new(StringScanner.new("<narf:name foo=")).match_tag {}
57
+ }
58
+ end
59
+
60
+ def test_missing_quote
61
+ assert_raises(MissingQuoteException) {
62
+ StrScanParser.new(StringScanner.new("<narf:name foo=\"foo}")).match_tag {}
63
+ }
64
+ end
65
+ end
@@ -0,0 +1,831 @@
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
+ assert_equal( [Dir.pwd,
57
+ "#{temp_dir}/test_dir2/templates"],
58
+ Web::template_include_path )
59
+
60
+ Web::template_include_path << "/.."
61
+ assert_equal( [Dir.pwd,
62
+ "#{temp_dir}/test_dir2/templates",
63
+ "/.."],
64
+ Web::template_include_path )
65
+ end
66
+
67
+ def test_template_file
68
+ write_template( "here's a test" )
69
+ assert_equal( "#{temp_dir}/test_dir2/templates/test.html",
70
+ Web::Narflates.template_file( "test.html" ) )
71
+ teardown
72
+ setup
73
+
74
+ begin
75
+ File.open( "test.html", "w" ) { |f|
76
+ f.write("here's a test")
77
+ }
78
+ assert_equal( File.join( Dir.pwd, "test.html" ),
79
+ Web::Narflates.template_file( "test.html" ) )
80
+ ensure
81
+ File.delete( "test.html" )
82
+ end
83
+
84
+ end
85
+
86
+ def test_template_dir_precedence
87
+ write_template( "here's a test" )
88
+ begin
89
+ File.open( "test.html", "w" ) { |f|
90
+ f.write("here's a test")
91
+ }
92
+ assert_equal( File.join( Dir.pwd, "test.html" ),
93
+ Web::Narflates.template_file( "test.html" ) )
94
+ ensure
95
+ File.delete( "test.html" )
96
+ end
97
+ end
98
+
99
+ # ========= Variable Resolution ==========
100
+
101
+ def test_print_vars
102
+ mockio = StringIO.new
103
+ template = "x{$foo}y{$bar}z"
104
+ vals = { "foo" => "FOO", "bar" => "BAR" }
105
+
106
+ parse_template(mockio, template, vals)
107
+ assert_equal "xFOOyBARz", mockio.string
108
+ end
109
+
110
+ def test_print_subvars
111
+ mockio = StringIO.new
112
+ template = "x{$foo.a}y{$foo.b}z{$bar}"
113
+
114
+ vals = { "foo" => { "a" => "1", "b" => "2" }, "bar" => "BAR" }
115
+
116
+ parse_template(mockio, template, vals)
117
+ assert_equal "x1y2zBAR", mockio.string
118
+ end
119
+
120
+ def test_throw_exception_if_subvar_doesnt_exist
121
+ mockio = StringIO.new
122
+ template = "x{$foo.a}y{$foo.b}z{$bar}"
123
+
124
+ vals = { "foo" => { "a" => "1" }, "bar" => "BAR" }
125
+
126
+ assert_raises(Web::Scope::VarNotFoundException) {
127
+ parse_template(mockio, template, vals)
128
+ }
129
+ end
130
+
131
+ def test_throw_exception_if_var_doesnt_exist
132
+ mockio = StringIO.new
133
+ template = "x{$foo}y{$bar}z"
134
+ vals = { "foo" => "FOO" }
135
+
136
+ assert_raises(Web::Scope::VarNotFoundException) {
137
+ parse_template(mockio, template, vals)
138
+ }
139
+ end
140
+
141
+ def test_nil_values_display_nothing
142
+ mockio = StringIO.new
143
+ template = "x{$foo}yz"
144
+ vals = { "foo" => nil }
145
+
146
+ parse_template(mockio, template, vals)
147
+ assert_equal "xyz", mockio.string
148
+ end
149
+
150
+
151
+ class TestClass
152
+ attr_reader :var
153
+
154
+ def initialize var
155
+ @var = var
156
+ end
157
+
158
+ def foo
159
+ TestClass.new("XXX")
160
+ end
161
+ end
162
+
163
+ def test_print_method
164
+ mockio = StringIO.new
165
+ template = "x{$foo.var}y{$bar}z"
166
+ vals = { "foo" => TestClass.new("FOO"), "bar" => "BAR" }
167
+
168
+ parse_template(mockio, template, vals)
169
+ assert_equal "xFOOyBARz", mockio.string
170
+ end
171
+
172
+ def test_print_nested_method
173
+ mockio = StringIO.new
174
+ template = "x{$foo.foo.var}y{$bar}z"
175
+ vals = { "foo" => TestClass.new("FOO"), "bar" => "BAR" }
176
+
177
+ parse_template(mockio, template, vals)
178
+ assert_equal "xXXXyBARz", mockio.string
179
+ end
180
+
181
+
182
+ # ========= ForEach ==========
183
+
184
+ def test_foreach
185
+ mockio = StringIO.new
186
+ template = "x<narf:foreach from=arr item=item>y{$item.a}{$item.b}y</narf:foreach>z"
187
+
188
+ vals = { "arr" => [ {"a" => "1", "b" => "2" }, { "a" => "3" , "b" => "4" } ] }
189
+
190
+ parse_template(mockio,template, vals)
191
+ assert_equal "xy12yy34yz", mockio.string
192
+ end
193
+
194
+ def test_foreach_with_empty_array
195
+ mockio = StringIO.new
196
+ template = "x<narf:foreach from=arr item=item>y{$item.a}{$item.b}y</narf:foreach>z"
197
+
198
+ vals = { "arr" => [ ] }
199
+
200
+ parse_template(mockio,template, vals)
201
+ assert_equal "xz", mockio.string
202
+ end
203
+
204
+
205
+ def test_nested_foreach
206
+ mockio = StringIO.new
207
+ template = "x<narf:foreach from=arr item=item><narf:foreach from=arrx item=itemx>{$itemx.b}{$item.a}</narf:foreach></narf:foreach>z"
208
+
209
+ vals = {
210
+ "arr" => [ {"a" => "1" } ] ,
211
+ "arrx" => [ { "b" => "4" } ] }
212
+
213
+ parse_template(mockio,template, vals)
214
+ assert_equal "x41z", mockio.string
215
+ end
216
+
217
+
218
+ def test_foreach_on_foreach
219
+ mockio = StringIO.new
220
+ template = "x<narf:foreach from=arr item=item><narf:foreach from=item.a item=item2>{$item.c}{$item2.b}</narf:foreach></narf:foreach>z"
221
+
222
+ vals = { "arr" => [ {"a" => [ { "b" => "4" } ] , "c" => "1" } ]};
223
+
224
+ parse_template(mockio,template, vals)
225
+ assert_equal "x14z", mockio.string
226
+ end
227
+
228
+
229
+ def test_method_on_foreach
230
+ mockio = StringIO.new
231
+ template = "<narf:foreach from=items item=item>{$item.var}</narf:foreach>"
232
+ vals = { "items" => [ TestClass.new("FOO"), TestClass.new("BAR") ] }
233
+
234
+ parse_template(mockio, template, vals)
235
+ assert_equal "FOOBAR", mockio.string
236
+ end
237
+
238
+ class TestEacher
239
+ include Enumerable
240
+
241
+ def each(&block)
242
+ [{"foo" => "bar"},{"foo" => "bar2"}].each &block
243
+ end
244
+ end
245
+
246
+ def test_foreach_on_object
247
+ mockio = StringIO.new
248
+ template = "<narf:foreach from=items item=item>{$item.foo}</narf:foreach>"
249
+ vals = { "items" => TestEacher.new() }
250
+
251
+ parse_template(mockio, template, vals)
252
+ assert_equal "barbar2", mockio.string
253
+ end
254
+
255
+
256
+ #TODO foo.to_s is default
257
+
258
+ # ========= If ==========
259
+
260
+ def test_if
261
+ mockio = StringIO.new
262
+ template = "x<narf:if condition=a>aa</narf:if><narf:if condition=b>bb</narf:if>z"
263
+ vals = { "a" => true , "b" => false }
264
+
265
+ parse_template(mockio,template, vals)
266
+ assert_equal "xaaz", mockio.string
267
+ end
268
+
269
+ # ========= Unless ==========
270
+
271
+ def test_if
272
+ mockio = StringIO.new
273
+ template = "x<narf:unless condition=a>aa</narf:if><narf:unless condition=b>bb</narf:if>z"
274
+ vals = { "a" => false , "b" => true }
275
+
276
+ parse_template(mockio,template, vals)
277
+ assert_equal "xaaz", mockio.string
278
+ end
279
+
280
+ # ========= Form ==========
281
+
282
+ def test_form
283
+ mockio = StringIO.new
284
+ template = "<narf:form name=\"formname\" method=\"post\">{$item}</narf:form>"
285
+ vals = { "item" => "bar" }
286
+
287
+ parse_template(mockio, template, vals)
288
+ assert_equal "<form name=\"formname\" method=\"post\">"+
289
+ "<input type=\"hidden\" name=\"__submitted\" value=\"formname\">"+
290
+ "bar</form>", mockio.string
291
+ end
292
+
293
+ def test_add_query_to_form
294
+ mockio = StringIO.new
295
+ template = "<narf:form name=\"formname\" method=\"post\">{$item}</narf:form>"
296
+ vals = { "item" => "bar" }
297
+
298
+ parse_template(mockio, template, vals , { "name1" => "value1", "name2" => "value2" })
299
+ assert_equal "<form name=\"formname\" method=\"post\">"+
300
+ "<input type=\"hidden\" name=\"__submitted\" value=\"formname\">"+
301
+ "<input type=\"hidden\" name=\"__q.name1\" value=\"value1\">"+
302
+ "<input type=\"hidden\" name=\"__q.name2\" value=\"value2\">"+
303
+ "bar</form>", mockio.string
304
+ end
305
+
306
+ # ========= Input Box ==========
307
+
308
+ def test_input_box
309
+ mockio = StringIO.new
310
+ write_template "<html><body><form name=\"form\">x<narf:input type=text name=test>y</form></body></html>"
311
+ vals = { "test" => "abc" }
312
+
313
+ header = "Content-Type: text/html\r\nStatus: 200\r\n\r\n"
314
+
315
+ cgi = Web::CGI.new( :out => mockio )
316
+ cgi.print_template( "test.html", vals )
317
+ assert_equal "<html><body><form name=\"form\">x<input type=\"text\" name=\"test\" value=\"abc\">y</form></body></html>", cgi.get_content
318
+ cgi.assert_vars_includes "test" => "abc"
319
+ cgi.assert_form_includes "form" , { "test" => "abc" }
320
+ end
321
+
322
+ def test_input_box_in_form
323
+ mockio = StringIO.new
324
+ write_template "<html><body><form name=\"form\">x<narf:input type=text name=test>y</form></body></html>"
325
+ vals = { "test" => "abc" }
326
+
327
+ header = "Content-Type: text/html\r\nStatus: 200\r\n\r\n"
328
+
329
+ cgi = Web::CGI.new( :out => mockio )
330
+ cgi.print_template( "/test.html", vals )
331
+ assert_equal "<html><body><form name=\"form\">x<input type=\"text\" name=\"test\" value=\"abc\">y</form></body></html>", cgi.get_content
332
+ cgi.assert_vars_includes "test" => "abc"
333
+ cgi.assert_form_includes "form" , { "test" => "abc" }
334
+ end
335
+
336
+ # ========= Text Area ==========
337
+
338
+ def test_textarea
339
+ write_file <<-EOF
340
+ Web.print_template( "<html><body><form name='form1'>x<narf:textarea name=test1>y</form></body></html>", { "test1" => "test" } )
341
+ EOF
342
+ do_request "/app.rb"
343
+ assert_vars_includes "test1" => "test"
344
+ assert_form_includes "form1", { "test1" => "test" }
345
+ end
346
+
347
+ # ========= Hidden ==========
348
+
349
+ def test_hidden
350
+ write_file <<-EOF
351
+ Web.print_template( "<html><body>"+
352
+ " <form name='form1'>x"+
353
+ " <narf:input type=hidden name=test1>y"+
354
+ " </form></body></html>", {
355
+ "test1" => "thisishidden",
356
+ } )
357
+ EOF
358
+ do_request "/app.rb"
359
+ assert_vars_includes "test1" => "thisishidden"
360
+ assert_form_includes "form1", { "test1" => "thisishidden" }
361
+ end
362
+
363
+
364
+ # ========= Password ==========
365
+
366
+ def test_password
367
+ write_file <<-EOF
368
+ Web.print_template( "<html><body>"+
369
+ " <form name='form1'>x"+
370
+ " <narf:input type=password name=test1>y"+
371
+ " </form></body></html>", {
372
+ "test1" => "thisishidden",
373
+ } )
374
+ EOF
375
+ do_request "/app.rb"
376
+ assert_vars_includes "test1" => "thisishidden"
377
+ assert_form_includes "form1", { "test1" => "thisishidden" }
378
+ end
379
+
380
+
381
+ # ========= Checkbox ==========
382
+
383
+ def test_checkbox
384
+ write_file <<-EOF
385
+ Web.print_template( "<html><body>
386
+ <form name='form1'>x
387
+ <narf:input type=checkbox name=test1>y
388
+ <narf:input type=checkbox name=test2>y
389
+ </form></body></html>",
390
+ {
391
+ "test1" => true,
392
+ "test2" => false,
393
+ } )
394
+ EOF
395
+ do_request "/app.rb"
396
+ assert_vars_includes "test1" => true, "test2" => false
397
+ assert_form_includes "form1", { "test1" => true, "test2" => false }
398
+ end
399
+ end
400
+
401
+
402
+ class TestMultiHashTree1 < Test::Unit::TestCase
403
+ include TemplateTestEnvironment
404
+ include Web::Testing
405
+
406
+ def setup
407
+ setup_test_dir
408
+ Web.set_docroot get_test_dir
409
+ end
410
+
411
+ def tear_down
412
+ remove_test_dir
413
+ end
414
+
415
+ def test_hidden_in_loop
416
+ write_file <<-EOF
417
+ Web.print_template( "<html><body>"+
418
+ " <form name=form1>"+
419
+ " <narf:foreach from=items item=item>"+
420
+ " <narf:input type=hidden name=item.test1>"+
421
+ " <narf:input type=hidden name=item.test2>"+
422
+ " </narf:foreach>"+
423
+ "</form></body></html>", {
424
+ "items" => [
425
+ { "test1" => "a", "test2" => "b" },
426
+ { "test1" => "c", "test2" => "d" } ]
427
+ } )
428
+ EOF
429
+ do_request "/app.rb"
430
+
431
+ assert_form_includes("form1",
432
+ { "items" => [{"test1" => "a",
433
+ "test2" => "b" },
434
+ {"test1" => "c",
435
+ "test2" => "d" } ] } )
436
+
437
+ submitted = false
438
+ write_file <<-EOF
439
+ ["a"] == Web.split_params["items"][0]["test1"] || raise("no match")
440
+ ["b"] == Web.split_params["items"][0]["test2"] || raise("no match")
441
+ ["c"] == Web.split_params["items"][1]["test1"] || raise("no match")
442
+ ["d"] == Web.split_params["items"][1]["test2"] || raise("no match")
443
+ EOF
444
+ do_submit "form1"
445
+ end
446
+
447
+
448
+ def test_checkbox_in_loop
449
+ write_file <<-EOF
450
+ Web.print_template( "<html><body>"+
451
+ " <form name='form1'>"+
452
+ " <narf:foreach from=items item=item>"+
453
+ " <narf:input type=checkbox name=item.test1>"+
454
+ " <narf:input type=checkbox name=item.test2>"+
455
+ " </narf:foreach>"+
456
+ "</form></body></html>", {
457
+ "items" => [
458
+ { "test1" => true, "test2" => false },
459
+ { "test1" => false, "test2" => true } ]
460
+ } )
461
+ EOF
462
+ do_request "/app.rb"
463
+
464
+ assert /name=\"items\[0\].test1\"/ =~ Web.get_cgi.get_content
465
+ assert /name=\"items\[0\].test2\"/ =~ Web.get_cgi.get_content
466
+ assert /name=\"items\[1\].test1\"/ =~ Web.get_cgi.get_content
467
+ assert /name=\"items\[1\].test2\"/ =~ Web.get_cgi.get_content
468
+
469
+ assert_form_includes "form1", { "items" => [
470
+ { "test1" => true, "test2" => false },
471
+ { "test1" => false, "test2" => true } ] }
472
+
473
+ write_file <<-EOF
474
+ [true] == Web.split_params["items"][0]["test1"] || raise("no match1")
475
+ nil == Web.split_params["items"][0]["test2"] || raise("no match2")
476
+ nil == Web.split_params["items"][1]["test1"] || raise("no match3")
477
+ [true] == Web.split_params["items"][1]["test2"] || raise("no match4")
478
+ EOF
479
+ do_submit "form1", {}
480
+ end
481
+
482
+ def test_other_fields_in_loop
483
+ write_file <<-EOF
484
+ Web.print_template( "<html><body>"+
485
+ " <form name='form1'>"+
486
+ " <input type='hidden' name='action' value='submit'>"+
487
+ " <narf:foreach from=items item=item>"+
488
+ " <narf:input type=text name=item.test1>"+
489
+ " <narf:input type=hidden name=item.test2>"+
490
+ " </narf:foreach>"+
491
+ "</form></body></html>", {
492
+ "items" => [
493
+ { "test1" => true, "test2" => false },
494
+ { "test1" => false, "test2" => true } ]
495
+ } )
496
+ EOF
497
+ do_request "/app.rb"
498
+
499
+ assert /name=\"items\[0\].test1\"/ =~ Web.get_content
500
+ assert /name=\"items\[0\].test2\"/ =~ Web.get_content
501
+ assert /name=\"items\[1\].test1\"/ =~ Web.get_content
502
+ assert /name=\"items\[1\].test2\"/ =~ Web.get_content
503
+ end
504
+
505
+ # ###
506
+ # this is a problem I need to think about.
507
+ # this is a use of checkboxes to represent boolean
508
+ # values, which isn't supported very well at the moment.
509
+ # ~ patrick
510
+ def think_about_this_test_checkbox_in_loop_submit
511
+ write_file <<-EOF
512
+ Web.print_template( "<html><body>
513
+ <form name='form1'>
514
+ <input type='hidden' name='action' value='submit'>
515
+ <narf:foreach from=items item=item>
516
+ <narf:input type=checkbox name=item.test1>
517
+ <narf:input type=checkbox name=item.test2>
518
+ </narf:foreach>
519
+ </form></body></html>", {
520
+ "items" => [
521
+ { "test1" => true, "test2" => false },
522
+ { "test1" => false, "test2" => true } ]
523
+ } )
524
+ EOF
525
+
526
+ do_request "/app.rb"
527
+
528
+ Kernel.puts Web.get_content
529
+ write_file <<-EOF
530
+ false == Web.split_params["items"][0]["test1"] || raise("no match 1")
531
+ true == Web.split_params["items"][0]["test2"] || raise("no match 2")
532
+ true == Web.split_params["items"][1]["test1"] || raise("no match 3")
533
+ true == Web.split_params["items"][1]["test2"] || raise("no match 4")
534
+ EOF
535
+
536
+ do_submit( "form1", {"items[0].test1" => false,
537
+ "items[0].test2" => true,
538
+ "items[1].test1" => true, } )
539
+ end
540
+
541
+
542
+ def test_double_nested_checkbox_in_loop
543
+ write_file <<-EOF
544
+ Web.print_template( "<html><body>"+
545
+ " <form name='form1'>"+
546
+ " <narf:foreach from=itemsouter item=itemouter>"+
547
+ " <narf:foreach from=itemouter.itemsinner item=iteminner>"+
548
+ " <narf:input type=checkbox name=iteminner.test1>"+
549
+ " </narf:foreach>"+
550
+ " </narf:foreach>"+
551
+ " </form></body></html>", {
552
+ "itemsouter" => [
553
+ { "itemsinner" => [
554
+ "test1"=>"value" ] } ] }
555
+ )
556
+ EOF
557
+ do_request "/app.rb"
558
+ assert /name=\"itemsouter\[0\].itemsinner\[0\].test1\"/ =~ Web.get_content
559
+ end
560
+
561
+ def test_select_box
562
+ mockio = StringIO.new
563
+ write_template "<html><body><form name=\"form\">x<narf:select name=test values=options>y</form></body></html>"
564
+ vals = { "test" => "value2",
565
+ "options" => [ { "name" => "name1", "value" => "value1" },
566
+ { "name" => "name2", "value" => "value2" } ] }
567
+
568
+ cgi = Web::CGI.new( :out => mockio )
569
+ cgi.print_template( "/test.html", vals )
570
+ string = "<html><body><form name=\"form\">x<select name=\"test\">" +
571
+ "<option value=\"value1\">name1</option>"+
572
+ "<option value=\"value2\" selected>name2</option>"+
573
+ "</select>y"+
574
+ "</form></body></html>"
575
+
576
+ assert_equal string, cgi.get_content
577
+ assert_equal ["value2"], cgi.get_form_value( "form","test" )
578
+ end
579
+
580
+ def test_select_box_converts_to_strings
581
+ #--- first, one side of the problem...
582
+
583
+ mockio = StringIO.new
584
+ write_template "<html><body><form name=\"form\">x<narf:select name=test values=options>y</form></body></html>"
585
+ vals = { "test" => 2,
586
+ "options" => [ { "name" => "name1", "value" => "1" },
587
+ { "name" => "name2", "value" => "2" } ] }
588
+
589
+ header = "Content-Type: text/html\r\nStatus: 200\r\n\r\n"
590
+
591
+ cgi = Web::CGI.new( :out => mockio )
592
+ cgi.print_template( "/test.html", vals )
593
+ string = "<html><body><form name=\"form\">x<select name=\"test\">" +
594
+ "<option value=\"1\">name1</option>"+
595
+ "<option value=\"2\" selected>name2</option>"+
596
+ "</select>y"+
597
+ "</form></body></html>"
598
+
599
+ assert_equal string, cgi.get_content
600
+ assert_equal ["2"], cgi.get_form_value( "form","test" )
601
+
602
+ #--- now the other
603
+
604
+ mockio = StringIO.new
605
+ write_template "<html><body><form name=\"form\">x<narf:select name=test values=options>y</form></body></html>"
606
+ vals = { "test" => "2",
607
+ "options" => [ { "name" => "name1", "value" => 1 },
608
+ { "name" => "name2", "value" => 2 } ] }
609
+
610
+ header = "Content-Type: text/html\r\nStatus: 200\r\n\r\n"
611
+
612
+ cgi = Web::CGI.new( :out => mockio )
613
+ cgi.print_template( "/test.html", vals )
614
+ string = "<html><body><form name=\"form\">x<select name=\"test\">" +
615
+ "<option value=\"1\">name1</option>"+
616
+ "<option value=\"2\" selected>name2</option>"+
617
+ "</select>y"+
618
+ "</form></body></html>"
619
+
620
+ assert_equal string, cgi.get_content
621
+ assert_equal ["2"], cgi.get_form_value( "form","test" )
622
+
623
+ end
624
+
625
+
626
+ def test_select_box_from_array
627
+ mockio = StringIO.new
628
+ write_template "<html><body><form name=\"form\">x<narf:select name=test values=options>y</form></body></html>"
629
+ vals = { "test" => "value2",
630
+ "options" => [ "value1", "value2" ] }
631
+
632
+ header = "Content-Type: text/html\r\nStatus: 200\r\n\r\n"
633
+
634
+ cgi = Web::CGI.new( :out => mockio )
635
+ cgi.print_template( "/test.html", vals )
636
+ string = "<html><body><form name=\"form\">x<select name=\"test\">" +
637
+ "<option value=\"value1\">value1</option>"+
638
+ "<option value=\"value2\" selected>value2</option>"+
639
+ "</select>y"+
640
+ "</form></body></html>"
641
+
642
+ assert_equal string, cgi.get_content
643
+ assert_equal ["value2"], cgi.get_form_value( "form","test" )
644
+ end
645
+
646
+
647
+
648
+
649
+ def test_get_elements
650
+ p = HTMLTree::Parser.new(true, false)
651
+ p.feed('<html><head></head><body><form method=get name=test></form></body></html>')
652
+ assert_equal("test",p.html.get_elements("form")[0].attribute("name"))
653
+ end
654
+
655
+ def test_template
656
+ write_template "<html><body><h1>{$var}</h1></body></html>"
657
+ Web.process(:params => {"displayVar" => "foo"}, :out => ""){ |cgi|
658
+ handle_request cgi
659
+ cgi.assert_template_used( "test.html" )
660
+ cgi.assert_vars_includes({ "var" => "foo" })
661
+ }
662
+ end
663
+
664
+ def test_exception_thrown_if_no_template_used
665
+ write_template "<html><body><h1>{$var}</h1></body></html>"
666
+ Web.process(:params => {"displayVar" => "foo"}, :out => ""){ |cgi|
667
+ assert_raises(Web::TemplateException) {
668
+ cgi.assert_template_used( "/test.html" )
669
+ }
670
+ }
671
+ end
672
+
673
+ def test_template_fails_assertion_with_wrong_template
674
+ write_template "<html><body><h1>{$var}</h1></body></html>"
675
+
676
+ Web.process(:out => "", :params => {"displayVar" => "bar"}){ |cgi|
677
+ handle_request cgi
678
+
679
+ assert_raises (Test::Unit::AssertionFailedError) {
680
+ cgi.assert_template_used( "test_not_it.html" )
681
+ }
682
+
683
+ assert_raises (Test::Unit::AssertionFailedError) {
684
+ cgi.assert_vars_includes({ "var" => "foo" })
685
+ }
686
+ }
687
+ end
688
+
689
+ def test_assert_template_not_used
690
+ write_template "<html><body><h1>{$var}</h1></body></html>"
691
+ Web.process(:params => {"displayVar" => "foo"}, :out => ""){ |cgi|
692
+ handle_request cgi
693
+ cgi.assert_template_not_used( "foo.html" )
694
+ }
695
+ end
696
+
697
+ def test_assert_template_not_used_exception_thrown_if_template_used
698
+ write_template "<html><body><h1>{$var}</h1></body></html>"
699
+ Web.process(:params => {"displayVar" => "foo"}, :out => ""){ |cgi|
700
+ assert_raises(Test::Unit::AssertionFailedError) {
701
+ handle_request cgi
702
+ cgi.assert_template_not_used( "test.html" )
703
+ }
704
+ }
705
+ end
706
+
707
+ def test_print_template_uses_empty_hash_by_default
708
+ write_template "blah blah blah"
709
+ Web.process( :out => "" ) { |cgi|
710
+ cgi.print_template "test.html"
711
+ }.assert_content "blah blah blah"
712
+ end
713
+
714
+ def test_print_template_survives_enormous_templates
715
+ bad_template = ""
716
+
717
+ 1.upto(1000){ |i|
718
+ bad_template += "this template sucks\n"
719
+ }
720
+
721
+ Web.process( :out => "" ) { |cgi|
722
+ cgi.print_template bad_template
723
+ }.assert_content bad_template
724
+ end
725
+ end
726
+
727
+
728
+ class TestIncludes < Test::Unit::TestCase
729
+ include TemplateTestEnvironment
730
+ include Web::Testing
731
+
732
+ def setup
733
+ Web.set_docroot get_test_dir
734
+ setup_test_dir
735
+ end
736
+
737
+ def teardown
738
+ remove_test_dir
739
+ end
740
+
741
+
742
+ def test_include_prints_contents
743
+ write_template "<html><body><narf:include file=\"incfile.html\"></body></html>" , "test.html"
744
+ write_template "<h1>Hello</h1>", "incfile.html"
745
+
746
+ write_file <<-EOF
747
+ Web.print_template( "test.html", {} )
748
+ EOF
749
+
750
+ do_request "/app.rb"
751
+ Web.assert_content "<html><body><h1>Hello</h1></body></html>"
752
+ end
753
+
754
+ def test_assert_template_used_works_for_included_templates
755
+ write_template "<html><body><narf:include file=\"incfile.html\" vars=foo></body></html>" , "test.html"
756
+ write_template "<h1>{$name}</h1>", "incfile.html"
757
+
758
+ write_file <<-EOF
759
+ Web.print_template( "test.html" , { "foo" => { "name" => "bar" }} )
760
+ EOF
761
+
762
+ do_request "/app.rb"
763
+ Web.assert_content "<html><body><h1>bar</h1></body></html>"
764
+
765
+ Web.assert_template_used 'test.html'
766
+ Web.assert_template_used 'incfile.html'
767
+ end
768
+
769
+ def todo_assert_template_used_works_for_multiple_print_template_calls
770
+
771
+ end
772
+
773
+ def test_included_vars_are_evaluated
774
+ write_template "<html><body><narf:include file=\"#{ 'incfile.html' }\" vars=foo></body></html>" , "test.html"
775
+ write_template "<h1>{$name}</h1>", "incfile.html"
776
+
777
+ write_file <<-EOF
778
+ Web.print_template( "test.html" , { "foo" => { "name" => "bar" }} )
779
+ EOF
780
+
781
+ do_request "/app.rb"
782
+ Web.assert_content "<html><body><h1>bar</h1></body></html>"
783
+ end
784
+
785
+ def test_checks_included_then_global_vars
786
+ write_template "<html><body><narf:include file=\"#{ 'incfile.html' }\"></body></html>" , "test.html"
787
+ write_template "<h1>{$foo.name}</h1>", "incfile.html"
788
+
789
+ write_file <<-EOF
790
+ Web.print_template( "test.html" , { "foo" => { "name" => "bar" }} )
791
+ EOF
792
+
793
+ Web.assert_content "<html><body><h1>bar</h1></body></html>"
794
+ end
795
+
796
+ def test_exception_thrown_if_template_doesnt_exist
797
+ write_template "<html><body><narf:include file=\"#{ 'nonexistant.html' }\"></body></html>" , "test.html"
798
+
799
+ write_file <<-EOF
800
+ exceptionThrown = false
801
+ begin
802
+ Web.print_template( "test.html" , { "foo" => { "name" => "bar" }} )
803
+ rescue Object
804
+ exceptionThrown = true
805
+ end
806
+ raise "error" if !exceptionThrown
807
+ EOF
808
+
809
+ do_request "/app.rb"
810
+ end
811
+
812
+ def test_load_filename_from_var
813
+ write_template "<html><body><narf:include file=$incfile></body></html>" , "test.html"
814
+ write_template "<h1>{$foo.name}</h1>", "incfile.html"
815
+
816
+ write_file <<-EOF
817
+ Web.print_template( "test.html" ,
818
+ { "foo" => { "name" => "bar" }, "incfile" => "incfile.html" })
819
+ EOF
820
+
821
+ do_request "/app.rb"
822
+ Web.assert_content "<html><body><h1>bar</h1></body></html>"
823
+ end
824
+ end
825
+
826
+
827
+ # TODO:
828
+ # add the ability to output the widgets manually
829
+ # add the ability to define your own widgets
830
+ # make sure you can't select an option that isn't in the option list
831
+ # handle queries in an include