3
## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
6
require "#{File.dirname(__FILE__)}/test.rb"
11
require 'erubis/engine/enhanced'
12
require 'erubis/engine/optimized'
15
class EnhancersTest < Test::Unit::TestCase
17
testdata_list = load_yaml_datafile(__FILE__)
18
define_testmethods(testdata_list)
23
@output.gsub!(/\^/, ' ') if @output.is_a?(String)
26
@class.split('::').each do |name| k = k.const_get(name) end
29
@klass = Erubis::Eruby
32
@chomp.each do |target|
34
when 'src' ; @src.chomp!
35
when 'input' ; @input.chomp!
36
when 'expected' ; @expected.chomp!
38
raise "#{@name}: invalid chomp value: #{@chomp.inspect}"
42
if @testopt == 'load_file'
43
filename = "tmp.#{@name}.eruby"
45
File.open(filename, 'w') { |f| f.write(@input) }
46
eruby = @klass.load_file(filename, @options)
48
cachename = filename + '.cache'
49
File.unlink(cachename) if test(?f, cachename)
50
File.unlink(filename) if test(?f, filename)
53
#if @klass == Erubis::TinyEruby
54
# eruby = @klass.new(@input)
56
eruby = @klass.new(@input, @options)
59
assert_text_equal(@src, eruby.src)
61
return if @testopt == 'skip_output'
63
list = ['<aaa>', 'b&b', '"ccc"']
64
context = @testopt == 'context' ? Erubis::Context.new : {}
70
actual = eval @testopt
71
assert_text_equal(@output, actual)
72
when 'stdout', 'print'
75
$stdout = stringio = StringIO.new
76
#actual = eruby.evaluate(context)
77
actual = eruby.result(context)
81
if @testopt == 'stdout'
82
assert_equal("", actual)
86
assert_text_equal(@output, stringio.string)
87
when 'evaluate', 'context'
88
actual = eruby.evaluate(context)
89
assert_text_equal(@output, actual)
91
actual = eruby.result(binding())
92
assert_text_equal(@output, actual)
94
actual = eruby.result(context)
95
assert_text_equal(@output, actual)
100
self.post_definition()
109
input: &basic1_input|
111
<% for item in list %>
116
_buf = ''; _buf << '<ul>
118
_buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
123
output: &basic1_output|
134
<% for item in list %>
140
_buf = ''; _buf << '<pre>
142
_buf << ' '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '
143
'; _buf << ' '; _buf << ( item ).to_s; _buf << '
163
<% for item in list %>
164
<%= item["var#{n}"] %>
165
<%== item["var#{n}"] %>
166
<%=== item["var#{n}"] %>
167
<%==== item["var#{n}"] %>
170
_buf = ''; for item in list
171
_buf << ' '; _buf << Erubis::XmlHelper.escape_xml( item["var#{n}"] ); _buf << '
172
'; _buf << ' '; _buf << ( item["var#{n}"] ).to_s; _buf << '
173
'; _buf << ' '; $stderr.puts("*** debug: item[\"var\#{n}\"]=#{(item["var#{n}"]).inspect}"); _buf << '
174
'; _buf << ' '; _buf << '
187
print ' <li>'; print(( item ).to_s); print '</li>
191
output: *basic1_output
194
- name: printenabled1
195
class: PrintEnabledEruby
196
input: &printenabled1_input|
198
<% for item in list %>
199
<li><% print item %></li>
203
@_buf = _buf = ''; _buf << '<ul>
205
_buf << ' <li>'; print item ; _buf << '</li>
210
output: *basic1_output
223
# <% for item in list %>
224
# <li><%= item %></li>
228
_buf = $stdout; _buf << '<ul>
230
_buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
235
output: *basic1_output
247
<% for item in list %>
252
_buf = []; _buf << '<ul>
254
_buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
274
class: ArrayBufferEruby
277
_buf = []; _buf << '<ul>
279
_buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
284
output: *basic1_output
286
- name: stringbuffer1
287
class: StringBufferEruby
290
# <% for item in list %>
291
# <li><%= item %></li>
295
_buf = ''; _buf << '<ul>
297
_buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
302
output: *basic1_output
314
_erbout = _buf = ''; _buf << '<ul>
316
_buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
321
output: *basic1_output
328
_buf = StringIO.new; _buf << '<ul>
330
_buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
335
output: *basic1_output
344
_buf << ( item ).to_s;
348
output: '<aaa>b&b"ccc"'
366
class: SimplifiedEruby
369
<% for item in list %>
376
_buf = ''; _buf << '<ul>
377
'; for item in list ; _buf << '
379
'; _buf << ( item ).to_s; _buf << '
404
class: BiPatternEruby
405
#options: { :bipattern : '\[= =\]' }
407
<% for item in list %>
408
<%= item %> % <%== item %>
409
[= item =] = [== item =]
412
_buf = ''; for item in list
413
_buf << ' '; _buf << ( item ).to_s; _buf << ' % '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '
414
'; _buf << ' '; _buf << ( item ).to_s; _buf << ' = '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '
422
"ccc" % "ccc"
423
"ccc" = "ccc"
427
class: BiPatternEruby
428
options: { :bipattern: '\$\{ \}' }
430
<% for item in list %>
431
<%=item%> % <%==item%>
435
_buf = ''; for item in list
436
_buf << ' '; _buf << (item).to_s; _buf << ' % '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '
437
'; _buf << ' '; _buf << (item).to_s; _buf << ' = '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '
445
"ccc" % "ccc"
446
"ccc" = "ccc"
450
class: PercentLineEruby
457
<td><%== item %></td>
466
_buf = ''; _buf << '<table>
469
<td>'; _buf << ( item ).to_s; _buf << '</td>
470
<td>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</td>
492
<td>"ccc"</td>
501
- name: prefixedline1
502
class: PrefixedLineEruby
503
options: { :prefixchar: '!' }
509
<td><%== item %></td>
514
!! doubled characters
517
_buf = ''; _buf << '<table>
520
<td>'; _buf << ( item ).to_s; _buf << '</td>
521
<td>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</td>
542
<td>"ccc"</td>
550
- name: headerfooter1
551
class: HeaderFooterEruby
553
testopt: eval('ordered_list(list)')
556
def ordered_list(list)
559
<% for item in list %>
563
<!--#footer: end #-->
566
def ordered_list(list)
568
_buf = ''; _buf << '<ol>
570
_buf << ' <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '</li>
580
<li>"ccc"</li>
584
- name: deleteindent1
585
class: DeleteIndentEruby
590
_buf = ''; _buf << '<ul>
592
_buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>
605
- name: interpolation1
606
class: InterpolationEruby
611
_buf = ''; _buf << %Q`<ul>\n`
613
_buf << %Q` <li>#{ item }</li>\n`
617
output: *basic1_output
619
- name: interpolation2
620
desc: sharp, back-quote, and backslash should be escaped, but other quotes should not be escaped (reported by andrewj)
621
class: InterpolationEruby
626
<p><%= `echo back-tick operator` %></p>
628
<p>'single quote'</p>
629
<p>"double quote"</p>
632
_buf = ''; _buf << %Q`<p>\`back-quote\`</p>
633
<p>#{ `echo back-tick operator` }</p>
635
<p>'single quote'</p>
636
<p>"double quote"</p>
637
<p>backslash\\n\\t</p>\n`
641
<p>back-tick operator
644
<p>'single quote'</p>
645
<p>"double quote"</p>