ghazel-erubis 2.6.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 (298) hide show
  1. data/CHANGES.txt +744 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.txt +102 -0
  4. data/benchmark/Makefile +6 -0
  5. data/benchmark/bench.rb +313 -0
  6. data/benchmark/bench_context.yaml +141 -0
  7. data/benchmark/templates/_footer.html +4 -0
  8. data/benchmark/templates/_header.html +52 -0
  9. data/benchmark/templates/bench_erb.rhtml +29 -0
  10. data/benchmark/templates/bench_erubis.rhtml +29 -0
  11. data/benchmark/templates/bench_eruby.rhtml +29 -0
  12. data/bin/erubis +10 -0
  13. data/contrib/erubis +3330 -0
  14. data/contrib/erubis-run.rb +132 -0
  15. data/contrib/inline-require +179 -0
  16. data/doc/docstyle.css +188 -0
  17. data/doc/users-guide.html +3285 -0
  18. data/doc-api/classes/ActionView/TemplateHandlers/ErubisHandler.html +209 -0
  19. data/doc-api/classes/ActionView.html +105 -0
  20. data/doc-api/classes/ERB.html +101 -0
  21. data/doc-api/classes/Erubis/ArrayBufferEnhancer.html +175 -0
  22. data/doc-api/classes/Erubis/ArrayBufferEruby.html +120 -0
  23. data/doc-api/classes/Erubis/ArrayEnhancer.html +174 -0
  24. data/doc-api/classes/Erubis/ArrayEruby.html +120 -0
  25. data/doc-api/classes/Erubis/Basic/Converter.html +327 -0
  26. data/doc-api/classes/Erubis/Basic/Engine.html +130 -0
  27. data/doc-api/classes/Erubis/Basic.html +112 -0
  28. data/doc-api/classes/Erubis/BiPatternEnhancer.html +215 -0
  29. data/doc-api/classes/Erubis/BiPatternEruby.html +120 -0
  30. data/doc-api/classes/Erubis/CGenerator.html +386 -0
  31. data/doc-api/classes/Erubis/CommandOptionError.html +113 -0
  32. data/doc-api/classes/Erubis/Context.html +344 -0
  33. data/doc-api/classes/Erubis/Converter.html +283 -0
  34. data/doc-api/classes/Erubis/DeleteIndentEnhancer.html +150 -0
  35. data/doc-api/classes/Erubis/DeleteIndentEruby.html +120 -0
  36. data/doc-api/classes/Erubis/Ec.html +126 -0
  37. data/doc-api/classes/Erubis/Ejava.html +126 -0
  38. data/doc-api/classes/Erubis/Ejavascript.html +126 -0
  39. data/doc-api/classes/Erubis/Engine.html +305 -0
  40. data/doc-api/classes/Erubis/Eperl.html +126 -0
  41. data/doc-api/classes/Erubis/Ephp.html +126 -0
  42. data/doc-api/classes/Erubis/ErboutEnhancer.html +175 -0
  43. data/doc-api/classes/Erubis/ErboutEruby.html +120 -0
  44. data/doc-api/classes/Erubis/ErubisError.html +117 -0
  45. data/doc-api/classes/Erubis/Eruby.html +132 -0
  46. data/doc-api/classes/Erubis/EscapeEnhancer.html +165 -0
  47. data/doc-api/classes/Erubis/EscapedEc.html +120 -0
  48. data/doc-api/classes/Erubis/EscapedEjava.html +120 -0
  49. data/doc-api/classes/Erubis/EscapedEjavascript.html +120 -0
  50. data/doc-api/classes/Erubis/EscapedEperl.html +120 -0
  51. data/doc-api/classes/Erubis/EscapedEphp.html +120 -0
  52. data/doc-api/classes/Erubis/EscapedEruby.html +127 -0
  53. data/doc-api/classes/Erubis/EscapedEscheme.html +120 -0
  54. data/doc-api/classes/Erubis/Escheme.html +126 -0
  55. data/doc-api/classes/Erubis/Evaluator.html +212 -0
  56. data/doc-api/classes/Erubis/FastEruby.html +131 -0
  57. data/doc-api/classes/Erubis/Generator.html +416 -0
  58. data/doc-api/classes/Erubis/HeaderFooterEnhancer.html +267 -0
  59. data/doc-api/classes/Erubis/HeaderFooterEruby.html +120 -0
  60. data/doc-api/classes/Erubis/Helpers/RailsFormHelper.html +787 -0
  61. data/doc-api/classes/Erubis/Helpers/RailsHelper/TemplateConverter.html +213 -0
  62. data/doc-api/classes/Erubis/Helpers/RailsHelper.html +349 -0
  63. data/doc-api/classes/Erubis/Helpers.html +116 -0
  64. data/doc-api/classes/Erubis/InterpolationEnhancer.html +306 -0
  65. data/doc-api/classes/Erubis/InterpolationEruby.html +120 -0
  66. data/doc-api/classes/Erubis/JavaGenerator.html +359 -0
  67. data/doc-api/classes/Erubis/JavascriptGenerator.html +386 -0
  68. data/doc-api/classes/Erubis/Main.html +341 -0
  69. data/doc-api/classes/Erubis/NoCodeEnhancer.html +249 -0
  70. data/doc-api/classes/Erubis/NoCodeEruby.html +120 -0
  71. data/doc-api/classes/Erubis/NoTextEnhancer.html +159 -0
  72. data/doc-api/classes/Erubis/NoTextEruby.html +120 -0
  73. data/doc-api/classes/Erubis/NotSupportedError.html +119 -0
  74. data/doc-api/classes/Erubis/OptimizedEruby.html +163 -0
  75. data/doc-api/classes/Erubis/OptimizedGenerator.html +439 -0
  76. data/doc-api/classes/Erubis/OptimizedXmlEruby.html +163 -0
  77. data/doc-api/classes/Erubis/PI/Converter.html +266 -0
  78. data/doc-api/classes/Erubis/PI/Ec.html +166 -0
  79. data/doc-api/classes/Erubis/PI/Ejava.html +166 -0
  80. data/doc-api/classes/Erubis/PI/Ejavascript.html +166 -0
  81. data/doc-api/classes/Erubis/PI/Engine.html +122 -0
  82. data/doc-api/classes/Erubis/PI/Eperl.html +166 -0
  83. data/doc-api/classes/Erubis/PI/Ephp.html +166 -0
  84. data/doc-api/classes/Erubis/PI/Eruby.html +155 -0
  85. data/doc-api/classes/Erubis/PI/Escheme.html +166 -0
  86. data/doc-api/classes/Erubis/PI/TinyEruby.html +293 -0
  87. data/doc-api/classes/Erubis/PI.html +124 -0
  88. data/doc-api/classes/Erubis/PercentLineEnhancer.html +179 -0
  89. data/doc-api/classes/Erubis/PercentLineEruby.html +120 -0
  90. data/doc-api/classes/Erubis/PerlGenerator.html +344 -0
  91. data/doc-api/classes/Erubis/PhpGenerator.html +350 -0
  92. data/doc-api/classes/Erubis/PreprocessingEruby.html +183 -0
  93. data/doc-api/classes/Erubis/PreprocessingHelper.html +212 -0
  94. data/doc-api/classes/Erubis/PrintEnabledEnhancer.html +212 -0
  95. data/doc-api/classes/Erubis/PrintEnabledEruby.html +120 -0
  96. data/doc-api/classes/Erubis/PrintOutEnhancer.html +244 -0
  97. data/doc-api/classes/Erubis/PrintOutEruby.html +120 -0
  98. data/doc-api/classes/Erubis/PrintOutSimplifiedEruby.html +121 -0
  99. data/doc-api/classes/Erubis/RubyEvaluator.html +227 -0
  100. data/doc-api/classes/Erubis/RubyGenerator.html +327 -0
  101. data/doc-api/classes/Erubis/SchemeGenerator.html +382 -0
  102. data/doc-api/classes/Erubis/SimplifiedEruby.html +120 -0
  103. data/doc-api/classes/Erubis/SimplifyEnhancer.html +191 -0
  104. data/doc-api/classes/Erubis/StdoutEnhancer.html +173 -0
  105. data/doc-api/classes/Erubis/StdoutEruby.html +120 -0
  106. data/doc-api/classes/Erubis/StdoutSimplifiedEruby.html +121 -0
  107. data/doc-api/classes/Erubis/StringBufferEnhancer.html +174 -0
  108. data/doc-api/classes/Erubis/StringBufferEruby.html +120 -0
  109. data/doc-api/classes/Erubis/StringIOEruby.html +120 -0
  110. data/doc-api/classes/Erubis/TinyEruby.html +298 -0
  111. data/doc-api/classes/Erubis/XmlEruby.html +130 -0
  112. data/doc-api/classes/Erubis/XmlHelper.html +255 -0
  113. data/doc-api/classes/Erubis.html +353 -0
  114. data/doc-api/created.rid +1 -0
  115. data/doc-api/files/README_txt.html +247 -0
  116. data/doc-api/files/erubis/context_rb.html +107 -0
  117. data/doc-api/files/erubis/converter_rb.html +114 -0
  118. data/doc-api/files/erubis/engine/ec_rb.html +115 -0
  119. data/doc-api/files/erubis/engine/ejava_rb.html +115 -0
  120. data/doc-api/files/erubis/engine/ejavascript_rb.html +115 -0
  121. data/doc-api/files/erubis/engine/enhanced_rb.html +115 -0
  122. data/doc-api/files/erubis/engine/eperl_rb.html +115 -0
  123. data/doc-api/files/erubis/engine/ephp_rb.html +115 -0
  124. data/doc-api/files/erubis/engine/eruby_rb.html +115 -0
  125. data/doc-api/files/erubis/engine/escheme_rb.html +115 -0
  126. data/doc-api/files/erubis/engine/optimized_rb.html +114 -0
  127. data/doc-api/files/erubis/engine_rb.html +117 -0
  128. data/doc-api/files/erubis/enhancer_rb.html +107 -0
  129. data/doc-api/files/erubis/error_rb.html +107 -0
  130. data/doc-api/files/erubis/evaluator_rb.html +115 -0
  131. data/doc-api/files/erubis/generator_rb.html +114 -0
  132. data/doc-api/files/erubis/helper_rb.html +107 -0
  133. data/doc-api/files/erubis/helpers/rails_form_helper_rb.html +107 -0
  134. data/doc-api/files/erubis/helpers/rails_helper_rb.html +116 -0
  135. data/doc-api/files/erubis/local-setting_rb.html +107 -0
  136. data/doc-api/files/erubis/main_rb.html +127 -0
  137. data/doc-api/files/erubis/preprocessing_rb.html +114 -0
  138. data/doc-api/files/erubis/tiny_rb.html +107 -0
  139. data/doc-api/files/erubis_rb.html +118 -0
  140. data/doc-api/fr_class_index.html +122 -0
  141. data/doc-api/fr_file_index.html +51 -0
  142. data/doc-api/fr_method_index.html +251 -0
  143. data/doc-api/index.html +24 -0
  144. data/doc-api/rdoc-style.css +208 -0
  145. data/examples/basic/Makefile +53 -0
  146. data/examples/basic/example.ec +42 -0
  147. data/examples/basic/example.ejava +45 -0
  148. data/examples/basic/example.ejs +16 -0
  149. data/examples/basic/example.eperl +16 -0
  150. data/examples/basic/example.ephp +17 -0
  151. data/examples/basic/example.eruby +15 -0
  152. data/examples/basic/example.escheme +26 -0
  153. data/examples/pi/Makefile +54 -0
  154. data/examples/pi/example.ec +42 -0
  155. data/examples/pi/example.ejava +45 -0
  156. data/examples/pi/example.ejs +16 -0
  157. data/examples/pi/example.eperl +16 -0
  158. data/examples/pi/example.ephp +17 -0
  159. data/examples/pi/example.eruby +15 -0
  160. data/examples/pi/example.escheme +26 -0
  161. data/lib/erubis/context.rb +83 -0
  162. data/lib/erubis/converter.rb +357 -0
  163. data/lib/erubis/engine/ec.rb +117 -0
  164. data/lib/erubis/engine/ejava.rb +110 -0
  165. data/lib/erubis/engine/ejavascript.rb +119 -0
  166. data/lib/erubis/engine/enhanced.rb +121 -0
  167. data/lib/erubis/engine/eperl.rb +95 -0
  168. data/lib/erubis/engine/ephp.rb +99 -0
  169. data/lib/erubis/engine/eruby.rb +124 -0
  170. data/lib/erubis/engine/escheme.rb +114 -0
  171. data/lib/erubis/engine/optimized.rb +127 -0
  172. data/lib/erubis/engine.rb +120 -0
  173. data/lib/erubis/enhancer.rb +680 -0
  174. data/lib/erubis/error.rb +23 -0
  175. data/lib/erubis/evaluator.rb +88 -0
  176. data/lib/erubis/generator.rb +85 -0
  177. data/lib/erubis/helper.rb +47 -0
  178. data/lib/erubis/helpers/rails_form_helper.rb +197 -0
  179. data/lib/erubis/helpers/rails_helper.rb +353 -0
  180. data/lib/erubis/local-setting.rb +9 -0
  181. data/lib/erubis/main.rb +489 -0
  182. data/lib/erubis/preprocessing.rb +58 -0
  183. data/lib/erubis/tiny.rb +144 -0
  184. data/lib/erubis.rb +72 -0
  185. data/setup.rb +1331 -0
  186. data/test/assert-text-equal.rb +44 -0
  187. data/test/data/users-guide/Example.ejava +55 -0
  188. data/test/data/users-guide/array_example.result +9 -0
  189. data/test/data/users-guide/arraybuffer_example.result +9 -0
  190. data/test/data/users-guide/bipattern-example.rhtml +4 -0
  191. data/test/data/users-guide/bipattern_example.result +6 -0
  192. data/test/data/users-guide/context.rb +6 -0
  193. data/test/data/users-guide/context.yaml +8 -0
  194. data/test/data/users-guide/def_method.rb +14 -0
  195. data/test/data/users-guide/def_method.result +3 -0
  196. data/test/data/users-guide/escape_example.result +9 -0
  197. data/test/data/users-guide/example.ec +27 -0
  198. data/test/data/users-guide/example.ejs +20 -0
  199. data/test/data/users-guide/example.eperl +18 -0
  200. data/test/data/users-guide/example.ephp +18 -0
  201. data/test/data/users-guide/example.eruby +6 -0
  202. data/test/data/users-guide/example.escheme +28 -0
  203. data/test/data/users-guide/example1.eruby +6 -0
  204. data/test/data/users-guide/example1.rb +17 -0
  205. data/test/data/users-guide/example1.result +16 -0
  206. data/test/data/users-guide/example10.rb +4 -0
  207. data/test/data/users-guide/example10.result +17 -0
  208. data/test/data/users-guide/example10.xhtml +14 -0
  209. data/test/data/users-guide/example10_x.result +17 -0
  210. data/test/data/users-guide/example11.php +20 -0
  211. data/test/data/users-guide/example11.result +23 -0
  212. data/test/data/users-guide/example11.rhtml +21 -0
  213. data/test/data/users-guide/example11_C.result +10 -0
  214. data/test/data/users-guide/example11_N.result +16 -0
  215. data/test/data/users-guide/example11_U.result +16 -0
  216. data/test/data/users-guide/example11_php.result +15 -0
  217. data/test/data/users-guide/example1_x.result +9 -0
  218. data/test/data/users-guide/example2.eruby +7 -0
  219. data/test/data/users-guide/example2.rb +10 -0
  220. data/test/data/users-guide/example2.result +27 -0
  221. data/test/data/users-guide/example2_trim.result +10 -0
  222. data/test/data/users-guide/example2_x.result +10 -0
  223. data/test/data/users-guide/example3.eruby +6 -0
  224. data/test/data/users-guide/example3.rb +10 -0
  225. data/test/data/users-guide/example31.result +22 -0
  226. data/test/data/users-guide/example32.result +4 -0
  227. data/test/data/users-guide/example3_e.result +8 -0
  228. data/test/data/users-guide/example4.eruby +3 -0
  229. data/test/data/users-guide/example4.rb +11 -0
  230. data/test/data/users-guide/example4.result +10 -0
  231. data/test/data/users-guide/example4_x.result +5 -0
  232. data/test/data/users-guide/example5.eruby +6 -0
  233. data/test/data/users-guide/example5.rb +16 -0
  234. data/test/data/users-guide/example5.result +7 -0
  235. data/test/data/users-guide/example6.rb +12 -0
  236. data/test/data/users-guide/example6.result +7 -0
  237. data/test/data/users-guide/example7.eruby +8 -0
  238. data/test/data/users-guide/example71.result +13 -0
  239. data/test/data/users-guide/example72.result +13 -0
  240. data/test/data/users-guide/example8.eruby +6 -0
  241. data/test/data/users-guide/example8_ruby.result +7 -0
  242. data/test/data/users-guide/example8_yaml.result +7 -0
  243. data/test/data/users-guide/example9.eruby +3 -0
  244. data/test/data/users-guide/example9.rb +8 -0
  245. data/test/data/users-guide/example9.result +9 -0
  246. data/test/data/users-guide/example91.result +5 -0
  247. data/test/data/users-guide/example92.result +4 -0
  248. data/test/data/users-guide/example_c.result +29 -0
  249. data/test/data/users-guide/example_java.result +56 -0
  250. data/test/data/users-guide/example_js.result +22 -0
  251. data/test/data/users-guide/example_perl.result +20 -0
  252. data/test/data/users-guide/example_php.result +19 -0
  253. data/test/data/users-guide/example_scheme.result +30 -0
  254. data/test/data/users-guide/example_scheme_display.result +29 -0
  255. data/test/data/users-guide/fasteruby.rb +11 -0
  256. data/test/data/users-guide/fasteruby.result +38 -0
  257. data/test/data/users-guide/fasteruby.rhtml +15 -0
  258. data/test/data/users-guide/headerfooter-example.eruby +9 -0
  259. data/test/data/users-guide/headerfooter-example2.rb +8 -0
  260. data/test/data/users-guide/headerfooter-example2.rhtml +10 -0
  261. data/test/data/users-guide/headerfooter_example.result +11 -0
  262. data/test/data/users-guide/headerfooter_example2.result +13 -0
  263. data/test/data/users-guide/interpolation_example.result +9 -0
  264. data/test/data/users-guide/main_program1.rb +8 -0
  265. data/test/data/users-guide/main_program1.result +6 -0
  266. data/test/data/users-guide/main_program2.rb +8 -0
  267. data/test/data/users-guide/main_program2.result +6 -0
  268. data/test/data/users-guide/nocode-example.eruby +14 -0
  269. data/test/data/users-guide/nocode-php.result +20 -0
  270. data/test/data/users-guide/nocode_example.result +15 -0
  271. data/test/data/users-guide/normal-eruby-test.eruby +9 -0
  272. data/test/data/users-guide/normal_eruby_test.result +11 -0
  273. data/test/data/users-guide/notext-example.eruby +14 -0
  274. data/test/data/users-guide/notext-example.php +19 -0
  275. data/test/data/users-guide/notext-php.result +20 -0
  276. data/test/data/users-guide/notext_example.result +16 -0
  277. data/test/data/users-guide/percentline-example.rhtml +4 -0
  278. data/test/data/users-guide/percentline_example.result +7 -0
  279. data/test/data/users-guide/printenable_example.result +4 -0
  280. data/test/data/users-guide/printenabled-example.eruby +3 -0
  281. data/test/data/users-guide/printenabled-example.rb +8 -0
  282. data/test/data/users-guide/printstatement_example.result +8 -0
  283. data/test/data/users-guide/simplify_example.result +9 -0
  284. data/test/data/users-guide/stderr.log +3 -0
  285. data/test/data/users-guide/stdout_exmple.result +9 -0
  286. data/test/data/users-guide/stringbuffer_example.result +9 -0
  287. data/test/data/users-guide/tail_260.result +4 -0
  288. data/test/data/users-guide/tailnewline.rhtml +3 -0
  289. data/test/data/users-guide/template1.rhtml +4 -0
  290. data/test/data/users-guide/template2.rhtml +4 -0
  291. data/test/test-engines.rb +369 -0
  292. data/test/test-enhancers.rb +570 -0
  293. data/test/test-erubis.rb +883 -0
  294. data/test/test-main.rb +721 -0
  295. data/test/test-users-guide.rb +57 -0
  296. data/test/test.rb +29 -0
  297. data/test/testutil.rb +96 -0
  298. metadata +360 -0
