/ubuntu-hardy/gems/erubis-2.6.2/test/test-engines.rb

https://github.com/joevandyk/merb-gems · Ruby · 370 lines · 339 code · 21 blank · 10 comment · 9 complexity · 9d341f79de81e39e055c8acba206f23c MD5 · raw file

  1. ##
  2. ## $Rev: 115 $
  3. ## $Release: 2.6.2 $
  4. ## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
  5. ##
  6. require "#{File.dirname(__FILE__)}/test.rb"
  7. require 'erubis'
  8. require 'erubis/engine/eruby'
  9. require 'erubis/engine/ephp'
  10. require 'erubis/engine/ec'
  11. require 'erubis/engine/ejava'
  12. require 'erubis/engine/escheme'
  13. require 'erubis/engine/eperl'
  14. require 'erubis/engine/ejavascript'
  15. class EnginesTest < Test::Unit::TestCase
  16. #load_yaml_documents(__FILE__)
  17. testdata_list = load_yaml_datafile(__FILE__)
  18. define_testmethods(testdata_list)
  19. def _test()
  20. klass = Erubis.const_get(@class)
  21. engine = klass.new(@input, @options || {})
  22. actual = engine.src
  23. assert_text_equal(@expected, actual)
  24. end
  25. self.post_definition()
  26. end
  27. __END__
  28. - name: ruby1
  29. lang: ruby
  30. class: Eruby
  31. options:
  32. input: |
  33. <table>
  34. <tbody>
  35. <% i = 0
  36. list.each_with_index do |item, i| %>
  37. <tr>
  38. <td><%= i+1 %></td>
  39. <td><%== list %></td>
  40. </tr>
  41. <% end %>
  42. </tbody>
  43. </table>
  44. <%=== i+1 %>
  45. expected: |
  46. _buf = ''; _buf << '<table>
  47. <tbody>
  48. '; i = 0
  49. list.each_with_index do |item, i|
  50. _buf << ' <tr>
  51. <td>'; _buf << ( i+1 ).to_s; _buf << '</td>
  52. <td>'; _buf << Erubis::XmlHelper.escape_xml( list ); _buf << '</td>
  53. </tr>
  54. '; end
  55. _buf << ' </tbody>
  56. </table>
  57. '; $stderr.puts("*** debug: i+1=#{(i+1).inspect}"); _buf << '
  58. ';
  59. _buf.to_s
  60. ##
  61. - name: php1
  62. lang: php
  63. class: Ephp
  64. options:
  65. input: |
  66. <table>
  67. <tbody>
  68. <%
  69. $i = 0;
  70. foreach ($list as $item) {
  71. $i++;
  72. %>
  73. <tr>
  74. <td><%= $i %></td>
  75. <td><%== $item %></td>
  76. </tr>
  77. <%
  78. }
  79. %>
  80. </tbody>
  81. </table>
  82. <%=== $i %>
  83. expected: |
  84. <table>
  85. <tbody>
  86. <?php
  87. $i = 0;
  88. foreach ($list as $item) {
  89. $i++;
  90. ?>
  91. <tr>
  92. <td><?php echo $i; ?></td>
  93. <td><?php echo htmlspecialchars($item); ?></td>
  94. </tr>
  95. <?php
  96. }
  97. ?>
  98. </tbody>
  99. </table>
  100. <?php error_log('*** debug: $i='.($i), 0); ?>
  101. ##
  102. - name: c1
  103. lang: c
  104. class: Ec
  105. options: { :filename: foo.html, :indent: ' ' }
  106. input: |4
  107. <table>
  108. <tbody>
  109. <% for (i = 0; i < list; i++) { %>
  110. <tr>
  111. <td><%= "%d", i %></td>
  112. <td><%== list[i] %></td>
  113. </tr>
  114. <% } %>
  115. </tbody>
  116. </table>
  117. <%=== "%d", i %>
  118. expected: |
  119. #line 1 "foo.html"
  120. fputs("<table>\n"
  121. " <tbody>\n", stdout);
  122. for (i = 0; i < list; i++) {
  123. fputs(" <tr>\n"
  124. " <td>", stdout); fprintf(stdout, "%d", i); fputs("</td>\n"
  125. " <td>", stdout); escape(list[i], stdout); fputs("</td>\n"
  126. " </tr>\n", stdout);
  127. }
  128. fputs(" </tbody>\n"
  129. "</table>\n", stdout);
  130. fprintf(stderr, "*** debug: i=" "%d", i); fputs("\n", stdout);
  131. ##
  132. - name: java1
  133. lang: java
  134. class: Ejava
  135. options: { :buf: _buf, :bufclass: StringBuilder, :indent: ' ' }
  136. input: |
  137. <table>
  138. <tbody>
  139. <%
  140. int i = 0;
  141. for (Iterator it = list.iterator(); it.hasNext(); ) {
  142. String s = (String)it.next();
  143. i++;
  144. %>
  145. <tr class="<%= i%2==0 ? "even" : "odd" %>">
  146. <td><%= i %></td>
  147. <td><%== s %></td>
  148. </tr>
  149. <%
  150. }
  151. %>
  152. <tbody>
  153. </table>
  154. <%=== i %>
  155. expected: |4
  156. StringBuilder _buf = new StringBuilder(); _buf.append("<table>\n"
  157. + " <tbody>\n");
  158. int i = 0;
  159. for (Iterator it = list.iterator(); it.hasNext(); ) {
  160. String s = (String)it.next();
  161. i++;
  162. _buf.append(" <tr class=\""); _buf.append(i%2==0 ? "even" : "odd"); _buf.append("\">\n"
  163. + " <td>"); _buf.append(i); _buf.append("</td>\n"
  164. + " <td>"); _buf.append(escape(s)); _buf.append("</td>\n"
  165. + " </tr>\n");
  166. }
  167. _buf.append(" <tbody>\n"
  168. + "</table>\n");
  169. System.err.println("*** debug: i="+(i)); _buf.append("\n");
  170. return _buf.toString();
  171. ##
  172. - name: scheme1
  173. lang: scheme
  174. class: Escheme
  175. options:
  176. input: &scheme1_input|
  177. <% (let ((i 0)) %>
  178. <table>
  179. <tbody>
  180. <%
  181. (for-each
  182. (lambda (item)
  183. (set! i (+ i 1))
  184. %>
  185. <tr>
  186. <td><%= i %></td>
  187. <td><%== item %></td>
  188. </tr>
  189. <%
  190. ); lambda end
  191. list); for-each end
  192. %>
  193. </tbody>
  194. </table>
  195. <%=== i %>
  196. <% ); let end %>
  197. expected: |4
  198. (let ((_buf '())) (define (_add x) (set! _buf (cons x _buf))) (let ((i 0))
  199. (_add "<table>
  200. <tbody>\n")
  201. (for-each
  202. (lambda (item)
  203. (set! i (+ i 1))
  204. (_add " <tr>
  205. <td>")(_add i)(_add "</td>
  206. <td>")(_add (escape item))(_add "</td>
  207. </tr>\n")
  208. ); lambda end
  209. list); for-each end
  210. (_add " </tbody>
  211. </table>\n")
  212. (display "*** debug: i=")(display i)(display "\n")(_add "\n")
  213. ); let end
  214. (reverse _buf))
  215. ##
  216. - name: scheme2
  217. lang: scheme
  218. class: Escheme
  219. options: { :func: 'display' }
  220. input: *scheme1_input
  221. expected: |4
  222. (let ((i 0))
  223. (display "<table>
  224. <tbody>\n")
  225. (for-each
  226. (lambda (item)
  227. (set! i (+ i 1))
  228. (display " <tr>
  229. <td>")(display i)(display "</td>
  230. <td>")(display (escape item))(display "</td>
  231. </tr>\n")
  232. ); lambda end
  233. list); for-each end
  234. (display " </tbody>
  235. </table>\n")
  236. (display "*** debug: i=")(display i)(display "\n")(display "\n")
  237. ); let end
  238. ##
  239. - name: perl1
  240. lang: perl
  241. class: Eperl
  242. options:
  243. input: |
  244. <%
  245. my $user = 'Erubis';
  246. my @list = ('<aaa>', 'b&b', '"ccc"');
  247. %>
  248. <p>Hello <%= $user %>!</p>
  249. <table>
  250. <tbody>
  251. <% $i = 0; %>
  252. <% for $item (@list) { %>
  253. <tr bgcolor=<%= ++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
  254. <td><%= $i %></td>
  255. <td><%== $item %></td>
  256. </tr>
  257. <% } %>
  258. </tbody>
  259. </table>
  260. <%=== $i %>
  261. expected: |4
  262. use HTML::Entities;
  263. my $user = 'Erubis';
  264. my @list = ('<aaa>', 'b&b', '"ccc"');
  265. print('<p>Hello '); print($user); print('!</p>
  266. <table>
  267. <tbody>
  268. '); $i = 0;
  269. for $item (@list) {
  270. print(' <tr bgcolor='); print(++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); print('">
  271. <td>'); print($i); print('</td>
  272. <td>'); print(encode_entities($item)); print('</td>
  273. </tr>
  274. '); }
  275. print(' </tbody>
  276. </table>
  277. '); print('*** debug: $i=', $i, "\n");print('
  278. ');
  279. ##
  280. - name: javascript1
  281. lang: javascript
  282. class: Ejavascript
  283. options:
  284. input: &javascript_input |
  285. <%
  286. var user = 'Erubis';
  287. var list = ['<aaa>', 'b&b', '"ccc"'];
  288. %>
  289. <p>Hello <%= user %>!</p>
  290. <table>
  291. <tbody>
  292. <% var i; %>
  293. <% for (i = 0; i < list.length; i++) { %>
  294. <tr bgcolor=<%= ++i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
  295. <td><%= i %></td>
  296. <td><%= list[i] %></td>
  297. </tr>
  298. <% } %>
  299. </tbody>
  300. </table>
  301. <%=== i %>
  302. expected: |4
  303. var _buf = [];
  304. var user = 'Erubis';
  305. var list = ['<aaa>', 'b&b', '"ccc"'];
  306. _buf.push("<p>Hello "); _buf.push(user); _buf.push("!</p>\n\
  307. <table>\n\
  308. <tbody>\n");
  309. var i;
  310. for (i = 0; i < list.length; i++) {
  311. _buf.push(" <tr bgcolor="); _buf.push(++i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); _buf.push("\">\n\
  312. <td>"); _buf.push(i); _buf.push("</td>\n\
  313. <td>"); _buf.push(list[i]); _buf.push("</td>\n\
  314. </tr>\n");
  315. }
  316. _buf.push(" </tbody>\n\
  317. </table>\n");
  318. alert("*** debug: i="+(i)); _buf.push("\n");
  319. document.write(_buf.join(""));
  320. ##
  321. - name: javascript2
  322. lang: javascript
  323. class: Ejavascript
  324. options: { :docwrite: false }
  325. input: *javascript_input
  326. expected: |4
  327. var _buf = [];
  328. var user = 'Erubis';
  329. var list = ['<aaa>', 'b&b', '"ccc"'];
  330. _buf.push("<p>Hello "); _buf.push(user); _buf.push("!</p>\n\
  331. <table>\n\
  332. <tbody>\n");
  333. var i;
  334. for (i = 0; i < list.length; i++) {
  335. _buf.push(" <tr bgcolor="); _buf.push(++i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); _buf.push("\">\n\
  336. <td>"); _buf.push(i); _buf.push("</td>\n\
  337. <td>"); _buf.push(list[i]); _buf.push("</td>\n\
  338. </tr>\n");
  339. }
  340. _buf.push(" </tbody>\n\
  341. </table>\n");
  342. alert("*** debug: i="+(i)); _buf.push("\n");
  343. _buf.join("");
  344. ##