426 lines
10 KiB
Ruby
426 lines
10 KiB
Ruby
##
|
|
## $Release: 2.7.0 $
|
|
## copyright(c) 2006-2011 kuwata-lab.com all rights reserved.
|
|
##
|
|
|
|
require "#{File.dirname(__FILE__)}/test.rb"
|
|
|
|
require 'erubis'
|
|
require 'erubis/engine/eruby'
|
|
require 'erubis/engine/ephp'
|
|
require 'erubis/engine/ec'
|
|
require 'erubis/engine/ecpp'
|
|
require 'erubis/engine/ejava'
|
|
require 'erubis/engine/escheme'
|
|
require 'erubis/engine/eperl'
|
|
require 'erubis/engine/ejavascript'
|
|
|
|
|
|
class EnginesTest < Test::Unit::TestCase
|
|
|
|
#load_yaml_documents(__FILE__)
|
|
testdata_list = load_yaml_datafile(__FILE__)
|
|
define_testmethods(testdata_list)
|
|
|
|
def _test()
|
|
klass = Erubis.const_get(@class)
|
|
engine = klass.new(@input, @options || {})
|
|
actual = engine.src
|
|
assert_text_equal(@expected, actual)
|
|
end
|
|
|
|
|
|
self.post_definition()
|
|
|
|
end
|
|
|
|
__END__
|
|
- name: ruby1
|
|
lang: ruby
|
|
class: Eruby
|
|
options:
|
|
input: |
|
|
<table>
|
|
<tbody>
|
|
<% i = 0
|
|
list.each_with_index do |item, i| %>
|
|
<tr>
|
|
<td><%= i+1 %></td>
|
|
<td><%== list %></td>
|
|
</tr>
|
|
<% end %>
|
|
</tbody>
|
|
</table>
|
|
<%=== i+1 %>
|
|
expected: |
|
|
_buf = ''; _buf << '<table>
|
|
<tbody>
|
|
'; i = 0
|
|
list.each_with_index do |item, i|
|
|
_buf << ' <tr>
|
|
<td>'; _buf << ( i+1 ).to_s; _buf << '</td>
|
|
<td>'; _buf << Erubis::XmlHelper.escape_xml( list ); _buf << '</td>
|
|
</tr>
|
|
'; end
|
|
_buf << ' </tbody>
|
|
</table>
|
|
'; $stderr.puts("*** debug: i+1=#{(i+1).inspect}"); _buf << '
|
|
';
|
|
_buf.to_s
|
|
##
|
|
- name: ruby2_options
|
|
lang: ruby
|
|
class: Eruby
|
|
options: { :bufvar: '@_out_buf' }
|
|
input: |
|
|
<table>
|
|
<% for item in @items %>
|
|
<tr>
|
|
<td><%= i+1 %></td>
|
|
<td><%== list %></td>
|
|
</tr>
|
|
<% end %>
|
|
</table>
|
|
expected: |
|
|
@_out_buf = ''; @_out_buf << '<table>
|
|
'; for item in @items
|
|
@_out_buf << ' <tr>
|
|
<td>'; @_out_buf << ( i+1 ).to_s; @_out_buf << '</td>
|
|
<td>'; @_out_buf << Erubis::XmlHelper.escape_xml( list ); @_out_buf << '</td>
|
|
</tr>
|
|
'; end
|
|
@_out_buf << '</table>
|
|
';
|
|
@_out_buf.to_s
|
|
##
|
|
- name: php1
|
|
lang: php
|
|
class: Ephp
|
|
options:
|
|
input: |
|
|
<table>
|
|
<tbody>
|
|
<%
|
|
$i = 0;
|
|
foreach ($list as $item) {
|
|
$i++;
|
|
%>
|
|
<tr>
|
|
<td><%= $i %></td>
|
|
<td><%== $item %></td>
|
|
</tr>
|
|
<%
|
|
}
|
|
%>
|
|
</tbody>
|
|
</table>
|
|
<%=== $i %>
|
|
expected: |
|
|
<table>
|
|
<tbody>
|
|
<?php
|
|
$i = 0;
|
|
foreach ($list as $item) {
|
|
$i++;
|
|
?>
|
|
<tr>
|
|
<td><?php echo $i; ?></td>
|
|
<td><?php echo htmlspecialchars($item); ?></td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
?>
|
|
</tbody>
|
|
</table>
|
|
<?php error_log('*** debug: $i='.($i), 0); ?>
|
|
##
|
|
- name: c1
|
|
lang: c
|
|
class: Ec
|
|
options: { :filename: foo.html, :indent: ' ' }
|
|
input: |4
|
|
<table>
|
|
<tbody>
|
|
<% for (i = 0; i < list; i++) { %>
|
|
<tr>
|
|
<td><%= "%d", i %></td>
|
|
<td><%== list[i] %></td>
|
|
</tr>
|
|
<% } %>
|
|
</tbody>
|
|
</table>
|
|
<%=== "%d", i %>
|
|
expected: |
|
|
#line 1 "foo.html"
|
|
fputs("<table>\n"
|
|
" <tbody>\n", stdout);
|
|
for (i = 0; i < list; i++) {
|
|
fputs(" <tr>\n"
|
|
" <td>", stdout); fprintf(stdout, "%d", i); fputs("</td>\n"
|
|
" <td>", stdout); escape(list[i], stdout); fputs("</td>\n"
|
|
" </tr>\n", stdout);
|
|
}
|
|
fputs(" </tbody>\n"
|
|
"</table>\n", stdout);
|
|
fprintf(stderr, "*** debug: i=" "%d", i); fputs("\n", stdout);
|
|
##
|
|
- name: cpp1
|
|
lang: cpp
|
|
class: Ecpp
|
|
options: { :filename: foo.html, :indent: ' ' }
|
|
input: |4
|
|
<table>
|
|
<tbody>
|
|
<% for (i = 0; i < n; i++) { %>
|
|
<tr>
|
|
<td><%= i %></td>
|
|
<td><%== list[i] %></td>
|
|
</tr>
|
|
<% } %>
|
|
</tbody>
|
|
</table>
|
|
<%=== i %>
|
|
expected: |
|
|
#line 1 "foo.html"
|
|
_buf << "<table>\n"
|
|
" <tbody>\n";
|
|
for (i = 0; i < n; i++) {
|
|
_buf << " <tr>\n"
|
|
" <td>"; _buf << (i); _buf << "</td>\n"
|
|
" <td>"; escape(list[i]); _buf << "</td>\n"
|
|
" </tr>\n";
|
|
}
|
|
_buf << " </tbody>\n"
|
|
"</table>\n";
|
|
std::cerr << "*** debug: i=" << (i); _buf << "\n";
|
|
##
|
|
- name: java1
|
|
lang: java
|
|
class: Ejava
|
|
options: { :buf: _buf, :bufclass: StringBuilder, :indent: ' ' }
|
|
input: |
|
|
<table>
|
|
<tbody>
|
|
<%
|
|
int i = 0;
|
|
for (Iterator it = list.iterator(); it.hasNext(); ) {
|
|
String s = (String)it.next();
|
|
i++;
|
|
%>
|
|
<tr class="<%= i%2==0 ? "even" : "odd" %>">
|
|
<td><%= i %></td>
|
|
<td><%== s %></td>
|
|
</tr>
|
|
<%
|
|
}
|
|
%>
|
|
<tbody>
|
|
</table>
|
|
<%=== i %>
|
|
expected: |4
|
|
StringBuilder _buf = new StringBuilder(); _buf.append("<table>\n"
|
|
+ " <tbody>\n");
|
|
|
|
int i = 0;
|
|
for (Iterator it = list.iterator(); it.hasNext(); ) {
|
|
String s = (String)it.next();
|
|
i++;
|
|
|
|
_buf.append(" <tr class=\""); _buf.append(i%2==0 ? "even" : "odd"); _buf.append("\">\n"
|
|
+ " <td>"); _buf.append(i); _buf.append("</td>\n"
|
|
+ " <td>"); _buf.append(escape(s)); _buf.append("</td>\n"
|
|
+ " </tr>\n");
|
|
|
|
}
|
|
|
|
_buf.append(" <tbody>\n"
|
|
+ "</table>\n");
|
|
System.err.println("*** debug: i="+(i)); _buf.append("\n");
|
|
return _buf.toString();
|
|
##
|
|
- name: scheme1
|
|
lang: scheme
|
|
class: Escheme
|
|
options:
|
|
input: &scheme1_input|
|
|
<% (let ((i 0)) %>
|
|
<table>
|
|
<tbody>
|
|
<%
|
|
(for-each
|
|
(lambda (item)
|
|
(set! i (+ i 1))
|
|
%>
|
|
<tr>
|
|
<td><%= i %></td>
|
|
<td><%== item %></td>
|
|
</tr>
|
|
<%
|
|
); lambda end
|
|
list); for-each end
|
|
%>
|
|
</tbody>
|
|
</table>
|
|
<%=== i %>
|
|
<% ); let end %>
|
|
expected: |4
|
|
(let ((_buf '())) (define (_add x) (set! _buf (cons x _buf))) (let ((i 0))
|
|
(_add "<table>
|
|
<tbody>\n")
|
|
|
|
(for-each
|
|
(lambda (item)
|
|
(set! i (+ i 1))
|
|
|
|
(_add " <tr>
|
|
<td>")(_add i)(_add "</td>
|
|
<td>")(_add (escape item))(_add "</td>
|
|
</tr>\n")
|
|
|
|
); lambda end
|
|
list); for-each end
|
|
|
|
(_add " </tbody>
|
|
</table>\n")
|
|
(display "*** debug: i=")(display i)(display "\n")(_add "\n")
|
|
); let end
|
|
(reverse _buf))
|
|
|
|
##
|
|
- name: scheme2
|
|
lang: scheme
|
|
class: Escheme
|
|
options: { :func: 'display' }
|
|
input: *scheme1_input
|
|
expected: |4
|
|
(let ((i 0))
|
|
(display "<table>
|
|
<tbody>\n")
|
|
|
|
(for-each
|
|
(lambda (item)
|
|
(set! i (+ i 1))
|
|
|
|
(display " <tr>
|
|
<td>")(display i)(display "</td>
|
|
<td>")(display (escape item))(display "</td>
|
|
</tr>\n")
|
|
|
|
); lambda end
|
|
list); for-each end
|
|
|
|
(display " </tbody>
|
|
</table>\n")
|
|
(display "*** debug: i=")(display i)(display "\n")(display "\n")
|
|
); let end
|
|
##
|
|
- name: perl1
|
|
lang: perl
|
|
class: Eperl
|
|
options:
|
|
input: |
|
|
<%
|
|
my $user = 'Erubis';
|
|
my @list = ('<aaa>', 'b&b', '"ccc"');
|
|
%>
|
|
<p>Hello <%= $user %>!</p>
|
|
<table>
|
|
<tbody>
|
|
<% $i = 0; %>
|
|
<% for $item (@list) { %>
|
|
<tr bgcolor=<%= ++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
|
|
<td><%= $i %></td>
|
|
<td><%== $item %></td>
|
|
</tr>
|
|
<% } %>
|
|
</tbody>
|
|
</table>
|
|
<%=== $i %>
|
|
expected: |4
|
|
use HTML::Entities;
|
|
my $user = 'Erubis';
|
|
my @list = ('<aaa>', 'b&b', '"ccc"');
|
|
|
|
print('<p>Hello '); print($user); print('!</p>
|
|
<table>
|
|
<tbody>
|
|
'); $i = 0;
|
|
for $item (@list) {
|
|
print(' <tr bgcolor='); print(++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); print('">
|
|
<td>'); print($i); print('</td>
|
|
<td>'); print(encode_entities($item)); print('</td>
|
|
</tr>
|
|
'); }
|
|
print(' </tbody>
|
|
</table>
|
|
'); print('*** debug: $i=', $i, "\n");print('
|
|
');
|
|
##
|
|
- name: javascript1
|
|
lang: javascript
|
|
class: Ejavascript
|
|
options:
|
|
input: &javascript_input |
|
|
<%
|
|
var user = 'Erubis';
|
|
var list = ['<aaa>', 'b&b', '"ccc"'];
|
|
%>
|
|
<p>Hello <%= user %>!</p>
|
|
<table>
|
|
<tbody>
|
|
<% var i; %>
|
|
<% for (i = 0; i < list.length; i++) { %>
|
|
<tr bgcolor=<%= ++i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
|
|
<td><%= i %></td>
|
|
<td><%= list[i] %></td>
|
|
</tr>
|
|
<% } %>
|
|
</tbody>
|
|
</table>
|
|
<%=== i %>
|
|
expected: |4
|
|
var _buf = [];
|
|
var user = 'Erubis';
|
|
var list = ['<aaa>', 'b&b', '"ccc"'];
|
|
|
|
_buf.push("<p>Hello "); _buf.push(user); _buf.push("!</p>\n\
|
|
<table>\n\
|
|
<tbody>\n");
|
|
var i;
|
|
for (i = 0; i < list.length; i++) {
|
|
_buf.push(" <tr bgcolor="); _buf.push(++i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); _buf.push("\">\n\
|
|
<td>"); _buf.push(i); _buf.push("</td>\n\
|
|
<td>"); _buf.push(list[i]); _buf.push("</td>\n\
|
|
</tr>\n");
|
|
}
|
|
_buf.push(" </tbody>\n\
|
|
</table>\n");
|
|
alert("*** debug: i="+(i)); _buf.push("\n");
|
|
document.write(_buf.join(""));
|
|
##
|
|
- name: javascript2
|
|
lang: javascript
|
|
class: Ejavascript
|
|
options: { :docwrite: false }
|
|
input: *javascript_input
|
|
expected: |4
|
|
var _buf = [];
|
|
var user = 'Erubis';
|
|
var list = ['<aaa>', 'b&b', '"ccc"'];
|
|
|
|
_buf.push("<p>Hello "); _buf.push(user); _buf.push("!</p>\n\
|
|
<table>\n\
|
|
<tbody>\n");
|
|
var i;
|
|
for (i = 0; i < list.length; i++) {
|
|
_buf.push(" <tr bgcolor="); _buf.push(++i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); _buf.push("\">\n\
|
|
<td>"); _buf.push(i); _buf.push("</td>\n\
|
|
<td>"); _buf.push(list[i]); _buf.push("</td>\n\
|
|
</tr>\n");
|
|
}
|
|
_buf.push(" </tbody>\n\
|
|
</table>\n");
|
|
alert("*** debug: i="+(i)); _buf.push("\n");
|
|
_buf.join("");
|
|
##
|