data/test/test-main.rb ADDED
@@ -0,0 +1,721 @@
1
+ ##
2
+ ## $Rev$
3
+ ## $Release: 2.6.5 $
4
+ ## $Date$
5
+ ##
6
+
7
+ require "#{File.dirname(__FILE__)}/test.rb"
8
+
9
+ require 'tempfile'
10
+ require 'erubis/main'
11
+
12
+
13
+ $script = File.dirname(TESTDIR) + '/bin/erubis'
14
+ #if test(?f, 'bin/erubis')
15
+ # $script = 'bin/erubis'
16
+ #elsif test(?f, '../bin/erubis')
17
+ # $script = '../bin/erubis'
18
+ #end
19
+
20
+
21
+ class StringWriter < String
22
+ def write(arg)
23
+ self << arg
24
+ end
25
+ def flush(*args)
26
+ # pass
27
+ end
28
+ end
29
+
30
+ class Erubis::Main
31
+ public :usage
32
+ public :show_properties
33
+ public :show_enhancers
34
+ end
35
+
36
+
37
+ class MainTest < Test::Unit::TestCase
38
+
39
+ INPUT = <<'END'
40
+ list:
41
+ <% list = ['<aaa>', 'b&b', '"ccc"']
42
+ for item in list %>
43
+ - <%= item %>
44
+ <% end %>
45
+ user: <%= defined?(user) ? user : "(none)" %>
46
+ END
47
+ INPUT2 = INPUT.gsub(/\blist([^:])/, '@list\1').gsub(/\buser([^:])/, '@user\1')
48
+
49
+ # SRC = <<'END'
50
+ #_buf = ''; _buf << "list:\n"
51
+ # list = ['<aaa>', 'b&b', '"ccc"']
52
+ # for item in list
53
+ #_buf << " - "; _buf << ( item ).to_s; _buf << "\n"
54
+ # end
55
+ #_buf << "user: "; _buf << ( defined?(user) ? user : "(none)" ).to_s; _buf << "\n"
56
+ #_buf
57
+ #END
58
+ SRC = <<'END'
59
+ _buf = ''; _buf << 'list:
60
+ '; list = ['<aaa>', 'b&b', '"ccc"']
61
+ for item in list
62
+ _buf << ' - '; _buf << ( item ).to_s; _buf << '
63
+ '; end
64
+ _buf << 'user: '; _buf << ( defined?(user) ? user : "(none)" ).to_s; _buf << '
65
+ ';
66
+ _buf.to_s
67
+ END
68
+ # SRC2 = SRC.gsub(/\blist /, '@list ').gsub(/\buser /, '@user ')
69
+
70
+ OUTPUT = <<'END'
71
+ list:
72
+ - <aaa>
73
+ - b&b
74
+ - "ccc"
75
+ user: (none)
76
+ END
77
+
78
+ ESCAPED_OUTPUT = <<'END'
79
+ list:
80
+ - &lt;aaa&gt;
81
+ - b&amp;b
82
+ - &quot;ccc&quot;
83
+ user: (none)
84
+ END
85
+
86
+
87
+ PI_INPUT = <<'END'
88
+ <ul>
89
+ <?rb @list = ['<aaa>', 'b&b', '"ccc"']
90
+ for item in @list ?>
91
+ <li>@{item}@ / @!{item}@
92
+ <%= item %> / <%== item %></li>
93
+ <?rb end ?>
94
+ <ul>
95
+ END
96
+
97
+ PI_SRC = <<'END'
98
+ _buf = ''; _buf << '<ul>
99
+ '; @list = ['<aaa>', 'b&b', '"ccc"']
100
+ for item in @list
101
+ _buf << ' <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << ' / '; _buf << (item).to_s; _buf << '
102
+ '; _buf << ( item ).to_s; _buf << ' / '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</li>
103
+ '; end
104
+ _buf << '<ul>
105
+ ';
106
+ _buf.to_s
107
+ END
108
+
109
+ PI_ESCAPED_SRC = <<'END'
110
+ _buf = ''; _buf << '<ul>
111
+ '; @list = ['<aaa>', 'b&b', '"ccc"']
112
+ for item in @list
113
+ _buf << ' <li>'; _buf << (item).to_s; _buf << ' / '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '
114
+ '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << ' / '; _buf << ( item ).to_s; _buf << '</li>
115
+ '; end
116
+ _buf << '<ul>
117
+ ';
118
+ _buf.to_s
119
+ END
120
+
121
+ PI_OUTPUT = <<'END'
122
+ <ul>
123
+ <li>&lt;aaa&gt; / <aaa>
124
+ <aaa> / &lt;aaa&gt;</li>
125
+ <li>b&amp;b / b&b
126
+ b&b / b&amp;b</li>
127
+ <li>&quot;ccc&quot; / "ccc"
128
+ "ccc" / &quot;ccc&quot;</li>
129
+ <ul>
130
+ END
131
+
132
+ PI_ESCAPED_OUTPUT = <<'END'
133
+ <ul>
134
+ <li><aaa> / &lt;aaa&gt;
135
+ &lt;aaa&gt; / <aaa></li>
136
+ <li>b&b / b&amp;b
137
+ b&amp;b / b&b</li>
138
+ <li>"ccc" / &quot;ccc&quot;
139
+ &quot;ccc&quot; / "ccc"</li>
140
+ <ul>
141
+ END
142
+
143
+ def _test()
144
+ if @filename.nil?
145
+ method = (caller[0] =~ /in `(.*)'/) && $1 #'
146
+ method =~ /block in (.*)/ and method = $1 # for Ruby 1.9
147
+ @filename = "tmp.#{method}"
148
+ end
149
+ File.open(@filename, 'w') {|f| f.write(@input) } if @filename
150
+ begin
151
+ argv = @options.is_a?(Array) ? @options.dup : @options.split
152
+ argv << @filename if @filename
153
+ $stdout = output = StringWriter.new
154
+ Erubis::Main.new.execute(argv)
155
+ ensure
156
+ $stdout = STDOUT
157
+ File.unlink(@filename) if @filename && test(?f, @filename)
158
+ end
159
+ assert_text_equal(@expected, output)
160
+ end
161
+
162
+ def _error_test(errclass, errmsg)
163
+ ex = assert_raise(errclass) { _test() }
164
+ assert_equal(errmsg, ex.message)
165
+ end
166
+
167
+
168
+ def test_help # -h
169
+ @options = '-h'
170
+ m = Erubis::Main.new
171
+ @expected = m.usage() + "\n" + m.show_properties() + m.show_enhancers()
172
+ @filename = false
173
+ _test()
174
+ end
175
+
176
+ def test_version # -v
177
+ @options = '-v'
178
+ @expected = (("$Release: 2.6.5 $" =~ /[.\d]+/) && $&) + "\n"
179
+ @filename = false
180
+ _test()
181
+ end
182
+
183
+
184
+ def test_basic1
185
+ @input = INPUT
186
+ @expected = OUTPUT
187
+ @options = ''
188
+ _test()
189
+ end
190
+
191
+
192
+ def test_source1 # -x
193
+ @input = INPUT
194
+ @expected = SRC
195
+ @options = '-x'
196
+ _test()
197
+ end
198
+
199
+
200
+ def _with_dummy_file
201
+ bindir = File.join(File.dirname(File.dirname(__FILE__)), 'bin')
202
+ env_path = ENV['PATH']
203
+ env__ = ENV['_']
204
+ begin
205
+ ENV['PATH'] = bindir + File::PATH_SEPARATOR + ENV['PATH']
206
+ ENV['_'] = 'erubis'
207
+ Tempfile.open(self.name.gsub(/[^\w]/,'_')) do |f|
208
+ f.write(INPUT)
209
+ f.flush
210
+ yield(f.path)
211
+ end
212
+ ensure
213
+ ENV['PATH'] = env_path
214
+ ENV['_'] = env__ if env__
215
+ end
216
+ end
217
+
218
+
219
+ def test_syntax1 # -z (syntax ok)
220
+ @input = INPUT
221
+ @expected = "Syntax OK\n"
222
+ @options = '-z'
223
+ _test()
224
+ #
225
+ _with_dummy_file do |filepath|
226
+ actual = `erubis #{@options} #{filepath}`
227
+ assert_equal @expected, actual
228
+ end
229
+ end
230
+
231
+
232
+ def test_syntax2 # -z (syntax error)
233
+ inputs = []
234
+ inputs << <<'END'
235
+ <ul>
236
+ <% for item in list %>
237
+ <li><%= item[:name]] %></li>
238
+ <% end %>
239
+ </ul>
240
+ END
241
+ inputs << <<'END'
242
+ <ul>
243
+ <% for item in list %>
244
+ <li><%= item[:name] %></li>
245
+ <% edn %>
246
+ </ul>
247
+ END
248
+ basename = 'tmp.test_syntax2_%d.rhtml'
249
+ filenames = [ basename % 0, basename % 1 ]
250
+ errmsgs = []
251
+ if ruby19?
252
+ errmsgs << <<'END'
253
+ 3: syntax error, unexpected ']', expecting ')'
254
+ _buf << ' <li>'; _buf << ( item[:name]] ).to_s; _buf << '</li>
255
+ ^
256
+ -:4: syntax error, unexpected keyword_end, expecting ')'
257
+ '; end
258
+ ^
259
+ -:7: syntax error, unexpected $end, expecting ')'
260
+ END
261
+ errmsgs << <<'END'
262
+ 7: syntax error, unexpected $end, expecting keyword_end
263
+ END
264
+ else
265
+ errmsgs << <<'END'
266
+ 3: syntax error, unexpected ']', expecting ')'
267
+ _buf << ' <li>'; _buf << ( item[:name]] ).to_s; _buf << '</li>
268
+ ^
269
+ -:4: syntax error, unexpected kEND, expecting ')'
270
+ '; end
271
+ ^
272
+ -:7: syntax error, unexpected $end, expecting ')'
273
+ END
274
+ errmsgs << <<'END'
275
+ 7: syntax error, unexpected $end, expecting kEND
276
+ END
277
+ end
278
+ #
279
+ max = inputs.length
280
+ (0...max).each do |i|
281
+ @input = inputs[i]
282
+ @expected = "tmp.test_syntax2:#{errmsgs[i]}"
283
+ @options = '-z'
284
+ _test()
285
+ end
286
+ #
287
+ begin
288
+ (0...max).each do |i|
289
+ File.open(filenames[i], 'w') {|f| f.write(inputs[i]) }
290
+ end
291
+ @input = '<ok/>'
292
+ @expected = ''
293
+ @options = '-z'
294
+ (0...max).each do |i|
295
+ @expected << "#{filenames[i]}:#{errmsgs[i]}"
296
+ @options << " #{filenames[i]}"
297
+ end
298
+ _test()
299
+ ensure
300
+ (0...max).each do |i|
301
+ File.unlink(filenames[i]) if test(?f, filenames[i])
302
+ end
303
+ end
304
+ end
305
+
306
+
307
+ def test_pattern1 # -p
308
+ @input = INPUT.gsub(/<%/, '<!--%').gsub(/%>/, '%-->')
309
+ @expected = OUTPUT
310
+ #@options = "-p '<!--% %-->'"
311
+ @options = ["-p", "<!--% %-->"]
312
+ _test()
313
+ end
314
+
315
+
316
+ # def test_class1 # -C
317
+ # @input = INPUT
318
+ # @expected = OUTPUT.gsub(/<aaa>/, '&lt;aaa&gt;').gsub(/b&b/, 'b&amp;b').gsub(/"ccc"/, '&quot;ccc&quot;')
319
+ # @options = "-C XmlEruby"
320
+ # _test()
321
+ # end
322
+
323
+
324
+ def test_notrim1 # --trim=false
325
+ @input = INPUT
326
+ @expected = <<'END'
327
+ list:
328
+
329
+ - <aaa>
330
+
331
+ - b&b
332
+
333
+ - "ccc"
334
+
335
+ user: (none)
336
+ END
337
+ @options = "--trim=false" # -T
338
+ _test()
339
+ end
340
+
341
+
342
+ def test_notrim2 # --trim=false
343
+ @input = INPUT
344
+ # @expected = <<'END'
345
+ #_buf = ''; _buf << "list:\n"
346
+ # list = ['<aaa>', 'b&b', '"ccc"']
347
+ # for item in list ; _buf << "\n"
348
+ #_buf << " - "; _buf << ( item ).to_s; _buf << "\n"
349
+ # end ; _buf << "\n"
350
+ #_buf << "user: "; _buf << ( defined?(user) ? user : "(none)" ).to_s; _buf << "\n"
351
+ #_buf
352
+ #END
353
+ @expected = <<'END'
354
+ _buf = ''; _buf << 'list:
355
+ '; list = ['<aaa>', 'b&b', '"ccc"']
356
+ for item in list ; _buf << '
357
+ '; _buf << ' - '; _buf << ( item ).to_s; _buf << '
358
+ '; end ; _buf << '
359
+ '; _buf << 'user: '; _buf << ( defined?(user) ? user : "(none)" ).to_s; _buf << '
360
+ ';
361
+ _buf.to_s
362
+ END
363
+ @options = "-x --trim=false" # -xT
364
+ _test()
365
+ end
366
+
367
+
368
+ #--
369
+ #def test_context1
370
+ # @input = INPUT
371
+ # @expected = OUTPUT.gsub(/\(none\)/, 'Hello')
372
+ # @options = '--user=Hello'
373
+ # _test()
374
+ #end
375
+ #++
376
+
377
+
378
+ def test_datafile1 # -f data.yaml
379
+ datafile = "test.context1.yaml"
380
+ @input = INPUT2
381
+ @expected = OUTPUT.gsub(/\(none\)/, 'Hello')
382
+ @options = "-f #{datafile}"
383
+ #
384
+ str = <<-END
385
+ user: Hello
386
+ password: world
387
+ END
388
+ File.open(datafile, 'w') {|f| f.write(str) }
389
+ begin
390
+ _test()
391
+ ensure
392
+ File.unlink(datafile) if test(?f, datafile)
393
+ end
394
+ end
395
+
396
+
397
+ def test_datafile2 # -f data.rb
398
+ datafile = "test.context1.rb"
399
+ @input = INPUT2
400
+ @expected = OUTPUT.gsub(/\(none\)/, 'Hello')
401
+ @options = "-f #{datafile}"
402
+ #
403
+ str = <<-END
404
+ @user = 'Hello'
405
+ @password = 'world'
406
+ END
407
+ File.open(datafile, 'w') {|f| f.write(str) }
408
+ begin
409
+ _test()
410
+ ensure
411
+ File.unlink(datafile) if test(?f, datafile)
412
+ end
413
+ end
414
+
415
+
416
+ def test_untabify1 # -t (obsolete)
417
+ yamlfile = "test.context2.yaml"
418
+ @input = INPUT2
419
+ @expected = OUTPUT.gsub(/\(none\)/, 'Hello')
420
+ @options = "-tf #{yamlfile}"
421
+ #
422
+ yaml = <<-END
423
+ user: Hello
424
+ password: world
425
+ END
426
+ File.open(yamlfile, 'w') {|f| f.write(yaml) }
427
+ begin
428
+ _test()
429
+ ensure
430
+ File.unlink(yamlfile) if test(?f, yamlfile)
431
+ end
432
+ end
433
+
434
+
435
+ def test_untabify2 # -T
436
+ yamlfile = "test.context2.yaml"
437
+ @input = INPUT2
438
+ @expected = OUTPUT.gsub(/\(none\)/, 'Hello')
439
+ @options = "-Tf #{yamlfile}"
440
+ #
441
+ yaml = <<-END
442
+ user: Hello
443
+ items:
444
+ - aaa
445
+ - bbb
446
+ - ccc
447
+ END
448
+ File.open(yamlfile, 'w') {|f| f.write(yaml) }
449
+ assert_raise(ArgumentError) do
450
+ _test()
451
+ end
452
+ File.open(yamlfile, 'w') {|f| f.write(yaml.gsub(/\t/, ' '*8)) }
453
+ _test()
454
+ ensure
455
+ File.unlink(yamlfile) if test(?f, yamlfile)
456
+ end
457
+
458
+
459
+ def test_symbolify1 # -S
460
+ yamlfile = "test.context3.yaml"
461
+ @input = <<END
462
+ <% for h in @list %>
463
+ <tr>
464
+ <td><%= h[:name] %></td><td><%= h[:mail] %></td>
465
+ </tr>
466
+ <% end %>
467
+ END
468
+ @expected = <<END
469
+ <tr>
470
+ <td>foo</td><td>foo@mail.com</td>
471
+ </tr>
472
+ <tr>
473
+ <td>bar</td><td>bar@mail.org</td>
474
+ </tr>
475
+ END
476
+ @options = "-f #{yamlfile} -S"
477
+ #
478
+ yaml = <<-END
479
+ list:
480
+ - name: foo
481
+ mail: foo@mail.com
482
+ - name: bar
483
+ mail: bar@mail.org
484
+ END
485
+ File.open(yamlfile, 'w') { |f| f.write(yaml) }
486
+ begin
487
+ _test()
488
+ ensure
489
+ File.unlink(yamlfile) if test(?f, yamlfile)
490
+ end
491
+ end
492
+
493
+
494
+ def test_result1 # -B
495
+ yamlfile = "test.context4.yaml"
496
+ #
497
+ @input = <<'END'
498
+ user = <%= user %>
499
+ <% for item in list %>
500
+ - <%= item %>
501
+ <% end %>
502
+ END
503
+ @expected = <<'END'
504
+ user = World
505
+ - aaa
506
+ - bbb
507
+ - ccc
508
+ END
509
+ @options = "-f #{yamlfile} -B "
510
+ #
511
+ yaml = <<-END
512
+ user: World
513
+ list:
514
+ - aaa
515
+ - bbb
516
+ - ccc
517
+ END
518
+ File.open(yamlfile, 'w') {|f| f.write(yaml) }
519
+ begin
520
+ _test()
521
+ ensure
522
+ File.unlink(yamlfile) if test(?f, yamlfile)
523
+ end
524
+ end
525
+
526
+
527
+ def test_context1 # -c
528
+ @input = <<'END'
529
+ user = <%= @user %>
530
+ <% for item in @list %>
531
+ - <%= item %>
532
+ <% end %>
533
+ END
534
+ @expected = <<'END'
535
+ user = World
536
+ - aaa
537
+ - bbb
538
+ - ccc
539
+ END
540
+ #
541
+ @options = ['-c', '{user: World, list: [aaa, bbb, ccc]}']
542
+ _test()
543
+ @options = ['-c', '@user="World"; @list=%w[aaa bbb ccc]']
544
+ _test()
545
+ end
546
+
547
+
548
+ def test_include1 # -I
549
+ dir = 'foo'
550
+ lib = 'bar'
551
+ Dir.mkdir dir unless test(?d, dir)
552
+ filename = "#{dir}/#{lib}.rb"
553
+ File.open(filename, 'w') do |f|
554
+ f.write <<-'END'
555
+ def escape(str)
556
+ return "<#{str.upcase}>"
557
+ end
558
+ END
559
+ end
560
+ #
561
+ @input = "<% require '#{lib}' %>\n" + INPUT.gsub(/<%= item %>/, '<%= escape(item) %>')
562
+ @expected = OUTPUT.gsub(/<aaa>/, '<<AAA>>').gsub(/b\&b/, '<B&B>').gsub(/"ccc"/, '<"CCC">')
563
+ @options = "-I #{dir}"
564
+ #
565
+ begin
566
+ _test()
567
+ ensure
568
+ File.unlink filename if test(?f, filename)
569
+ Dir.rmdir dir if test(?d, dir)
570
+ end
571
+ end
572
+
573
+
574
+ def test_require1 # -r
575
+ dir = 'foo'
576
+ lib = 'bar'
577
+ Dir.mkdir dir unless test(?d, dir)
578
+ filename = "#{dir}/#{lib}.rb"
579
+ File.open(filename, 'w') do |f|
580
+ f.write <<-'END'
581
+ def escape(str)
582
+ return "<#{str.upcase}>"
583
+ end
584
+ END
585
+ end
586
+ #
587
+ @input = INPUT.gsub(/<%= item %>/, '<%= escape(item) %>')
588
+ @expected = OUTPUT.gsub(/<aaa>/, '<<AAA>>').gsub(/b\&b/, '<B&B>').gsub(/"ccc"/, '<"CCC">')
589
+ @options = "-I #{dir} -r #{lib}"
590
+ #
591
+ begin
592
+ _test()
593
+ ensure
594
+ File.unlink filename if test(?f, filename)
595
+ Dir.rmdir dir if test(?d, dir)
596
+ end
597
+ end
598
+
599
+
600
+ def test_enhancers1 # -E
601
+ @input = <<END
602
+ <% list = %w[<aaa> b&b "ccc"] %>
603
+ % for item in list
604
+ - <%= item %> : <%== item %>
605
+ - [= item =] : [== item =]
606
+ % end
607
+ END
608
+ @expected = <<END
609
+ - &lt;aaa&gt; : <aaa>
610
+ - &lt;aaa&gt; : <aaa>
611
+ - b&amp;b : b&b
612
+ - b&amp;b : b&b
613
+ - &quot;ccc&quot; : "ccc"
614
+ - &quot;ccc&quot; : "ccc"
615
+ END
616
+ @options = "-E Escape,PercentLine,HeaderFooter,BiPattern"
617
+ _test()
618
+ end
619
+
620
+
621
+ def test_bodyonly1 # -b
622
+ @input = INPUT
623
+ @expected = SRC.sub(/\A_buf = '';/,'').sub(/\n_buf.to_s\n\z/,'')
624
+ @options = '-b -x'
625
+ _test()
626
+ end
627
+
628
+
629
+ def test_escape1 # -e
630
+ @input = INPUT
631
+ @expected = SRC.gsub(/<< \((.*?)\).to_s;/, '<< Erubis::XmlHelper.escape_xml(\1);')
632
+ @options = '-ex'
633
+ _test()
634
+ end
635
+
636
+
637
+ def test_invalid_option # -1 (invalid option)
638
+ @input = INPUT
639
+ @options = '-1'
640
+ _error_test(Erubis::CommandOptionError, "-1: unknown option.")
641
+ end
642
+
643
+
644
+ def test_invalid_enhancer # -E hoge
645
+ @options = '-E hoge'
646
+ errmsg = "hoge: no such Enhancer (try '-h' to show all enhancers)."
647
+ _error_test(Erubis::CommandOptionError, errmsg)
648
+ end
649
+
650
+
651
+ def test_invalid_lang # -l hoge
652
+ @options = '-l hoge'
653
+ errmsg = "-l hoge: invalid language name (class Erubis::Ehoge not found)."
654
+ _error_test(Erubis::CommandOptionError, errmsg)
655
+ end
656
+
657
+
658
+ def test_missing_argument # -E
659
+ @filename = false
660
+ @options = '-E'
661
+ _error_test(Erubis::CommandOptionError, "-E: enhancers required.")
662
+ @options = '-l'
663
+ _error_test(Erubis::CommandOptionError, "-l: lang required.")
664
+ end
665
+
666
+
667
+ def test_pi1 # --pi -x
668
+ @input = PI_INPUT
669
+ @expected = PI_SRC
670
+ @options = '-x --pi'
671
+ _test()
672
+ end
673
+
674
+ def test_pi2 # --pi -x --escape=false
675
+ @input = PI_INPUT
676
+ @expected = PI_ESCAPED_SRC
677
+ @options = '-x --pi --escape=false'
678
+ _test()
679
+ end
680
+
681
+ def test_pi3 # --pi
682
+ @input = PI_INPUT
683
+ @expected = PI_OUTPUT
684
+ @options = '--pi'
685
+ _test()
686
+ end
687
+
688
+ def test_pi4 # --pi --escape=false
689
+ @input = PI_INPUT
690
+ @expected = PI_ESCAPED_OUTPUT
691
+ @options = '--pi --escape=false'
692
+ _test()
693
+ end
694
+
695
+ def test_pi5 # --pi=ruby -x
696
+ @input = PI_INPUT.gsub(/<\?rb/, '<?ruby')
697
+ @expected = PI_SRC
698
+ @options = '--pi=ruby -x'
699
+ _test()
700
+ end
701
+
702
+ def test_pi6 # --pi -xl java
703
+ @input = <<'END'
704
+ <?java for (int i = 0; i < arr.length; i++) { ?>
705
+ - @{arr[i]}@ / @!{arr[i]}@
706
+ <?java } ?>
707
+ END
708
+ @expected = <<'END'
709
+ StringBuffer _buf = new StringBuffer(); for (int i = 0; i < arr.length; i++) {
710
+ _buf.append(" - "); _buf.append(escape(arr[i])); _buf.append(" / "); _buf.append(arr[i]); _buf.append("\n");
711
+ }
712
+ return _buf.toString();
713
+ END
714
+ @options = '--pi -xl java'
715
+ _test()
716
+ end
717
+
718
+
719
+ self.post_definition()
720
+
721
+ end