erubis 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/ChangeLog +45 -18
  2. data/README.txt +80 -0
  3. data/benchmark/erubybench-lib.rb +189 -0
  4. data/benchmark/erubybench.rb +364 -0
  5. data/benchmark/erubybench.rhtml +61 -0
  6. data/benchmark/erubybench.yaml +61 -0
  7. data/bin/erubis +4 -180
  8. data/contrib/erubis +2297 -0
  9. data/contrib/inline-require +151 -0
  10. data/doc-api/classes/Erubis.html +236 -0
  11. data/doc-api/classes/Erubis/ArrayBufferEnhancer.html +175 -0
  12. data/doc-api/classes/Erubis/ArrayBufferEruby.html +120 -0
  13. data/doc-api/classes/Erubis/ArrayEnhancer.html +174 -0
  14. data/doc-api/classes/Erubis/ArrayEruby.html +120 -0
  15. data/doc-api/classes/Erubis/BiPatternEnhancer.html +212 -0
  16. data/doc-api/classes/Erubis/BiPatternEruby.html +120 -0
  17. data/doc-api/classes/Erubis/CommandOptionError.html +113 -0
  18. data/doc-api/classes/Erubis/Context.html +249 -0
  19. data/doc-api/classes/Erubis/Ec.html +399 -0
  20. data/doc-api/classes/Erubis/Ejava.html +366 -0
  21. data/doc-api/classes/Erubis/Ejavascript.html +390 -0
  22. data/doc-api/classes/Erubis/Engine.html +711 -0
  23. data/doc-api/classes/Erubis/Eperl.html +350 -0
  24. data/doc-api/classes/Erubis/Ephp.html +308 -0
  25. data/doc-api/classes/Erubis/ErubisError.html +117 -0
  26. data/doc-api/classes/Erubis/Eruby.html +310 -0
  27. data/doc-api/classes/Erubis/EscapeEnhancer.html +167 -0
  28. data/doc-api/classes/Erubis/EscapedEc.html +120 -0
  29. data/doc-api/classes/Erubis/EscapedEjava.html +120 -0
  30. data/doc-api/classes/Erubis/EscapedEjavascript.html +120 -0
  31. data/doc-api/classes/Erubis/EscapedEperl.html +120 -0
  32. data/doc-api/classes/Erubis/EscapedEphp.html +120 -0
  33. data/doc-api/classes/Erubis/EscapedEruby.html +127 -0
  34. data/doc-api/classes/Erubis/EscapedEscheme.html +120 -0
  35. data/doc-api/classes/Erubis/Escheme.html +389 -0
  36. data/doc-api/classes/Erubis/HeaderFooterEnhancer.html +264 -0
  37. data/doc-api/classes/Erubis/HeaderFooterEruby.html +120 -0
  38. data/doc-api/classes/Erubis/Main.html +318 -0
  39. data/doc-api/classes/Erubis/NoTextEnhancer.html +159 -0
  40. data/doc-api/classes/Erubis/NoTextEruby.html +120 -0
  41. data/doc-api/classes/Erubis/OptimizedEruby.html +445 -0
  42. data/doc-api/classes/Erubis/OptimizedXmlEruby.html +163 -0
  43. data/doc-api/classes/Erubis/PercentLineEnhancer.html +174 -0
  44. data/doc-api/classes/Erubis/PercentLineEruby.html +120 -0
  45. data/doc-api/classes/Erubis/PrintEnabledEnhancer.html +212 -0
  46. data/doc-api/classes/Erubis/PrintEnabledEruby.html +120 -0
  47. data/doc-api/classes/Erubis/PrintOutEnhancer.html +244 -0
  48. data/doc-api/classes/Erubis/PrintOutEruby.html +120 -0
  49. data/doc-api/classes/Erubis/PrintOutSimplifiedEruby.html +121 -0
  50. data/doc-api/classes/Erubis/SimplifiedEruby.html +120 -0
  51. data/doc-api/classes/Erubis/SimplifyEnhancer.html +185 -0
  52. data/doc-api/classes/Erubis/StdoutEnhancer.html +173 -0
  53. data/doc-api/classes/Erubis/StdoutEruby.html +120 -0
  54. data/doc-api/classes/Erubis/StdoutSimplifiedEruby.html +121 -0
  55. data/doc-api/classes/Erubis/StringBufferEnhancer.html +174 -0
  56. data/doc-api/classes/Erubis/StringBufferEruby.html +120 -0
  57. data/doc-api/classes/Erubis/StringIOEruby.html +120 -0
  58. data/doc-api/classes/Erubis/TinyEruby.html +305 -0
  59. data/doc-api/classes/Erubis/XmlEruby.html +130 -0
  60. data/doc-api/classes/Erubis/XmlHelper.html +193 -0
  61. data/doc-api/created.rid +1 -0
  62. data/doc-api/files/__/README_txt.html +214 -0
  63. data/doc-api/files/erubis/engine/ec_rb.html +115 -0
  64. data/doc-api/files/erubis/engine/ejava_rb.html +115 -0
  65. data/doc-api/files/erubis/engine/ejavascript_rb.html +115 -0
  66. data/doc-api/files/erubis/engine/enhanced_rb.html +115 -0
  67. data/doc-api/files/erubis/engine/eperl_rb.html +115 -0
  68. data/doc-api/files/erubis/engine/ephp_rb.html +115 -0
  69. data/doc-api/files/erubis/engine/eruby_rb.html +115 -0
  70. data/doc-api/files/erubis/engine/escheme_rb.html +115 -0
  71. data/doc-api/files/erubis/engine/optimized_rb.html +114 -0
  72. data/doc-api/files/erubis/engine_rb.html +114 -0
  73. data/doc-api/files/erubis/enhancer_rb.html +114 -0
  74. data/doc-api/files/erubis/helper_rb.html +107 -0
  75. data/doc-api/files/erubis/local-setting_rb.html +107 -0
  76. data/doc-api/files/erubis/main_rb.html +125 -0
  77. data/doc-api/files/erubis/tiny_rb.html +107 -0
  78. data/doc-api/files/erubis_rb.html +118 -0
  79. data/doc-api/fr_class_index.html +77 -0
  80. data/doc-api/fr_file_index.html +43 -0
  81. data/doc-api/fr_method_index.html +157 -0
  82. data/doc-api/index.html +24 -0
  83. data/doc-api/rdoc-style.css +208 -0
  84. data/doc/users-guide.html +1507 -375
  85. data/examples/Makefile +53 -0
  86. data/examples/example.ec +24 -0
  87. data/examples/example.ejava +41 -0
  88. data/examples/example.ejavascript +16 -0
  89. data/examples/example.eperl +16 -0
  90. data/examples/example.ephp +17 -0
  91. data/examples/example.eruby +15 -0
  92. data/examples/example.escheme +26 -0
  93. data/lib/erubis.rb +37 -269
  94. data/lib/erubis/engine.rb +260 -0
  95. data/lib/erubis/engine/ec.rb +106 -0
  96. data/lib/erubis/engine/ejava.rb +101 -0
  97. data/lib/erubis/engine/ejavascript.rb +104 -0
  98. data/lib/erubis/engine/enhanced.rb +102 -0
  99. data/lib/erubis/engine/eperl.rb +83 -0
  100. data/lib/erubis/engine/ephp.rb +84 -0
  101. data/lib/erubis/engine/eruby.rb +91 -0
  102. data/lib/erubis/engine/escheme.rb +96 -0
  103. data/lib/erubis/engine/optimized.rb +114 -0
  104. data/lib/erubis/enhancer.rb +487 -0
  105. data/lib/erubis/helper.rb +53 -0
  106. data/lib/erubis/local-setting.rb +10 -0
  107. data/lib/erubis/main.rb +368 -0
  108. data/lib/erubis/tiny.rb +65 -0
  109. data/test/assert-text-equal.rb +45 -0
  110. data/test/test-bin.rb +222 -45
  111. data/test/test-engines.rb +343 -0
  112. data/test/test-erubis.rb +836 -501
  113. data/test/test.rb +27 -0
  114. data/test/testutil.rb +86 -0
  115. metadata +131 -8
  116. data/README +0 -50
@@ -1,537 +1,872 @@
1
1
  ##
2
- ## $Rev: 5 $
3
- ## $Release: 1.1.0 $
4
- ## $Date: 2006-03-04 22:21:26 +0900 (Sat, 04 Mar 2006) $
2
+ ## $Rev: 21 $
3
+ ## $Release: 2.0.0 $
4
+ ## copyright(c) 2006 kuwata-lab all rights reserved.
5
5
  ##
6
6
 
7
- testdir = File.dirname(__FILE__)
8
- libdir = testdir == '.' ? '../lib' : File.dirname(testdir) + '/lib'
9
- $: << testdir
10
- $: << libdir
7
+ require "#{File.dirname(__FILE__)}/test.rb"
11
8
 
12
- require 'test/unit'
13
- #require 'test/unit/ui/console/testrunner'
14
- require 'assert-text-equal'
15
- require 'yaml'
16
9
  require 'stringio'
17
10
 
18
11
  require 'erubis'
12
+ require 'erubis/engine/enhanced'
13
+ require 'erubis/engine/optimized'
14
+ require 'erubis/tiny'
15
+
19
16
 
20
17
  class ErubisTest < Test::Unit::TestCase
18
+ extend TestEnhancer
21
19
 
22
- #str = DATA.read()
23
- str = File.read(__FILE__)
24
- str.gsub!(/.*^__END__$/m, '')
20
+ testdata_list = load_yaml_document(__FILE__)
21
+ define_testmethods(testdata_list)
25
22
 
26
- @@ydocs = {}
27
- YAML.load_documents(str) do |ydoc|
28
- name = ydoc['name']
29
- raise "*** test name '#{name}' is duplicated." if @@ydocs[name]
30
- ydoc.each do |key, val|
31
- if key[-1] == ?*
32
- key = key.sub(/\*\z/, '')
33
- val = val[$target]
34
- ydoc[key] = val
35
- end
36
- end
37
- @@ydocs[name] = ydoc
38
- s = <<-END
39
- def test_#{name}
40
- @name = #{name.dump}
41
- _test()
42
- end
43
- END
44
- eval s
45
- end
46
23
 
47
24
  def _test()
48
- ydoc = @@ydocs[@name]
49
- input = ydoc['input']
50
- src = ydoc['src'].gsub(/\^/, ' ')
51
- output = ydoc['output'].gsub(/\^/, ' ')
52
- klass = ydoc['class'] ? (eval "Erubis::#{ydoc['class']}") : Erubis::Eruby
53
- options = ydoc['options'] || {}
54
- testopt = ydoc['testopt']
25
+ @src.gsub!(/\^/, ' ')
26
+ @output.gsub!(/\^/, ' ') if @output.is_a?(String)
27
+ @klass = @class ? Erubis.const_get(@class) : Erubis::Eruby
28
+ @options ||= {}
29
+ @chomp.each do |target|
30
+ case target
31
+ when 'src' ; @src.chomp!
32
+ when 'input' ; @input.chomp!
33
+ when 'expected' ; @expected.chomp!
34
+ else
35
+ raise "#{@name}: invalid chomp value: #{@chomp.inspect}"
36
+ end
37
+ end if @chomp
55
38
 
56
- if testopt != 'load_file'
57
- eruby = klass.new(input, options)
39
+ if @testopt != 'load_file'
40
+ if @klass == Erubis::TinyEruby
41
+ eruby = @klass.new(@input)
42
+ else
43
+ eruby = @klass.new(@input, @options)
44
+ end
58
45
  else
59
- filename = "tmp.#{name}.eruby"
46
+ filename = "tmp.#{@name}.eruby"
60
47
  begin
61
- File.open(filename, 'w') { |f| f.write(input) }
62
- eruby = klass.load_file(filename, options)
48
+ File.open(filename, 'w') { |f| f.write(@input) }
49
+ eruby = @klass.load_file(filename, @options)
63
50
  ensure
64
51
  File.unlink(filename) if test(?f, filename)
65
52
  end
66
53
  end
67
- assert_text_equal(src, eruby.src)
54
+ assert_text_equal(@src, eruby.src)
68
55
 
69
- return if testopt == 'skip_output'
56
+ return if @testopt == 'skip_bufput'
70
57
 
71
- context = {}
72
- context[:list] = ['<aaa>', 'b&b', '"ccc"']
58
+ list = ['<aaa>', 'b&b', '"ccc"']
59
+ context = @testopt == 'context' ? Erubis::Context.new : {}
60
+ context[:list] = list
73
61
 
74
- if testopt != 'stdout'
75
- actual = eruby.evaluate(context)
76
- assert_text_equal(output, actual)
77
- else
62
+ case @testopt
63
+ when/\Aeval\(/
64
+ eval eruby.src
65
+ actual = eval @testopt
66
+ assert_text_equal(@output, actual)
67
+ when 'stdout', 'print'
78
68
  begin
79
69
  orig = $stdout
80
70
  $stdout = stringio = StringIO.new
81
- actual = eruby.evaluate(context)
71
+ #actual = eruby.evaluate(context)
72
+ actual = eruby.result(context)
82
73
  ensure
83
- $stdout = orig if orig
74
+ $stdout = orig
84
75
  end
85
- assert_nil(actual)
86
- assert_text_equal(output, stringio.string)
76
+ if @testopt == 'stdout'
77
+ assert_equal("", actual)
78
+ else
79
+ assert_nil(actual)
80
+ end
81
+ assert_text_equal(@output, stringio.string)
82
+ when 'evaluate', 'context'
83
+ actual = eruby.evaluate(context)
84
+ assert_text_equal(@output, actual)
85
+ when 'binding'
86
+ actual = eruby.result(binding())
87
+ assert_text_equal(@output, actual)
88
+ else
89
+ actual = eruby.result(context)
90
+ assert_text_equal(@output, actual)
87
91
  end
88
92
  end
89
93
 
90
94
  end
91
95
 
92
96
  __END__
93
- ---
94
- name: basic1
95
- input: |
96
- <ul>
97
- <% for item in list %>
98
- <li><%= item %></li>
99
- <% end %>
100
- </ul>
101
- src: |
102
- _out = ''; _out << "<ul>\n"
103
- for item in list
104
- _out << " <li>"; _out << ( item ).to_s; _out << "</li>\n"
105
- end
106
- _out << "</ul>\n"
107
- _out
108
- output: |
109
- <ul>
110
- <li><aaa></li>
111
- <li>b&b</li>
112
- <li>"ccc"</li>
113
- </ul>
114
- ##
115
- ---
116
- name: basic2
117
- input: |
118
- <ul>
119
- <% i = 0
120
- for item in list
121
- i += 1
122
- %>
123
- <li><%= item %></li>
124
- <% end %>
125
- </ul>
126
- src: |
127
- _out = ''; _out << "<ul>\n"
128
- i = 0
129
- for item in list
130
- i += 1
131
- ^^
132
- _out << " <li>"; _out << ( item ).to_s; _out << "</li>\n"
133
- end
134
- _out << "</ul>\n"
135
- _out
136
- output: |
137
- <ul>
138
- <li><aaa></li>
139
- <li>b&b</li>
140
- <li>"ccc"</li>
141
- </ul>
142
- ##
143
- ---
144
- name: basic3
145
- input: |
146
- <ul><% i = 0
147
- for item in list
148
- i += 1 %><li><%= item %></li><% end %>
149
- </ul>
150
- src: |
151
- _out = ''; _out << "<ul>"; i = 0
152
- for item in list
153
- i += 1 ; _out << "<li>"; _out << ( item ).to_s; _out << "</li>"; end ; _out << "\n"
154
- _out << "</ul>\n"
155
- _out
156
- output: |
157
- <ul><li><aaa></li><li>b&b</li><li>"ccc"</li>
158
- </ul>
159
- ##
160
- ---
161
- name: pattern1
162
- options:
163
- :pattern : '\[@ @\]'
164
- input: |
165
- <ul>
166
- [@ for item in list @]
167
- <li>[@= item @]</li>
168
- [@ end @]
169
- </ul>
170
- src: |
171
- _out = ''; _out << "<ul>\n"
172
- for item in list
173
- _out << " <li>"; _out << ( item ).to_s; _out << "</li>\n"
174
- end
175
- _out << "</ul>\n"
176
- _out
177
- output: |
178
- <ul>
179
- <li><aaa></li>
180
- <li>b&b</li>
181
- <li>"ccc"</li>
182
- </ul>
183
- ##
184
- ---
185
- name: pattern2
186
- options:
187
- :pattern : '<(?:!--)?% %(?:--)?>'
188
- input: |
189
- <ul>
190
- <!--% for item in list %-->
191
- <li><%= item %></li>
192
- <!--% end %-->
193
- </ul>
194
- src: |
195
- _out = ''; _out << "<ul>\n"
196
- for item in list
197
- _out << " <li>"; _out << ( item ).to_s; _out << "</li>\n"
198
- end
199
- _out << "</ul>\n"
200
- _out
201
- output: |
202
- <ul>
203
- <li><aaa></li>
204
- <li>b&b</li>
205
- <li>"ccc"</li>
206
- </ul>
207
- ##
208
- ---
209
- name: trim1
210
- options:
211
- :trim : false
212
- input: |
213
- <ul>
214
- <% for item in list %>
215
- <li><%= item %></li>
216
- <% end %>
217
- </ul>
218
- src: |
219
- _out = ''; _out << "<ul>\n"
220
- _out << " "; for item in list ; _out << "\n"
221
- _out << " <li>"; _out << ( item ).to_s; _out << "</li>\n"
222
- _out << " "; end ; _out << "\n"
223
- _out << "</ul>\n"
224
- _out
225
- output: |
226
- <ul>
227
- ^
228
- <li><aaa></li>
229
- ^
230
- <li>b&b</li>
231
- ^
232
- <li>"ccc"</li>
233
- ^
234
- </ul>
235
- ##
236
- ---
237
- name: ignore1
238
- input: |
239
- <ul>
240
- <%# i = 0 %>
241
- <% for item in list %>
242
- <%#
243
- i += 1
244
- color = i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'
245
- %>
246
- <li> <%#= i %> : <%= item %> </li>
247
- <% end %>
248
- </ul>
249
- src: |
250
- _out = ''; _out << "<ul>\n"
251
-
252
- for item in list
253
-
254
-
255
-
256
-
257
- _out << " <li> "; ; _out << " : "; _out << ( item ).to_s; _out << " </li>\n"
258
- end
259
- _out << "</ul>\n"
260
- _out
261
- output: |
262
- <ul>
263
- <li> : <aaa> </li>
264
- <li> : b&b </li>
265
- <li> : "ccc" </li>
266
- </ul>
267
- ##
268
- ---
269
- name: xml1
270
- class: XmlEruby
271
- input: |
272
- <pre>
273
- <% for item in list %>
274
- <%= item %>
275
- <%== item %>
276
- <% end %>
277
- </pre>
278
- src: |
279
- _out = ''; _out << "<pre>\n"
280
- for item in list
281
- _out << " "; _out << Erubis::XmlEruby.escape( item ); _out << "\n"
282
- _out << " "; _out << ( item ).to_s; _out << "\n"
283
- end
284
- _out << "</pre>\n"
285
- _out
286
- output: |
287
- <pre>
288
- &lt;aaa&gt;
289
- <aaa>
290
- b&amp;b
291
- b&b
292
- &quot;ccc&quot;
293
- "ccc"
294
- </pre>
295
- ##
296
- ---
297
- name: xml2
298
- class: XmlEruby
299
- testopt: skip_output
300
- input: |
301
- <% for item in list %>
302
- <%= item["var#{n}"] %>
303
- <%== item["var#{n}"] %>
304
- <%=== item["var#{n}"] %>
305
- <%==== item["var#{n}"] %>
306
- <% end %>
307
- src: |
308
- _out = ''; for item in list
309
- _out << " "; _out << Erubis::XmlEruby.escape( item["var#{n}"] ); _out << "\n"
310
- _out << " "; _out << ( item["var#{n}"] ).to_s; _out << "\n"
311
- _out << " "; $stderr.puts("** erubis: item[\"var\#{n}\"] = #{(item["var#{n}"]).inspect}"); _out << "\n"
312
- _out << " "; _out << "\n"
313
- end
314
- _out
315
- output: |
316
- ##
317
- ---
318
- name: fast1
319
- class: FastEruby
320
- input: |
321
- <table>
322
- <% for item in list %>
323
- <tr>
324
- <td><%= item %></td>
325
- <td><%== item %></td>
326
- </tr>
327
- <% end %>
328
- </table>
329
- <ul><% for item in list %><li><%= item %></li><% end %></ul>
330
- src: |
331
- _out = ''; _out << "<table>\n"
332
- for item in list
333
- _out << " <tr>\n <td>"
334
- _out << ( item ).to_s; _out << "</td>\n <td>"
335
- _out << ( item ).to_s; _out << "</td>\n </tr>\n"
336
-
337
- end
338
- _out << "</table>\n<ul>"
339
- for item in list ; _out << "<li>"; _out << ( item ).to_s; _out << "</li>"; end ; _out << "</ul>\n"
340
- _out
341
- output: |
342
- <table>
343
- <tr>
344
- <td><aaa></td>
345
- <td><aaa></td>
346
- </tr>
347
- <tr>
348
- <td>b&b</td>
349
- <td>b&b</td>
350
- </tr>
351
- <tr>
352
- <td>"ccc"</td>
353
- <td>"ccc"</td>
354
- </tr>
355
- </table>
356
- <ul><li><aaa></li><li>b&b</li><li>"ccc"</li></ul>
357
- ##
358
- ---
359
- name: fast2
360
- class: FastXmlEruby
361
- input: |
362
- <table>
363
- <% for item in list %>
364
- <tr>
365
- <td><%= item %></td>
366
- <td><%== item %></td>
367
- </tr>
368
- <% end %>
369
- </table>
370
- <ul><% for item in list %><li><%= item %></li><% end %></ul>
371
- src: |
372
- _out = ''; _out << "<table>\n"
373
- for item in list
374
- _out << " <tr>\n <td>"
375
- _out << Erubis::XmlEruby.escape( item ); _out << "</td>\n <td>"
376
- _out << ( item ).to_s; _out << "</td>\n </tr>\n"
97
+ - name: basic1
98
+ input: &basic1_input|
99
+ <ul>
100
+ <% for item in list %>
101
+ <li><%= item %></li>
102
+ <% end %>
103
+ </ul>
104
+ src: |
105
+ _buf = []; _buf << '<ul>
106
+ '; for item in list
107
+ _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
108
+ '; end
109
+ _buf << '</ul>
110
+ ';
111
+ _buf.join
112
+ output: &basic1_bufput|
113
+ <ul>
114
+ <li><aaa></li>
115
+ <li>b&b</li>
116
+ <li>"ccc"</li>
117
+ </ul>
118
+ ##
119
+ - name: basic2
120
+ input: |
121
+ <ul>
122
+ <% i = 0
123
+ for item in list
124
+ i += 1
125
+ %>
126
+ <li><%= item %></li>
127
+ <% end %>
128
+ </ul>
129
+ src: |
130
+ _buf = []; _buf << '<ul>
131
+ '; i = 0
132
+ for item in list
133
+ i += 1
134
+ ^^^
135
+ _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
136
+ '; end
137
+ _buf << '</ul>
138
+ ';
139
+ _buf.join
140
+ output: *basic1_bufput
141
+ # <ul>
142
+ # <li><aaa></li>
143
+ # <li>b&b</li>
144
+ # <li>"ccc"</li>
145
+ # </ul>
146
+ ##
147
+ - name: basic3
148
+ input: |
149
+ <ul><% i = 0
150
+ for item in list
151
+ i += 1 %><li><%= item %></li><% end %>
152
+ </ul>
153
+ src: |
154
+ _buf = []; _buf << '<ul>'; i = 0
155
+ for item in list
156
+ i += 1 ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>'; end ; _buf << '
157
+ '; _buf << '</ul>
158
+ ';
159
+ _buf.join
160
+ output: |
161
+ <ul><li><aaa></li><li>b&b</li><li>"ccc"</li>
162
+ </ul>
163
+ ##
164
+ - name: context1
165
+ testopt: context
166
+ input: |
167
+ <ul>
168
+ <% for item in @list %>
169
+ <li><%= item %></li>
170
+ <% end %>
171
+ </ul>
172
+ src: |
173
+ _buf = []; _buf << '<ul>
174
+ '; for item in @list
175
+ _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
176
+ '; end
177
+ _buf << '</ul>
178
+ ';
179
+ _buf.join
180
+ output: *basic1_bufput
181
+ ##
182
+ - name: ignore1
183
+ input: |
184
+ <ul>
185
+ <%# i = 0 %>
186
+ <% for item in list %>
187
+ <%#
188
+ i += 1
189
+ color = i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'
190
+ %>
191
+ <li> <%#= i %> : <%= item %> </li>
192
+ <% end %>
193
+ </ul>
194
+ src: |
195
+ _buf = []; _buf << '<ul>
196
+ ';
197
+ for item in list
198
+
199
+
200
+
201
+
202
+ _buf << ' <li> ';; _buf << ' : '; _buf << ( item ).to_s; _buf << ' </li>
203
+ '; end
204
+ _buf << '</ul>
205
+ ';
206
+ _buf.join
207
+ output: |
208
+ <ul>
209
+ <li> : <aaa> </li>
210
+ <li> : b&b </li>
211
+ <li> : "ccc" </li>
212
+ </ul>
213
+ ##
214
+ - name: quotation1
215
+ desc: single quotation and backslash
216
+ class: Eruby
217
+ input: &quotation1_input|
218
+ a = "'"
219
+ b = "\""
220
+ c = '\''
221
+ src: |
222
+ _buf = []; _buf << 'a = "\'"
223
+ b = "\\""
224
+ c = \'\\\'\'
225
+ ';
226
+ _buf.join
227
+ output: *quotation1_input
228
+ ##
229
+ - name: pattern1
230
+ options:
231
+ :pattern : '\[@ @\]'
232
+ input: |
233
+ <ul>
234
+ [@ for item in list @]
235
+ <li>[@= item @]</li>
236
+ [@ end @]
237
+ </ul>
238
+ src: |
239
+ _buf = []; _buf << '<ul>
240
+ '; for item in list
241
+ _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
242
+ '; end
243
+ _buf << '</ul>
244
+ ';
245
+ _buf.join
246
+ output: *basic1_bufput
247
+ # <ul>
248
+ # <li><aaa></li>
249
+ # <li>b&b</li>
250
+ # <li>"ccc"</li>
251
+ # </ul>
252
+ ##
253
+ - name: pattern2
254
+ options:
255
+ :pattern : '<(?:!--)?% %(?:--)?>'
256
+ input: |
257
+ <ul>
258
+ <!--% for item in list %-->
259
+ <li><%= item %></li>
260
+ <!--% end %-->
261
+ </ul>
262
+ src: |
263
+ _buf = []; _buf << '<ul>
264
+ '; for item in list
265
+ _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
266
+ '; end
267
+ _buf << '</ul>
268
+ ';
269
+ _buf.join
270
+ output: *basic1_bufput
271
+ # <ul>
272
+ # <li><aaa></li>
273
+ # <li>b&b</li>
274
+ # <li>"ccc"</li>
275
+ # </ul>
276
+ ##
277
+ - name: trim1
278
+ options:
279
+ :trim : false
280
+ input: *basic1_input
281
+ # <ul>
282
+ # <% for item in list %>
283
+ # <li><%= item %></li>
284
+ # <% end %>
285
+ # </ul>
286
+ src: |
287
+ _buf = []; _buf << '<ul>
288
+ '; _buf << ' '; for item in list ; _buf << '
289
+ '; _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
290
+ '; _buf << ' '; end ; _buf << '
291
+ '; _buf << '</ul>
292
+ ';
293
+ _buf.join
294
+ output: |
295
+ <ul>
296
+ ^
297
+ <li><aaa></li>
298
+ ^
299
+ <li>b&b</li>
300
+ ^
301
+ <li>"ccc"</li>
302
+ ^
303
+ </ul>
304
+ ##
305
+ - name: bodyonly1
306
+ testopt: skip_bufput
307
+ options: { :preamble: no, :postamble: no }
308
+ input: *basic1_input
309
+ src: |4
310
+ _buf << '<ul>
311
+ '; for item in list
312
+ _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
313
+ '; end
314
+ _buf << '</ul>
315
+ ';
316
+ chomp: [src]
317
+ expected: null
318
+ ##
319
+ - name: loadfile1
320
+ testopt: load_file
321
+ #input: |
322
+ # <ul>
323
+ # <% for item in list %>
324
+ # <li><%= item %></li>
325
+ # <% end %>
326
+ # </ul>
327
+ input:
328
+ "<ul>\r\n <% for item in list %>\r\n <li><%= item %></li>\r\n <% end %>\r\n</ul>\r\n"
329
+ #src: |
330
+ # _buf = ''; _buf << "<ul>\n"
331
+ # for item in list
332
+ # _buf << " <li>"; _buf << ( item ).to_s; _buf << "</li>\n"
333
+ # end
334
+ # _buf << "</ul>\n"
335
+ # _buf
336
+ src:
337
+ "_buf = []; _buf << '<ul>\r\n'; for item in list \r\n _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>\r\n'; end \r\n _buf << '</ul>\r\n';\n_buf.join\n"
338
+ #output: |
339
+ # <ul>
340
+ # <li><aaa></li>
341
+ # <li>b&b</li>
342
+ # <li>"ccc"</li>
343
+ # </ul>
344
+ output:
345
+ "<ul>\n <li><aaa></li>\n <li>b&b</li>\n <li>\"ccc\"</li>\n</ul>\n"
346
+ # "<ul>\r\n <li><aaa></li>\r\n <li>b&b</li>\r\n <li>\"ccc\"</li>\r\n</ul>\r\n"
347
+ ##
348
+ - name: nomatch1
349
+ desc: bug
350
+ input: &nomatch1|
351
+ <ul>
352
+ <li>foo</li>
353
+ </ul>
354
+ src: |
355
+ _buf = []; _buf << '<ul>
356
+ <li>foo</li>
357
+ </ul>
358
+ ';
359
+ _buf.join
360
+ output: *nomatch1
361
+ ##
362
+ - name: xml1
363
+ class: XmlEruby
364
+ input: |
365
+ <pre>
366
+ <% for item in list %>
367
+ <%= item %>
368
+ <%== item %>
369
+ <% end %>
370
+ </pre>
371
+ src: |
372
+ _buf = []; _buf << '<pre>
373
+ '; for item in list
374
+ _buf << ' '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '
375
+ '; _buf << ' '; _buf << ( item ).to_s; _buf << '
376
+ '; end
377
+ _buf << '</pre>
378
+ ';
379
+ _buf.join
380
+ output: |
381
+ <pre>
382
+ &lt;aaa&gt;
383
+ <aaa>
384
+ b&amp;b
385
+ b&b
386
+ &quot;ccc&quot;
387
+ "ccc"
388
+ </pre>
389
+ ##
390
+ - name: xml2
391
+ class: XmlEruby
392
+ testopt: skip_bufput
393
+ input: |
394
+ <% for item in list %>
395
+ <%= item["var#{n}"] %>
396
+ <%== item["var#{n}"] %>
397
+ <%=== item["var#{n}"] %>
398
+ <%==== item["var#{n}"] %>
399
+ <% end %>
400
+ src: |
401
+ _buf = []; for item in list
402
+ _buf << ' '; _buf << Erubis::XmlHelper.escape_xml( item["var#{n}"] ); _buf << '
403
+ '; _buf << ' '; _buf << ( item["var#{n}"] ).to_s; _buf << '
404
+ '; _buf << ' '; $stderr.puts("*** debug: item[\"var\#{n}\"]=#{(item["var#{n}"]).inspect}"); _buf << '
405
+ '; _buf << ' '; _buf << '
406
+ '; end
407
+ _buf.join
408
+ output: |
409
+ ##
410
+ - name: printout1
411
+ class: PrintOutEruby
412
+ testopt: print
413
+ input: *basic1_input
414
+ src: |4
415
+ print '<ul>
416
+ '; for item in list
417
+ print ' <li>'; print(( item ).to_s); print '</li>
418
+ '; end
419
+ print '</ul>
420
+ ';
421
+ output: *basic1_bufput
422
+ ##
423
+ - name: printenabled1
424
+ class: PrintEnabledEruby
425
+ input: &printenabled1_input|
426
+ <ul>
427
+ <% for item in list %>
428
+ <li><% print item %></li>
429
+ <% end %>
430
+ </ul>
431
+ src: |
432
+ @_buf = _buf = []; _buf << '<ul>
433
+ '; for item in list
434
+ _buf << ' <li>'; print item ; _buf << '</li>
435
+ '; end
436
+ _buf << '</ul>
437
+ ';
438
+ _buf.join
439
+ output: *basic1_bufput
440
+ # <ul>
441
+ # <li><aaa></li>
442
+ # <li>b&b</li>
443
+ # <li>"ccc"</li>
444
+ # </ul>
445
+ ##
446
+ - name: stdout1
447
+ class: StdoutEruby
448
+ testopt: stdout
449
+ input: *basic1_input
450
+ # <ul>
451
+ # <% for item in list %>
452
+ # <li><%= item %></li>
453
+ # <% end %>
454
+ # </ul>
455
+ src: |
456
+ _buf = $stdout; _buf << '<ul>
457
+ '; for item in list
458
+ _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
459
+ '; end
460
+ _buf << '</ul>
461
+ ';
462
+ ''
463
+ output: *basic1_bufput
464
+ # <ul>
465
+ # <li><aaa></li>
466
+ # <li>b&b</li>
467
+ # <li>"ccc"</li>
468
+ # </ul>
469
+ ##
470
+ - name: array1
471
+ class: ArrayEruby
472
+ input: |
473
+ <ul>
474
+ <% for item in list %>
475
+ <li><%= item %></li>
476
+ <% end %>
477
+ </ul>
478
+ src: |
479
+ _buf = []; _buf << '<ul>
480
+ '; for item in list
481
+ _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
482
+ '; end
483
+ _buf << '</ul>
484
+ ';
485
+ _buf
486
+ output:
487
+ - "<ul>\n"
488
+ - " <li>"
489
+ - "<aaa>"
490
+ - "</li>\n"
491
+ - " <li>"
492
+ - "b&b"
493
+ - "</li>\n"
494
+ - " <li>"
495
+ - "\"ccc\""
496
+ - "</li>\n"
497
+ - "</ul>\n"
498
+ ##
499
+ - name: stringbuffer1
500
+ class: StringBufferEruby
501
+ input: *basic1_input
502
+ # <ul>
503
+ # <% for item in list %>
504
+ # <li><%= item %></li>
505
+ # <% end %>
506
+ # </ul>
507
+ src: |
508
+ _buf = ''; _buf << '<ul>
509
+ '; for item in list
510
+ _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
511
+ '; end
512
+ _buf << '</ul>
513
+ ';
514
+ _buf
515
+ output: *basic1_bufput
516
+ # <ul>
517
+ # <li><aaa></li>
518
+ # <li>b&b</li>
519
+ # <li>"ccc"</li>
520
+ # </ul>
521
+ ##
522
+ - name: notext1
523
+ class: NoTextEruby
524
+ input: *basic1_input
525
+ src: |
526
+ _buf = [];
527
+ for item in list
528
+ _buf << ( item ).to_s;
529
+ end
530
+
531
+ _buf.join
532
+ output: '<aaa>b&b"ccc"'
533
+ ##
534
+ - name: simplified
535
+ class: SimplifiedEruby
536
+ input: |
537
+ <ul>
538
+ <% for item in list %>
539
+ <li>
540
+ <%= item %>
541
+ </li>
542
+ <% end %>
543
+ </ul>
544
+ src: |
545
+ _buf = []; _buf << '<ul>
546
+ '; for item in list ; _buf << '
547
+ <li>
548
+ '; _buf << ( item ).to_s; _buf << '
549
+ </li>
550
+ '; end ; _buf << '
551
+ </ul>
552
+ ';
553
+ _buf.join
554
+ output: |
555
+ <ul>
556
+ ^
557
+ <li>
558
+ <aaa>
559
+ </li>
560
+ ^
561
+ <li>
562
+ b&b
563
+ </li>
564
+ ^
565
+ <li>
566
+ "ccc"
567
+ </li>
568
+ ^
569
+ </ul>
570
+ ##
571
+ - name: bipattern1
572
+ class: BiPatternEruby
573
+ #options: { :bipattern : '\[= =\]' }
574
+ input: |
575
+ <% for item in list %>
576
+ <%= item %> % <%== item %>
577
+ [= item =] = [== item =]
578
+ <% end %>
579
+ src: |
580
+ _buf = []; for item in list
581
+ _buf << ' '; _buf << ( item ).to_s; _buf << ' % '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '
582
+ '; _buf << ' '; _buf << ( item ).to_s; _buf << ' = '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '
583
+ '; end
584
+ _buf.join
585
+ output: |4
586
+ <aaa> % &lt;aaa&gt;
587
+ <aaa> = &lt;aaa&gt;
588
+ b&b % b&amp;b
589
+ b&b = b&amp;b
590
+ "ccc" % &quot;ccc&quot;
591
+ "ccc" = &quot;ccc&quot;
592
+ ##
593
+ - name: bipattern2
594
+ class: BiPatternEruby
595
+ options: { :bipattern: '\$\{ \}' }
596
+ input: |
597
+ <% for item in list %>
598
+ <%=item%> % <%==item%>
599
+ ${item} = ${=item}
600
+ <% end %>
601
+ src: |
602
+ _buf = []; for item in list
603
+ _buf << ' '; _buf << (item).to_s; _buf << ' % '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '
604
+ '; _buf << ' '; _buf << (item).to_s; _buf << ' = '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '
605
+ '; end
606
+ _buf.join
607
+ output: |4
608
+ <aaa> % &lt;aaa&gt;
609
+ <aaa> = &lt;aaa&gt;
610
+ b&b % b&amp;b
611
+ b&b = b&amp;b
612
+ "ccc" % &quot;ccc&quot;
613
+ "ccc" = &quot;ccc&quot;
614
+ ##
615
+ - name: percentline1
616
+ class: PercentLineEruby
617
+ options:
618
+ input: |
619
+ <table>
620
+ % for item in list
621
+ <tr>
622
+ <td><%= item %></td>
623
+ <td><%== item %></td>
624
+ </tr>
625
+ % end
626
+ </table>
627
+ <pre>
628
+ %% double percent
629
+ % spaced percent
630
+ </pre>
631
+ src: |
632
+ _buf = []; _buf << '<table>
633
+ '; for item in list
634
+ _buf << ' <tr>
635
+ <td>'; _buf << ( item ).to_s; _buf << '</td>
636
+ <td>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</td>
637
+ </tr>
638
+ '; end
639
+ _buf << '</table>
640
+ <pre>
641
+ '; _buf << '% double percent
642
+ '; _buf << ' % spaced percent
643
+ </pre>
644
+ ';
645
+ _buf.join
646
+ output: |
647
+ <table>
648
+ <tr>
649
+ <td><aaa></td>
650
+ <td>&lt;aaa&gt;</td>
651
+ </tr>
652
+ <tr>
653
+ <td>b&b</td>
654
+ <td>b&amp;b</td>
655
+ </tr>
656
+ <tr>
657
+ <td>"ccc"</td>
658
+ <td>&quot;ccc&quot;</td>
659
+ </tr>
660
+ </table>
661
+ <pre>
662
+ % double percent
663
+ % spaced percent
664
+ </pre>
665
+ ##
666
+ - name: headerfooter1
667
+ class: HeaderFooterEruby
668
+ options:
669
+ testopt: eval('ordered_list(list)')
670
+ input: |
671
+ <!--#header:
672
+ def ordered_list(list)
673
+ #-->
674
+ <ol>
675
+ <% for item in list %>
676
+ <li><%==item%></li>
677
+ <% end %>
678
+ </ol>
679
+ <!--#footer: end #-->
680
+ src: |4
681
+
682
+ def ordered_list(list)
683
+
684
+ _buf = []; _buf << '<ol>
685
+ '; for item in list
686
+ _buf << ' <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '</li>
687
+ '; end
688
+ _buf << '</ol>
689
+ ';
690
+ _buf.join
691
+ end
692
+ output: |
693
+ <ol>
694
+ <li>&lt;aaa&gt;</li>
695
+ <li>b&amp;b</li>
696
+ <li>&quot;ccc&quot;</li>
697
+ </ol>
698
+ ##
699
+ - name: optimized1
700
+ class: OptimizedEruby
701
+ input: &optimized1_input|
702
+ <table>
703
+ <% for item in list %>
704
+ <tr>
705
+ <td><%= item %></td>
706
+ <td><%== item %></td>
707
+ </tr>
708
+ <% end %>
709
+ </table>
710
+ <ul><% for item in list %><li><%= item %></li><% end %></ul>
711
+ src: |
712
+ _buf = '<table>
713
+ '; for item in list
714
+ _buf << ' <tr>
715
+ <td>' << ( item ).to_s << '</td>
716
+ <td>' << Erubis::XmlHelper.escape_xml( item ) << '</td>
717
+ </tr>
718
+ '; end
719
+ _buf << '</table>
720
+ <ul>'; for item in list ; _buf << '<li>' << ( item ).to_s << '</li>'; end ; _buf << '</ul>
721
+ '
722
+ _buf
723
+ output: |
724
+ <table>
725
+ <tr>
726
+ <td><aaa></td>
727
+ <td>&lt;aaa&gt;</td>
728
+ </tr>
729
+ <tr>
730
+ <td>b&b</td>
731
+ <td>b&amp;b</td>
732
+ </tr>
733
+ <tr>
734
+ <td>"ccc"</td>
735
+ <td>&quot;ccc&quot;</td>
736
+ </tr>
737
+ </table>
738
+ <ul><li><aaa></li><li>b&b</li><li>"ccc"</li></ul>
739
+ ##
740
+ - name: optimized2
741
+ class: OptimizedXmlEruby
742
+ input: *optimized1_input
743
+ # <table>
744
+ # <% for item in list %>
745
+ # <tr>
746
+ # <td><%= item %></td>
747
+ # <td><%== item %></td>
748
+ # </tr>
749
+ # <% end %>
750
+ # </table>
751
+ # <ul><% for item in list %><li><%= item %></li><% end %></ul>
752
+ src: |
753
+ _buf = '<table>
754
+ '; for item in list
755
+ _buf << ' <tr>
756
+ <td>' << Erubis::XmlHelper.escape_xml( item ) << '</td>
757
+ <td>' << ( item ).to_s << '</td>
758
+ </tr>
759
+ '; end
760
+ _buf << '</table>
761
+ <ul>'; for item in list ; _buf << '<li>' << Erubis::XmlHelper.escape_xml( item ) << '</li>'; end ; _buf << '</ul>
762
+ '
763
+ _buf
764
+ output: |
765
+ <table>
766
+ <tr>
767
+ <td>&lt;aaa&gt;</td>
768
+ <td><aaa></td>
769
+ </tr>
770
+ <tr>
771
+ <td>b&amp;b</td>
772
+ <td>b&b</td>
773
+ </tr>
774
+ <tr>
775
+ <td>&quot;ccc&quot;</td>
776
+ <td>"ccc"</td>
777
+ </tr>
778
+ </table>
779
+ <ul><li>&lt;aaa&gt;</li><li>b&amp;b</li><li>&quot;ccc&quot;</li></ul>
780
+ ##
781
+ - name: optimized3
782
+ desc: bug
783
+ class: OptimizedEruby
784
+ input: |
785
+ user = <%= "Foo" %>
786
+ <% for item in list %>
787
+ <%= item %>
788
+ <% end %>
789
+ src: |
790
+ _buf = 'user = '; _buf << ( "Foo" ).to_s << '
791
+ '; for item in list
792
+ _buf << ' ' << ( item ).to_s << '
793
+ '; end
377
794
 
378
- end
379
- _out << "</table>\n<ul>"
380
- for item in list ; _out << "<li>"; _out << Erubis::XmlEruby.escape( item ); _out << "</li>"; end ; _out << "</ul>\n"
381
- _out
382
- output: |
383
- <table>
384
- <tr>
385
- <td>&lt;aaa&gt;</td>
386
- <td><aaa></td>
387
- </tr>
388
- <tr>
389
- <td>b&amp;b</td>
390
- <td>b&b</td>
391
- </tr>
392
- <tr>
393
- <td>&quot;ccc&quot;</td>
394
- <td>"ccc"</td>
395
- </tr>
396
- </table>
397
- <ul><li>&lt;aaa&gt;</li><li>b&amp;b</li><li>&quot;ccc&quot;</li></ul>
398
- ##
399
- ---
400
- name: fast3
401
- desc: bug
402
- class: FastEruby
403
- input: |
404
- user = <%= "Foo" %>
405
- <% for item in list %>
406
- <%= item %>
407
- <% end %>
408
- src: |
409
- _out = ''; _out << "user = "; _out << ( "Foo" ).to_s; _out << "\n"
410
- for item in list
411
- _out << " "; _out << ( item ).to_s; _out << "\n"
412
- end
413
- _out
414
- # _out = ''; _out << "user = "; _out << ( "Foo" ).to_s; _out << "\n"
415
- # _out << ""; for item in list
416
- # _out << ""; _out << " "; _out << ( item ).to_s; _out << "\n"
417
- # _out << ""; end
418
- # _out << ""; _out
419
- output: |
420
- user = Foo
421
- <aaa>
422
- b&b
423
- "ccc"
424
- ##
425
- ---
426
- name: stdout1
427
- class: StdoutEruby
428
- testopt: stdout
429
- input: |
430
- <ul>
431
- <% for item in list %>
432
- <li><%= item %></li>
433
- <% end %>
434
- </ul>
435
- src: |
436
- _out = $stdout; _out << "<ul>\n"
437
- for item in list
438
- _out << " <li>"; _out << ( item ).to_s; _out << "</li>\n"
439
- end
440
- _out << "</ul>\n"
441
- nil
442
- output: |
443
- <ul>
444
- <li><aaa></li>
445
- <li>b&b</li>
446
- <li>"ccc"</li>
447
- </ul>
448
- ---
449
- name: print1
450
- class: PrintEruby
451
- input: |
452
- <ul>
453
- <% for item in list %>
454
- <li><% print item %></li>
455
- <% end %>
456
- </ul>
457
- src: |
458
- @_out = _out = ''; _out << "<ul>\n"
459
- for item in list
460
- _out << " <li>"; print item ; _out << "</li>\n"
461
- end
462
- _out << "</ul>\n"
463
- _out
464
- output: |
465
- <ul>
466
- <li><aaa></li>
467
- <li>b&b</li>
468
- <li>"ccc"</li>
469
- </ul>
470
- ---
471
- name: print2
472
- class: PrintXmlEruby
473
- input: |
474
- <ul>
475
- <% for item in list %>
476
- <li><% print item %></li>
477
- <% end %>
478
- </ul>
479
- src: |
480
- @_out = _out = ''; _out << "<ul>\n"
481
- for item in list
482
- _out << " <li>"; print item ; _out << "</li>\n"
483
- end
484
- _out << "</ul>\n"
485
- _out
486
- output: |
487
- <ul>
488
- <li><aaa></li>
489
- <li>b&b</li>
490
- <li>"ccc"</li>
491
- </ul>
492
- ---
493
- name: loadfile1
494
- testopt: load_file
495
- #input: |
496
- # <ul>
497
- # <% for item in list %>
498
- # <li><%= item %></li>
499
- # <% end %>
500
- # </ul>
501
- input:
502
- "<ul>\r\n <% for item in list %>\r\n <li><%= item %></li>\r\n <% end %>\r\n</ul>\r\n"
503
- #src: |
504
- # _out = ''; _out << "<ul>\n"
505
- # for item in list
506
- # _out << " <li>"; _out << ( item ).to_s; _out << "</li>\n"
507
- # end
508
- # _out << "</ul>\n"
509
- # _out
510
- src:
511
- "_out = ''; _out << \"<ul>\\r\\n\"\n for item in list \r\n_out << \" <li>\"; _out << ( item ).to_s; _out << \"</li>\\r\\n\"\n end \r\n_out << \"</ul>\\r\\n\"\n_out\n"
512
- #output: |
513
- # <ul>
514
- # <li><aaa></li>
515
- # <li>b&b</li>
516
- # <li>"ccc"</li>
517
- # </ul>
518
- output:
519
- "<ul>\r\n <li><aaa></li>\r\n <li>b&b</li>\r\n <li>\"ccc\"</li>\r\n</ul>\r\n"
520
- ##
521
- ---
522
- name: nomatch1
523
- desc: bug
524
- input: |
525
- <ul>
526
- <li>foo</li>
527
- </ul>
528
- src: |
529
- _out = ''; _out << "<ul>\n"
530
- _out << " <li>foo</li>\n"
531
- _out << "</ul>\n"
532
- _out
533
- output: |
534
- <ul>
535
- <li>foo</li>
536
- </ul>
795
+ _buf
796
+ output: |
797
+ user = Foo
798
+ <aaa>
799
+ b&b
800
+ "ccc"
801
+ ##
802
+ - name: optimized4
803
+ desc: single quotation and backslash
804
+ class: OptimizedEruby
805
+ input: &optimized4_input|
806
+ a = "'"
807
+ b = "\""
808
+ c = '\''
809
+ src: |
810
+ _buf = 'a = "\'"
811
+ b = "\\""
812
+ c = \'\\\'\'
813
+ ';
814
+ _buf
815
+ output: *optimized4_input
816
+ ##
817
+ - name: tiny1
818
+ class: TinyEruby
819
+ testopt: binding
820
+ input: |
821
+ <ul>
822
+ <% for item in list %>
823
+ <li><%= item %></li>
824
+ <% end %>
825
+ </ul>
826
+ src: |
827
+ _buf = []; _buf << '<ul>
828
+ '; for item in list ; _buf << '
829
+ <li>'; _buf << ( item ).to_s; _buf << '</li>
830
+ '; end ; _buf << '
831
+ </ul>
832
+ ';
833
+ _buf.join
834
+ output: |
835
+ <ul>
836
+ ^
837
+ <li><aaa></li>
838
+ ^
839
+ <li>b&b</li>
840
+ ^
841
+ <li>"ccc"</li>
842
+ ^
843
+ </ul>
844
+ ##
845
+ - name: tiny2
846
+ class: TinyEruby
847
+ testopt: evaluate
848
+ input: |
849
+ <ul>
850
+ <% for item in @list %>
851
+ <li><%= item %></li>
852
+ <% end %>
853
+ </ul>
854
+ src: |
855
+ _buf = []; _buf << '<ul>
856
+ '; for item in @list ; _buf << '
857
+ <li>'; _buf << ( item ).to_s; _buf << '</li>
858
+ '; end ; _buf << '
859
+ </ul>
860
+ ';
861
+ _buf.join
862
+ output: |
863
+ <ul>
864
+ ^
865
+ <li><aaa></li>
866
+ ^
867
+ <li>b&b</li>
868
+ ^
869
+ <li>"ccc"</li>
870
+ ^
871
+ </ul>
537
872
  ##